סיכום – מערכת פרופילי משתמשים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 29 מתוך 110.
אתגר
קלבואו נבנה מערכת שלמה לפרופילי משתמשים, המשלבת את כל המושגים בנושא בטיחות מפני null שלמדת בפרק הזה. תיצור מערכת לניהול חשבונות משתמשים, עם שילוב של מידע נדרש ופרטים אופציונליים.
תארגן את הקוד שלך בשני קבצים:
user_profile.dart: הגדר מחלקה בשםUserProfileשמייצגת חשבון משתמש. חשוב איזה מידע חיוני (כמו שם משתמש) ואיזה מידע אופציונלי (כמו ביוגרפיה או מספר טלפון). המחלקה שלך צריכה לכלול:String usernameשאינו יכול להיות null — לכל משתמש חייב להיות שם משתמשString emailשאינו יכול להיות null — לכל משתמש חייבת להיות כתובת אימיילString? displayNameשיכול להיות null — משתמשים עשויים להעדיף להציג שם אחרString? bioשיכול להיות null — לא כולם כותבים ביוגרפיהint? ageשיכול להיות null — גיל הוא מידע אישי אופציונלי- בנאי המשתמש בפרמטרים בעלי שם עם
requiredעבורusernameו-email - מתודה
getDisplayIdentity()שמחזירה את השם המוצג אם הוגדר, ואחרת מחזירה את שם המשתמש באמצעות?? - מתודה
getBioPreview()שמחזירה את 20 התווים הראשונים של הביוגרפיה ואחריהם...אם קיימת ביוגרפיה שאורכה עולה על 20 תווים, את הביוגרפיה המלאה אם אורכה 20 תווים או פחות, אוnullאם לא קיימת ביוגרפיה (השתמש ב-?.לגישה בטוחה) - מתודה
setDefaultBio()שמגדירה את הביוגרפיה ל-'Hello, I am new here!'רק אם כרגע ערכה null, באמצעות??= - מתודה
printProfile()שמציגה את פרופיל המשתמש המלא
main.dart: ייבא את מחלקת פרופיל המשתמש שלך וצור כמה משתמשים כדי להדגים את כל טווח התכונות של בטיחות מפני null:- צור משתמש עם שם המשתמש
'alice_dev'וכתובת האימייל'alice@code.com', ואז הגדר את השם המוצג ל-'Alice', את הביוגרפיה ל-'Software developer passionate about clean code and testing', ואת הגיל ל-28 - צור משתמש עם שם המשתמש
'bob_builder'וכתובת האימייל'bob@build.io', ואז הגדר רק את השם המוצג ל-'Bob' - צור משתמש עם שם המשתמש
'charlie99'וכתובת האימייל'charlie@mail.net'(השאר את כל השדות האופציונליים כ-null) - קרא ל-
setDefaultBio()עבור כל שלושת המשתמשים - עבור כל משתמש לפי הסדר, קרא ל-
printProfile(), ואז הדפסIdentity: [getDisplayIdentity()], ואז הדפסBio preview: [getBioPreview()]
- צור משתמש עם שם המשתמש
המתודה printProfile() צריכה להדפיס בפורמט הזה:
===== User Profile =====
Username: [username]
Email: [email]
Display Name: [displayName or "Not set"]
Bio: [bio or "No bio"]
Age: [age or "Not specified"]שים לב שהביוגרפיה של Alice נשארת ללא שינוי לאחר setDefaultBio(), כי כבר יש לה ערך, בעוד ש-Charlie מקבל את הביוגרפיה כברירת מחדל. שים לב גם שתצוגת הביוגרפיה מקצרת את הביוגרפיה הארוכה יותר של Alice, אך מציגה במלואה את הביוגרפיה הקצרה יותר של Charlie, שהוגדרה כברירת מחדל.
פלט צפוי:
===== User Profile =====
Username: alice_dev
Email: alice@code.com
Display Name: Alice
Bio: Software developer passionate about clean code and testing
Age: 28
Identity: Alice
Bio preview: Software developer p...
===== User Profile =====
Username: bob_builder
Email: bob@build.io
Display Name: Bob
Bio: Hello, I am new here!
Age: Not specified
Identity: Bob
Bio preview: Hello, I am new here!
===== User Profile =====
Username: charlie99
Email: charlie@mail.net
Display Name: Not set
Bio: Hello, I am new here!
Age: Not specified
Identity: charlie99
Bio preview: Hello, I am new here!נסו בעצמכם
import 'user_profile.dart';
void main() {
// TODO: צרו משתמש 'alice_dev' עם כתובת אימייל 'alice@code.com'
// הגדירו את displayName ל-'Alice'
// הגדירו את bio ל-'Software developer passionate about clean code and testing'
// הגדירו את age ל-28
// TODO: צרו משתמש 'bob_builder' עם כתובת אימייל 'bob@build.io'
// הגדירו רק את displayName ל-'Bob'
// TODO: צרו משתמש 'charlie99' עם כתובת אימייל 'charlie@mail.net'
// השאירו את כל השדות האופציונליים כ-null
// TODO: קראו ל-setDefaultBio() עבור כל שלושת המשתמשים
// TODO: עבור כל משתמש לפי הסדר (alice, bob, charlie):
// 1. קראו ל-printProfile()
// 2. הדפיסו "Identity: [getDisplayIdentity()]"
// 3. הדפס "Bio preview: [getBioPreview()]"
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםספריות וייבואמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותמשתני מופעיסודות הבנאיחזרה: מחשבון פשוט4בטיחות מפני ערכי null
מבוא לבטיחות מפני ערכי nullניתן להקצאה ל-null לעומת לא ניתן להקצאה ל-nullהאופרטורים ? ו-!מילת המפתח Late ובטיחות מפני ערכי nullאופרטורים מודעי nullבטיחות מפני ערכי null במחלקותסיכום – מערכת פרופילי משתמשים7מחלקות מופשטות וממשקים
מחלקות מופשטותמתודות מופשטותממשקים ב-Dartממשקים משתמעיםמימוש לעומת הורשהממשקים מרוביםחזרה – מחשבון צורות10אוספים וגנריות
סקירה כללית של List, Set ו-Mapאוספים בטוחים מבחינת טיפוסיםמחלקות גנריותמתודות גנריותאילוצים גנרייםIterable ו-Iteratorסיכום – אחסון גנרי13מושגי OOP מתקדמים
הרכבה לעומת הורשהמתודות הרחבהמחלקות קריאותמחלקות אטומות (Dart 3)רשומות (Dart 3)תבניות והתאמה (3.0)טיפוסים מונים עם מתודות16פרויקט: ניהול ספרייה
סקירת הפרויקטמחלקות ספר ומשתמש2בנאים ב-Dart
בנאי ברירת מחדלבנאים בעלי שםרשימות אתחולבנאים קבועיםבנאי Factoryבנאים מפניםסיכום - בונה צורות5כימוס
חברים ציבוריים לעומת פרטייםמוסכמת הקידומת _פרטיות ברמת הספרייההעמקה ב-getters וב-settersהסתרת מידעסיכום – רשומות תלמידים8מיקסינים
מבוא למיקסיניםיצירת מיקסיניםשימוש במספר מיקסיניםמילת המפתח on במיקסיניםמיקסינים לעומת ירושהמיקסינים לעומת ממשקסיכום – מערכת בעלי החיים3מאפייני מחלקה
איברי מופע לעומת איברים סטטייםשדות final ו-constמשתני lateמתודות ושדות סטטייםGetters ו-Settersסיכום – מנהל חשבונות בנק6ירושה
ירושה בסיסיתמילת המפתח superדריסת מתודותהאנוטציה @overrideמילת המפתח final למחלקהבנאים וירושהסיכום – היררכיית עובדים9פולימורפיזם
יסודות הפולימורפיזםפולימורפיזם באמצעות ממשקיםבדיקת טיפוסים בזמן ריצההאופרטורים is ו-asמילת המפתח קווריאנטיסיכום — מעבד תשלומים12תכנות מונחה עצמים אסינכרוני
Future-ים ו-async/awaitיסודות ה-Streamsבקרי Streamsבנאים אסינכרונייםאסינכרוניות במתודות של מחלקהסיכום - אחזור נתוניםתרגלו בעצמכם: קומפיילר Dart אונליין