Menu
Coddy logo textTech

אופרטורים מודעי null

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 27 מתוך 110.

מעבר ל-?. ול-!, Dart מספקת אופרטורים נוספים שהופכים את העבודה עם ערכים שיכולים להיות null לתמציתית יותר. אופרטורים מודעי-null אלה עוזרים לך לכתוב קוד נקי יותר כשעובדים עם ערכים שעשויים להיות null.

האופרטור לאיחוד ערכי null ?? מחזיר את הערך השמאלי אם הוא אינו null, אחרת הוא מחזיר את הערך הימני:

String? nickname;
String displayName = nickname ?? 'Guest';
print(displayName);  // Guest

nickname = 'Alex';
displayName = nickname ?? 'Guest';
print(displayName);  // Alex

אופרטור ההשמה המודע ל-null ??= משייך ערך רק אם המשתנה כרגע null:

String? username;
username ??= 'Anonymous';
print(username);  // Anonymous

username ??= 'NewName';
print(username);  // עדיין Anonymous (לא היה null)

אפשר לשרשר את אופרטור הגישה המודעת ל־null ?. עבור מאפיינים מקוננים:

String? city = user?.address?.city;  // בטוח גם אם user או address הם null

האופרטורים האלה משתלבים היטב זה עם זה. לדוגמה, אפשר לגשת למאפיין שיכול להיות null ולספק ערך ברירת מחדל:

String greeting = user?.name ?? 'Stranger';
// אם user הוא null או user.name הוא null, השתמש ב-'Stranger'

השימוש באופרטורים האלה שומר על הקוד שלך קריא תוך שמירה על בטיחות מפני ערכי null לאורך כל התוכנית.

challenge icon

אתגר

קל

בואו נבנה מערכת לרישום אורחים שמדגימה כיצד אופרטורים שמודעים ל-null יכולים להפוך את הקוד שלכם לנקי יותר בעת טיפול במידע אופציונלי.

תארגנו את הקוד שלכם בשני קבצים:

  • guest.dart: הגדירו מחלקה Guest שמייצגת אדם שמשתתף באירוע. חלק מהאורחים מספקים פרטים מלאים, ואחרים מוסרים רק את הפרטים הבסיסיים. המחלקה שלכם צריכה לכלול:
    • String name שאינו יכול להיות null — לכל אורח חייב להיות שם
    • String? email שיכול להיות null — לא כולם מוסרים כתובת אימייל
    • String? dietaryPreference שיכול להיות null — חלק מהאורחים לא מציינים העדפות תזונתיות
    • בנאי שמקבל את name כפרמטר חובה
    • מתודה getDisplayEmail() שמחזירה את כתובת האימייל אם היא זמינה, או 'No email provided' באמצעות האופרטור ??
    • מתודה assignDefaultDiet() שמגדירה את dietaryPreference לערך 'Standard' רק אם הערך הנוכחי הוא null, באמצעות האופרטור ??=
    • מתודה getEmailDomain() שמחזירה את אורך כתובת האימייל באמצעות ?., או null אם אין כתובת אימייל
    • מתודה printBadge() שמדפיסה את פרטי תג האורח
  • main.dart: ייבאו את מחלקת האורח שלכם ורשמו שלושה אורחים עם רמות מידע שונות:
    • צרו אורחת בשם 'Alice', הגדירו את כתובת האימייל שלה ל-'alice@company.com' ואת ההעדפה התזונתית שלה ל-'Vegetarian'
    • צרו אורח בשם 'Bob', הגדירו רק את כתובת האימייל שלו ל-'bob@email.org' (השאירו את ההעדפה התזונתית כ-null)
    • צרו אורח בשם 'Charlie' (השאירו גם את כתובת האימייל וגם את ההעדפה התזונתית כ-null)
    • קראו למתודה assignDefaultDiet() עבור שלושת האורחים
    • עבור כל אורח לפי הסדר, קראו למתודה printBadge(), ואז הדפיסו Email length: [result] באמצעות getEmailDomain()

המתודה printBadge() צריכה להדפיס בפורמט הזה:

=== Guest Badge ===
Name: [name]
Email: [getDisplayEmail()]
Diet: [dietaryPreference or "Not specified"]

שימו לב שההעדפה התזונתית של Alice נשארת 'Vegetarian' משום ש-??= משייך ערך רק כשהערך הוא null, ואילו Bob ו-Charlie מקבלים את ברירת המחדל של תזונה מסוג 'Standard'.

פלט צפוי:

=== Guest Badge ===
Name: Alice
Email: alice@company.com
Diet: Vegetarian
Email length: 17
=== Guest Badge ===
Name: Bob
Email: bob@email.org
Diet: Standard
Email length: 13
=== Guest Badge ===
Name: Charlie
Email: No email provided
Diet: Standard
Email length: null

נסו בעצמכם

import 'guest.dart';

void main() {
  // TODO: צרו אורחת בשם 'Alice'
  // הגדירו את כתובת האימייל שלה ל-'alice@company.com'
  // הגדירו את ההעדפה התזונתית שלה ל-'Vegetarian'

  // TODO: צרו אורח בשם 'Bob'
  // הגדירו רק את כתובת האימייל שלו ל-'bob@email.org'
  // השאירו את ההעדפה התזונתית כ-null

  // TODO: צרו אורח בשם 'Charlie'
  // השאירו גם את כתובת האימייל וגם את ההעדפה התזונתית כ-null

  // TODO: קראו ל-assignDefaultDiet() עבור כל שלושת האורחים

  // TODO: עבור כל אורח לפי הסדר (Alice, Bob, Charlie):
  // - קראו ל-printBadge()
  // - הדפיסו 'Email length: [result]' באמצעות getEmailDomain()
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

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