Menu
Coddy logo textTech

השלכת חריגה

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-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

אתגר

קל

צרו תוכנית שבודקת את פרטי חשבון המשתמש באמצעות מימוש פונקציות בדיקה מותאמות אישית שזורקות חריגות כאשר מזוהים נתונים לא תקינים. התוכנית שלכם צריכה לבדוק כמה שדות בחשבון ולזרוק הודעות שגיאה ספציפיות עבור כשלים שונים בבדיקה.

  1. קראו קלט מסוג מחרוזת המייצג את שם המשתמש
  2. קראו קלט מסוג מחרוזת המייצג את כתובת הדוא"ל
  3. קראו קלט מסוג מחרוזת המייצג את הגיל כמחרוזת
  4. קראו קלט מסוג מחרוזת המייצג את הסיסמה
  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 כדי להפעיל חריגות באופן ידני עם הודעות השגיאה הספציפיות שמופיעות למעלה. כל פונקציית בדיקה צריכה לבדוק את השדה המתאים לה ולזרוק חריגה אם הבדיקה נכשלת, או להדפיס הודעת הצלחה אם היא מצליחה.

נסו בעצמכם

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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Dart אונליין