Menu
Coddy logo textTech

רשימות אתחול

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

רשימת אתחול היא הקוד שמופיע אחרי נקודתיים בבנאי, לפני גוף הבנאי. היא פועלת לפני שגוף הבנאי מבוצע ומשמשת לאתחול משתני מופע.

כבר ראית רשימות אתחול בשיעורים קודמים:

Point.origin() : x = 0, y = 0;

החלק שאחרי הנקודתיים (x = 0, y = 0) הוא רשימת האתחול. אתחולים מרובים מופרדים בפסיקים.

רשימות אתחול חיוניות כשעובדים עם משתני final, שחייבים לקבל ערך לפני שגוף הבנאי מתחיל לפעול:

class Circle {
  final double radius;
  final double area;

  Circle(double r)
      : radius = r,
        area = 3.14159 * r * r;
}

Circle c = Circle(5);
print(c.radius); // 5.0
print(c.area);   // 78.53975

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

אפשר לשלב את התחביר המקוצר this. עם רשימת אתחול:

class Rectangle {
  final double width;
  final double height;
  final double area;

  Rectangle(this.width, this.height)
      : area = width * height;
}

Rectangle rect = Rectangle(4, 5);
print(rect.area); // 20.0

כאן, הערכים של width ו-height מוקצים באמצעות קיצור, ואילו area מחושב ברשימת האתחול באמצעות הערכים האלה.

challenge icon

אתגר

קל

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

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

  • box.dart: הגדירו מחלקה בשם Box שמייצגת קופסה תלת־ממדית עם מידות ומאפיינים שמחושבים אוטומטית. המחלקה צריכה לכלול:
    • שלושה שדות מסוג final double: length, width ו־height
    • שני שדות מחושבים מסוג final double: volume ו־surfaceArea
    • בנאי שמקבל את length, width ו־height באמצעות הקיצור this., ומשתמש ברשימת אתחול כדי לחשב את volume (length × width × height) ואת surfaceArea (2 × (length×width + width×height + height×length))
    • מתודה בשם display() שמדפיסה את פרטי הקופסה
  • main.dart: ייבאו את מחלקת הקופסה וצרו שתי קופסאות:
    • קופסה במידות 3.0, 4.0, 5.0
    • קופסה במידות 2.0, 2.0, 2.0
    קראו ל־display() עבור כל קופסה, לפי הסדר המפורט.

המתודה display() צריכה להדפיס בדיוק בפורמט הבא:

Box: [length]x[width]x[height] | Volume: [volume] | Surface: [surfaceArea]

פלט צפוי:

Box: 3.0x4.0x5.0 | Volume: 60.0 | Surface: 94.0
Box: 2.0x2.0x2.0 | Volume: 8.0 | Surface: 24.0

נסו בעצמכם

import 'box.dart';

void main() {
  // TODO: צרו תיבה בממדים 3.0, 4.0, 5.0
  
  // TODO: צרו תיבה בממדים 2.0, 2.0, 2.0
  
  // TODO: קראו ל-display() על כל תיבה לפי הסדר
  
}
quiz iconבחנו את עצמכם

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

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

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