Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

رمي استثناء

جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 42 من 65.

أحياناً تحتاج إلى إنشاء شروط خطأ خاصة بك في الكود الخاص بك. تسمح لك الكلمة المفتاحية throw بإطلاق استثناء يدوياً عندما يواجه برنامجك موقفاً لا ينبغي السماح له بالاستمرار.

عندما تقوم بـ throw استثناءً، فأنت تقول أساساً "أوقف كل شيء - هناك خطأ ما هنا". هذا مفيد للتحقق من صحة المدخلات أو فرض القواعد في دوالك. يمكنك رمي رسالة نصية بسيطة أو إنشاء أنواع استثناءات أكثر تحديداً.

void checkAge(int age) {
  if (age < 0) {
    throw "Age cannot be negative!";
  }
  print("Age is valid: $age");
}

في هذا المثال، إذا حاول شخص ما تمرير عمر سالب، تقوم الدالة فوراً برمي استثناء مع رسالة وصفية. يمنع هذا بقية الدالة من العمل ببيانات غير صالحة، مما يجعل الكود الخاص بك أكثر موثوقية وأسهل في التصحيح.

يعد رمي الاستثناءات ذا قيمة خاصة في الدوال التي تحتاج إلى التحقق من صحة مدخلاتها قبل المضي قدمًا في تنفيذ عمليات مهمة.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يتحقق من صحة معلومات حساب المستخدم من خلال تنفيذ وظائف تحقق مخصصة تطلق استثناءات (exceptions) عند اكتشاف بيانات غير صالحة. يجب أن يقوم برنامجك بفحص حقول حساب متعددة وإطلاق رسائل خطأ محددة لمختلف حالات فشل التحقق.

  1. اقرأ مدخلاً نصياً يمثل اسم المستخدم (username)
  2. اقرأ مدخلاً نصياً يمثل عنوان البريد الإلكتروني (email)
  3. اقرأ مدخلاً نصياً يمثل العمر (age) كسلسلة نصية
  4. اقرأ مدخلاً نصياً يمثل كلمة المرور (password)
  5. قم بإنشاء وظيفة تسمى validateUsername تتحقق مما إذا كان اسم المستخدم صالحاً:
    • إذا كان اسم المستخدم فارغاً أو يحتوي على أقل من 3 أحرف، فقم بإطلاق الاستثناء: "Username must be at least 3 characters long"
    • إذا كان اسم المستخدم يحتوي على مسافات، فقم بإطلاق الاستثناء: "Username cannot contain spaces"
    • إذا نجح التحقق، اطبع: "Username validation passed"
  6. قم بإنشاء وظيفة تسمى validateEmail تتحقق مما إذا كان البريد الإلكتروني صالحاً:
    • إذا كان البريد الإلكتروني لا يحتوي على رمز @، فقم بإطلاق الاستثناء: "Email must contain @ symbol"
    • إذا كان البريد الإلكتروني لا يحتوي على نقطة . بعد رمز @، فقم بإطلاق الاستثناء: "Email must contain a valid domain"
    • إذا نجح التحقق، اطبع: "Email validation passed"
  7. قم بإنشاء وظيفة تسمى validateAge تتحقق مما إذا كان العمر صالحاً:
    • قم بتحويل سلسلة العمر النصية إلى عدد صحيح باستخدام int.parse()
    • إذا كان العمر أقل من 13، فقم بإطلاق الاستثناء: "Age must be at least 13 years old"
    • إذا كان العمر أكبر من 120، فقم بإطلاق الاستثناء: "Age must be realistic (under 120)"
    • إذا نجح التحقق، اطبع: "Age validation passed"
  8. قم بإنشاء وظيفة تسمى validatePassword تتحقق مما إذا كانت كلمة المرور صالحة:
    • إذا كانت كلمة المرور أقصر من 8 أحرف، فقم بإطلاق الاستثناء: "Password must be at least 8 characters long"
    • إذا نجح التحقق، اطبع: "Password validation passed"
  9. قم باستدعاء كل وظيفة تحقق بالتسلسل وتعامل مع أي استثناءات تحدث
  10. اعرض النتائج بالتنسيق الدقيق الموضح أدناه

