דריסת toString()
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 70 מתוך 110.
כשמדפיסים אובייקט ב-Dart, ייתכן שתראו משהו כמו Instance of 'Person' — לא מאוד מועיל. זה קורה מפני שכל מחלקה יורשת את המתודה toString() כברירת מחדל מ-Object, שמחזירה רק את שם המחלקה.
על ידי דריסה של toString(), אפשר לספק ייצוג מחרוזת בעל משמעות של האובייקטים שלך:
class Person {
String name;
int age;
Person(this.name, this.age);
@override
String toString() {
return 'Person(name: $name, age: $age)';
}
}
void main() {
var person = Person('Alice', 30);
print(person); // Person(name: Alice, age: 30)
}בלי הדריסה, print(person) היה פולט Instance of 'Person'. איתה, מתקבל מידע שימושי על המצב של האובייקט.
המתודה toString() נקראת באופן אוטומטי בכל פעם ש-Dart צריך להמיר את האובייקט שלך למחרוזת — בהצהרות print(), באינטרפולציה של מחרוזות או בעת שרשור עם מחרוזות אחרות:
var message = 'User: $person'; // toString() נקראת אוטומטית
print('Found: ' + person.toString()); // קריאה מפורשתמימוש מוצלח של toString() מקל מאוד על איתור באגים בכך שהוא מאפשר לך לבדוק במהירות ערכים של אובייקטים במהלך הפיתוח.
אתגר
קלבואו נבנה מערכת קטלוג מוצרים שבה כל מוצר מציג את המידע שלו בפורמט ברור וקריא בעת הדפסה. תתרגלו לדרוס את המתודה toString() כדי להפוך את האובייקטים שלכם לקלים יותר לניפוי שגיאות ולנוחים יותר למשתמש.
תארגנו את הקוד שלכם בשני קבצים:
product.dart: צרו מחלקהProductשמייצגת פריט בחנות. למוצר שלכם צריכים להיותname(String),price(double) ו-quantity(int). דרסו את המתודהtoString()כדי שתחזיר מחרוזת מעוצבת בפורמט המדויק הזה:Product(name: [name], price: $[price], qty: [quantity])main.dart: ייבאו את קובץ המוצר שלכם והדגימו כיצד הדריסה שלtoString()הופכת את הדפסת האובייקטים לשימושית הרבה יותר. צרו שלושה מוצרים והדפיסו אותם כדי לראות את ייצוג המחרוזת המותאם אישית שלכם בפעולה:- מוצר בשם
'Laptop'במחיר999.99ובכמות5 - מוצר בשם
'Mouse'במחיר29.5ובכמות50 - מוצר בשם
'Keyboard'במחיר75.0ובכמות30
Featured: [product]באמצעות המוצר Laptop.- מוצר בשם
שימו לב כיצד הדפסה ישירה של כל מוצר מציגה מידע משמעותי במקום ההודעה הלא מועילה Instance of 'Product'. המתודה toString() שלכם נקראת אוטומטית גם בפקודות print() וגם בעת שימוש באינטרפולציה של מחרוזת.
פלט צפוי:
Product(name: Laptop, price: $999.99, qty: 5)
Product(name: Mouse, price: $29.5, qty: 50)
Product(name: Keyboard, price: $75.0, qty: 30)
Featured: Product(name: Laptop, price: $999.99, qty: 5)נסו בעצמכם
import 'product.dart';
void main() {
// TODO: צרו שלושה מופעים של Product:
// 1. Laptop - מחיר: 999.99, כמות: 5
// 2. Mouse - מחיר: 29.5, כמות: 50
// 3. Keyboard - מחיר: 75.0, כמות: 30
// TODO: הדפיסו כל מוצר (הפונקציה toString() תיקרא אוטומטית)
// TODO: הדפיסו הודעה על מוצר נבחר באמצעות שילוב משתנים במחרוזת
// תבנית: Featured: [המוצר laptop]
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
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 במיקסיניםמיקסינים לעומת ירושהמיקסינים לעומת ממשקסיכום – מערכת בעלי החיים11מתודות מיוחדות
דריסת toString()דריסת hashCode ו־==הממשק Comparableמתודת call()דריסת noSuchMethodסיכום – אוסף מותאם אישית3מאפייני מחלקה
איברי מופע לעומת איברים סטטייםשדות final ו-constמשתני lateמתודות ושדות סטטייםGetters ו-Settersסיכום – מנהל חשבונות בנק6ירושה
ירושה בסיסיתמילת המפתח superדריסת מתודותהאנוטציה @overrideמילת המפתח final למחלקהבנאים וירושהסיכום – היררכיית עובדים9פולימורפיזם
יסודות הפולימורפיזםפולימורפיזם באמצעות ממשקיםבדיקת טיפוסים בזמן ריצההאופרטורים is ו-asמילת המפתח קווריאנטיסיכום — מעבד תשלומים12תכנות מונחה עצמים אסינכרוני
Future-ים ו-async/awaitיסודות ה-Streamsבקרי Streamsבנאים אסינכרונייםאסינכרוניות במתודות של מחלקהסיכום - אחזור נתוניםתרגלו בעצמכם: קומפיילר Dart אונליין