Menu
Coddy logo textTech

בנאים קבועים

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

בנאי קבוע יוצר אובייקטים קבועים בזמן הידור. כשאתה יוצר אובייקטים עם אותם ערכים באמצעות בנאי const, Dart עושה שימוש חוזר באותו מופע בזיכרון, וכך משפר את הביצועים.

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

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

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

אפשר גם להשתמש בבנאים מסוג const בלי מילת המפתח const, מה שיוצר מופעים רגילים (שאינם קבועים):

var red = Color(255, 0, 0);       // מופע רגיל
const blue = Color(0, 0, 255);    // מופע קבוע

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

challenge icon

אתגר

קל

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

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

  • difficulty.dart: הגדירו מחלקה בשם Difficulty שמייצגת את הגדרות רמת הקושי של המשחק. המחלקה שלכם צריכה לכלול:
    • שלושה שדות final: name (String), enemyCount (int) ו-playerLives (int)
    • בנאי קבוע שמאתחל את שלושת השדות
    • מתודה display() שמדפיסה את מידע רמת הקושי
  • main.dart: ייבאו את מחלקת רמת הקושי שלכם וצרו שלוש הגדרות קבועות מראש לרמות קושי:
    • easy עם השם 'Easy',‏ 5 אויבים ו-5 חיים
    • medium עם השם 'Medium',‏ 10 אויבים ו-3 חיים
    • hard עם השם 'Hard',‏ 20 אויבים ו-1 חיים
    צרו את שלושתם כקבועים בזמן הידור באמצעות מילת המפתח const. לאחר מכן קראו ל-display() עבור כל אחד מהם, לפי הסדר שמופיע למעלה. לבסוף, בדקו אם שני אובייקטים מסוג const Difficulty('Easy', 5, 5) זהים באמצעות identical() והדפיסו את התוצאה.

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

[name]: [enemyCount] enemies, [playerLives] lives

פלט צפוי:

Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
true

נסו בעצמכם

import 'difficulty.dart';

void main() {
  // TODO: צרו שלוש הגדרות קושי קבועות מראש באמצעות מילת המפתח const:
  // - easy: שם 'Easy', 5 enemies, 5 lives
  // - medium: שם 'Medium', 10 enemies, 3 lives
  // - hard: שם 'Hard', 20 אויבים, חיים 1
  
  // TODO: קראו ל-display() עבור כל רמת קושי לפי הסדר: easy, medium, hard
  
  // TODO: בדקו אם שני אובייקטים מסוג const Difficulty('Easy', 5, 5) זהים
  // באמצעות identical() והדפיסו את התוצאה
}
quiz iconבחנו את עצמכם

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

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

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