Dart Cheat Sheet: דף עזר מהיר
עודכן לאחרונה
Hello World ומבנה התוכנית
כל תוכנית Dart מתחילה בפונקציית main שברמה העליונה.
| פעולה | תחביר |
|---|---|
| נקודת כניסה | void main() { ... } |
| הדפסת שורה | print("Hello, World!"); |
| שילוב משתנה במחרוזת | print("Hi $name"); |
| ביטוי בתוך מחרוזת | print("Sum: ${a + b}"); |
| הערה | // this is a comment |
| הערה מרובת שורות | /* ... */ |
| ייבוא ספרייה | import 'dart:math'; |
| הרצת קובץ | dart run main.dart |
משתנים וטיפוסים
Dart היא שפה עם טיפוסים סטטיים, אבל יודעת להסיק טיפוסים עם var.
| פעולה | תחביר |
|---|---|
| משתנה עם הסקת טיפוס | var age = 30; |
| טיפוס מפורש | int age = 30; |
| קבוע בזמן קומפילציה | const pi = 3.14; |
| קבוע בזמן ריצה | final name = getName(); |
| טיפוסים בסיסיים | int, double, String, bool |
| טיפוס דינמי | dynamic x = 5; |
| המרת טיפוסים | int.parse("42"), n.toString() |
| בדיקת טיפוס | x is String, x as String |
Null safety
טיפוסים אינם יכולים להיות null כברירת מחדל; הוסיפו ? כדי לאפשר null.
| פעולה | תחביר |
|---|---|
| לא יכול להיות null (ברירת מחדל) | int count = 0; |
| טיפוס שיכול להיות null | String? name; |
| גישה בטוחה ל-null | user?.name |
| Null-coalescing | name ?? "default" |
| השמת Null-coalescing | name ??= "default"; |
| הצהרה שהערך אינו null | name! |
| אתחול מאוחר | late String value; |
| Spread בטוח ל-null | [...?maybeList] |
מחרוזות
מחרוזות תומכות במירכאות בודדות, כפולות ומשולשות.
| פעולה | תחביר |
|---|---|
| אורך | s.length |
| אותיות גדולות / קטנות | s.toUpperCase(), s.toLowerCase() |
| שילוב משתנה במחרוזת | "Total: $price" |
| שרשור | "foo" + "bar" |
| מכיל | s.contains("ell") |
| מתחיל / מסתיים ב | s.startsWith("he") |
| פיצול | "a,b,c".split(",") |
| החלפה | s.replaceAll("a", "b") |
| תת-מחרוזת | s.substring(0, 3) |
| הסרת רווחים | s.trim() |
Collections (List, Map, Set)
שלושה סוגי collections מרכזיים עם תחביר ליטרלי.
| פעולה | תחביר |
|---|---|
| ליטרל של List | var nums = [1, 2, 3]; |
| הוספה לרשימה | nums.add(4); |
| גישה / אורך | nums[0], nums.length |
| Map / where | nums.map((n) => n * 2), nums.where((n) => n > 1) |
| ליטרל של Map | var ages = {"Ada": 30}; |
| גישה ל-Map | ages["Ada"] |
| ליטרל של Set | var ids = {1, 2, 3}; |
| אופרטור spread | var all = [...a, ...b]; |
| if / for בתוך collection | [if (show) 1, for (n in xs) n] |
בקרת זרימה
תנאים נכתבים בסוגריים; switch תומך ב-patterns.
| פעולה | תחביר |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| טרינרי | var r = x > 0 ? "pos" : "neg"; |
| Switch | switch (n) { case 1: ...; default: ... } |
| לולאת for | for (var i = 0; i < 10; i++) { ... } |
| לולאת for-in | for (var item in items) { ... } |
| forEach | items.forEach((x) => print(x)); |
| לולאת while | while (x < 100) { ... } |
| Do-while | do { ... } while (x < 100); |
| Break / continue | break;, continue; |
פונקציות
פונקציות הן אזרחיות מדרגה ראשונה; תחביר החץ מקצר ביטויים בודדים.
| פעולה | תחביר |
|---|---|
| הגדרת פונקציה | int add(int a, int b) { return a + b; } |
| פונקציית חץ | int square(int x) => x * x; |
| פרמטר מיקומי אופציונלי | void log(String m, [int? code]) { ... } |
| פרמטרים בשם | void box({int w = 0, int h = 0}) { ... } |
| פרמטר בשם חובה | void box({required int w}) { ... } |
| פונקציה אנונימית | var f = (x) => x * 2; |
| העברה כארגומנט | nums.map((n) => n * 2) |
| Typedef | typedef IntOp = int Function(int); |
מחלקות ובנאים
מחלקות מחזיקות מצב והתנהגות; לבנאים יש כמה צורות.
| פעולה | תחביר |
|---|---|
| הגדרת מחלקה | class Point { int x; int y; } |
| בנאי | Point(this.x, this.y); |
| בנאי בשם | Point.origin() : x = 0, y = 0; |
| יצירת מופע | var p = Point(1, 2); |
| מתודה | double dist() { ... } |
| Getter | int get area => w * h; |
| ירושה | class Circle extends Shape { ... } |
| קריאה ל-super | super(args) |
| מחלקה אבסטרקטית | abstract class Shape { ... } |
| מימוש ממשק | class Dog implements Animal { ... } |
Async (Future / async-await)
Futures מייצגים ערכים שיהיו זמינים בהמשך; await עוצר עד שהם מסתיימים.
| פעולה | תחביר |
|---|---|
| פונקציה אסינכרונית | Future<int> load() async { ... } |
| המתנה ל-future | var data = await load(); |
| החזרת ערך | return 42; בתוך פונקציה אסינכרונית |
| השהיה | await Future.delayed(Duration(seconds: 1)); |
| טיפול בשגיאות | try { await load(); } catch (e) { ... } |
| שרשור עם then | load().then((v) => print(v)); |
| הרצה במקביל | await Future.wait([a(), b()]); |
| Stream אסינכרוני | await for (var x in stream) { ... } |
התחביר של Dart שהכי שימושי, בעמוד אחד. ה-Dart cheat sheet הזה הוא דף עזר מהיר לליבת השפה: משתנים וטיפוסים, null safety, מחרוזות, collections, בקרת זרימה, פונקציות, מחלקות, וה-futures וה-async/await שבעזרתם כותבים את האפליקציות שמאחורי Flutter.
כל מה שכאן הוא Dart סטנדרטי ורץ על ה-SDK הרשמי. העתיקו את מה שצריך, או נסו כל קטע קוד בזמן אמת בעורך האונליין של Dart, בלי צורך בהתקנה.
שאלות נפוצות על ה-Dart cheat sheet
האם ה-Dart cheat sheet הזה בחינם?
איך null safety עובד ב-Dart?
int count לעולם לא יחזיק null. כדי לאפשר null מוסיפים ? (String? name), ואז הקומפיילר מחייב אתכם לטפל במקרה של null. כלי עזר הופכים את זה לתמציתי: ?. לגישה בטוחה ל-null, ?? לערך חלופי, ו-! כדי להצהיר שערך אינו null כשאתם בטוחים בכך. כך שגיאות null נתפסות בזמן קומפילציה ולא בזמן ריצה.מה זה Future ואיך async ו-await עובדים?
Future מייצג ערך שיהיה זמין בהמשך, למשל תוצאה של קריאת רשת. סימון פונקציה כ-async מאפשר להשתמש ב-await, שעוצר את הריצה עד שה-future מסתיים ואז מחזיר את הערך. כך כותבים קוד אסינכרוני שנקרא מלמעלה למטה כמו קוד סינכרוני. עטפו את ה-awaits ב-try/catch כדי לטפל בשגיאות.