Menu
Coddy logo textTech

משתני late

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

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

class User {
  late String username;
  
  void initialize(String name) {
    username = name;
  }
  
  void greet() {
    print('Hello, $username!');
  }
}

User user = User();
user.initialize('Alice');
user.greet();  // שלום, Alice!

בלי late, Dart היה מתלונן על כך ש־username לא מאותחל. המשנה late מבטיח שתשייך ערך לפני קריאתו.

יתרון נוסף של late הוא אתחול עצל. משתנה late עם אתחול לא יחשב את הערך שלו עד לגישה הראשונה אליו:

class Config {
  late String settings = loadSettings();
  
  String loadSettings() {
    print('Loading...');
    return 'default';
  }
}

Config config = Config();
print('Config created');
print(config.settings);  // "Loading..." מודפס כאן, ואז "default"

המתודה loadSettings() מופעלת רק כאשר ניגשים לראשונה אל settings, ולא כאשר האובייקט נוצר. עם זאת, חשוב להיזהר — גישה אל משתנה late לפני אתחולו גורמת לשגיאת זמן ריצה.

challenge icon

אתגר

קל

בואו נבנה מנהל חיבור למסד נתונים שמדגים גם אתחול מושהה וגם אתחול עצל באמצעות משתני late.

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

  • database.dart: הגדירו מחלקה בשם Database שמדמה חיבור למסד נתונים. למחלקה צריכים להיות:
    • late String connectionString שיוגדר לאחר יצירת האובייקט
    • late String status עם מאתחל עצל שמדפיס Checking connection... ומחזיר 'Connected'
    • מתודה connect(String connStr) שמגדירה את connectionString ומדפיסה Connection configured: [connectionString]
    • מתודה query(String sql) שמדפיסה Executing on [connectionString]: [sql]
    • מתודה checkStatus() שמדפיסה Status: [status] (פעולה זו תפעיל את האתחול העצל בקריאה הראשונה)
  • main.dart: ייבאו את מחלקת מסד הנתונים והדגימו את שני השימושים ב-late:
    • צרו מופע של Database
    • הדפיסו Database object created
    • קראו ל-connect() עם מחרוזת החיבור 'localhost:5432/mydb'
    • קראו ל-query() עם 'SELECT * FROM users'
    • קראו ל-checkStatus() כדי להפעיל את האתחול העצל

שימו לב ש-connectionString מוגדר ידנית לאחר יצירת האובייקט, ואילו status מחשב את ערכו רק כשניגשים אליו לראשונה.

הפלט הצפוי:

Database object created
Connection configured: localhost:5432/mydb
Executing on localhost:5432/mydb: SELECT * FROM users
Checking connection...
Status: Connected

נסו בעצמכם

import 'database.dart';

void main() {
  // TODO: צור מופע של Database
  
  // TODO: הדפס את 'Database object created'
  
  // TODO: קרא ל-connect() עם 'localhost:5432/mydb'
  
  // TODO: קרא ל-query() עם 'SELECT * FROM users'
  
  // TODO: קרא ל-checkStatus() כדי להפעיל אתחול עצל
}
quiz iconבחנו את עצמכם

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

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

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