على سبيل المثال، إذا كانت المدخلات هي "john"، و "john@email.com"، و "25"، و "password123"، يجب أن يخرج برنامجك ما يلي:

Account Validation System
=========================
Validating username: john
Username validation passed
Validating email: john@email.com
Email validation passed
Validating age: 25
Age validation passed
Validating password: password123
Password validation passed
=========================
All validations passed successfully!
Account created for user: john

إذا كانت المدخلات هي "jo"، و "john@email.com"، و "25"، و "password123"، يجب أن يخرج برنامجك ما يلي:

Account Validation System
=========================
Validating username: jo
Validation Error: Username must be at least 3 characters long
Account creation failed due to validation errors

إذا كانت المدخلات هي "john doe"، و "johnemail.com"، و "12"، و "pass"، يجب أن يخرج برنامجك ما يلي:

Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errors

يجب أن يستدعي برنامجك كل وظيفة تحقق بالترتيب الدقيق: اسم المستخدم، ثم البريد الإلكتروني، ثم العمر، ثم كلمة المرور. توقف عن التحقق واعرض رسالة الخطأ بمجرد فشل أي عملية تحقق. استخدم الكلمة المفتاحية throw لإطلاق الاستثناءات يدوياً مع رسائل الخطأ المحددة الموضحة أعلاه. يجب أن تتحقق كل وظيفة تحقق من الحقل الخاص بها وتطلق استثناءً إذا فشل التحقق، أو تطبع رسالة نجاح إذا تم بنجاح.

ورقة مرجعية

تسمح لك الكلمة المفتاحية throw بإطلاق الاستثناءات يدويًا عندما يواجه برنامجك ظروفًا غير صالحة:

void checkAge(int age) {
  if (age < 0) {
    throw "Age cannot be negative!";
  }
  print("Age is valid: $age");
}

عندما تقوم بـ throw استثناء، يتوقف البرنامج عن التنفيذ عند تلك النقطة. هذا مفيد للتحقق من صحة المدخلات وفرض القواعد في الدوال، مما يجعل كودك أكثر موثوقية وأسهل في تصحيح الأخطاء.

يمكنك إطلاق رسائل نصية بسيطة أو إنشاء أنواع استثناءات أكثر تحديدًا. يعد إطلاق الاستثناءات ذا قيمة خاصة في دوال التحقق التي تحتاج إلى فحص المدخلات قبل المتابعة في العمليات الهامة.

جرّب بنفسك

import 'dart:io';

void main() {
  // قراءة المدخلات
  String? username = stdin.readLineSync();
  String? email = stdin.readLineSync();
  String? age = stdin.readLineSync();
  String? password = stdin.readLineSync();
  
  print("Account Validation System");
  print("=========================");
  
  try {
    // TODO: قم بإنشاء دالة validateUsername واستدعائها هنا
    print("Validating username: $username");
    
    // TODO: قم بإنشاء دالة validateEmail واستدعائها هنا
    print("Validating email: $email");
    
    // TODO: قم بإنشاء دالة validateAge واستدعائها هنا
    print("Validating age: $age");
    
    // TODO: قم بإنشاء دالة validatePassword واستدعائها هنا
    print("Validating password: $password");
    
    // TODO: إذا نجحت جميع عمليات التحقق، اطبع رسائل النجاح
    print("=========================");
    print("All validations passed successfully!");
    print("Account created for user: $username");
    
  } catch (e) {
    // TODO: التعامل مع الاستثناءات وطباعة رسالة الخطأ
    print("Validation Error: $e");
    print("Account creation failed due to validation errors");
  }
}

// TODO: اكتب دوال التحقق الخاصة بك هنا
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow