Menu
Coddy logo textTech

דריסת 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() מקל מאוד על איתור באגים בכך שהוא מאפשר לך לבדוק במהירות ערכים של אובייקטים במהלך הפיתוח.

challenge icon

אתגר

קל

בואו נבנה מערכת קטלוג מוצרים שבה כל מוצר מציג את המידע שלו בפורמט ברור וקריא בעת הדפסה. תתרגלו לדרוס את המתודה 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]
}
quiz iconבחנו את עצמכם

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

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

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