Dart לפיתוח אפליקציות Flutter - ממש על קצה המזלג

מחבר:
בתאריך:

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

ניתן להתאמן על שימוש בשפה בלי להתקין שום דבר על המחשב. כל מה שצריך הוא לגלוש לאתר: https://dartpad.dev, ולהקליד את הפקודות במדריך.

בשפת Dart הפונקציה main() מאתחלת את ביצוע הקוד. לדוגמה:

main () {
   print("Hello World!");
}
  • חשוב לסיים כל שורת קוד בנקודה פסיק ;

התוצאה:

DartPad in action

Hello World!

נתחיל שורה של הערה בשני קווים נטויים.

// main() is responsible for 
// executing all the code
main () {
   print("Hello World!");
}
  • ללא הפונקציה main() הקוד לא יצא אל הפועל. בהתאם, את כל הקוד במדריך צריך לבצע בתוכה אלא אם צויין אחרת.

אנחנו יכולים להגדיר משתנים באמצעות מילת המפתח var:

var greeting = "Hello";
  • כש-Dart יכול להסיק בעצמו את הסוג נעדיף להגדיר את המשתנה באמצעות var אבל לא תמיד זה המצב.

Dart היא שפה שאוהבת לעבוד עם סוגים types לכן אם Dart לא יכול להסיק בעצמו את סוג המשתנה כי הערך יוצב בהמשך נגדיר את סוג המשתנה כדי לעזור לקומפיילר לאתר שגיאות בקוד כמה שיותר מוקדם.

ישנם כמה סוגים בסיסיים של משתנים שחשוב להכיר ב-Dart:

מחרוזות מגדירים כ- String

String greeting;

בוליאנים הם bool:

bool isEarthPerson;

אחר כך אנחנו צריכים להציב משתנים בהתאם לסוג:

greeting = "Hello earth person";
isEarthPerson = true;

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

var greeting = "Hello earth person";
var isEarthPerson = true;

נשתמש בסוג משתנה int כדי לציין מספר שלם:

int n;
n = 3;

הסוג double מציין מספר עשרוני:

double d;
d = 3.14;

אם מתקיים תנאי אז בבקשה לבצע פקודה אחת ואם לא אז פקודה אחרת:

main () {
   var greeting = "Hello earth person";
   var isEarthPerson = true;
   
   if (isEarthPerson) {
     print (greeting);
   } else {
     print ("Not earth person");
   }
}

התוצאה:

Hello earth person

נשתמש בלולאת for:

main () {
   int start = 1; 
   int end = 5;
   
   for(int i = start ; i <= end; i++ ) { 
      print(i);
   } 
}

התוצאה:

1
2
3
4
5

רשימה יכולה להכיל אוסף של משתנים. לדוגמה, רשימה של מחרוזות ששמה cars:

List<String> cars = [];

נוסיף פריטים לרשימה באמצעות הפקודה add():

main () {
    List<String> cars = [];
  
    cars.add("Tesla");
    cars.add("Audi");
    cars.add("BMW");
   
    print(cars);
}

התוצאה:

[Tesla, Audi, BMW]

להסרת פריטים נשתמש בפקודה-remove():

main () {
    List<String> cars = [];
    
    cars.add("Tesla");
    cars.add("Audi");
    cars.add("BMW");
  
    cars.remove("Audi");
  
    print(cars);
}

התוצאה:

[Tesla, BMW]

נעבור בלולאה על כל אחד מהפריטים ברשימה:

main () {
   List cars = ["Tesla", "Audi", "BMW"];
  
   for(int i=0;i<cars.length;i++){
        print(cars[i]);
    }
}

התוצאה:

Tesla
Audi
BMW

כשאנחנו מגדירים פונקציה נגדיר את סוג המשתנים שהיא מחזירה. אם פונקציה לא מחזירה דבר היא תהיה void:

main () {
     void greet(){
       print("Hello world!");
     }
  
     greet();
}

התוצאה:

Hello world!

אם פונקציה מחזירה מחרוזת נגדיר כ-String:

main () {
   
   String greet(){
     return "Hello Mishu";
   }
  
   print(greet());
}

התוצאה:

Hello Mishu!

אם פונקציה מקבלת פרמטרים אז חשוב להגדיר את סוג המשתנים שהיא רשאית לקבל:

main () {
   
   String greet(String person){
     return "Hello $person";
   }
  
   print(greet("Mishu"));
}

התוצאה:

Hello Mishu!

מחלקות, קלאסים, הם כלי קיבול הכורך יחדיו קוד לטיפול בנושא מסוים. לדוגמה, למכונית יכול להיות שם דגם וגג שמש אז נגדיר מחלקה בשם Car שתכיל את המשתנים name ו-sunRoof:

class Car {
  String name;
  bool hasSunroof;
  
  Car(
    this.name,
    this.hasSunroof
  );
}
  • את ערכי המשתנים נעביר לקלאס בזמן שניצור ממנו אובייקט דרך הקונסטרקטור ששמו כשם הקלאס.

אנחנו יכולים לייצר קלאס שהקונסטרקטור שלו מקבל פרמטרים שיש להם שם:

class Car {
  String name;
  bool hasSunroof;
  
  // Named parameters in the constructor
  // The parameters have to be required or need to have a default value
  Car({required this.name, this.hasSunroof = false});
}

נקים מהקלאס אובייקטים באופן הבא:

final car1 = Car(name: 'Tesla');
final car2 = Car(name: 'BMW', hasSunroof: true);

כדי להפוך תכונה לפרטית נוסיף קו תחתון לפני שמה, לדוגמה: bool _hasSunroof;:

class Car {
  String name;
  bool _hasSunroof;
  
  // ...
}

כדי לקבל יותר אפשרויות בהגדרת ובשליפת הנתונים נשתמש בפונקציות setter ו-getter.

class Car {
  String name;
  bool _hasSunroof;
  
  Car(
    this.name,
    this._hasSunroof
  );

  bool get hasSunroof {
     return _hasSunroof;
  }

  set hasSunroof(bool val) {
     _hasSunroof = val;
  }
}

את הקלאס נקפיד להגדיר מחוץ לפונקציה main אבל ביצוע הקוד יהיה בתוך main:

main () {
   var myCar1 = Car("Tesla", false);
   
   // get the property
   print(myCar1.hasSunroof);
  
   // set the property
   myCar1.hasSunroof = true;

   print(myCar1.hasSunroof);
}
  • את המשתנה myCar1 הגדרתי var במקום Car מפני ש- Dart יכול להבחין בעצמו שהמשתנה ניזון מפונקציה שמחזירה אובייקט מסוג מסוים. יכולתי גם לציין את סוג המשתנה Car זו לא שגיאה אבל פחות נכון מבחינה תכנותית.

התוצאה:

false
true

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

הוסף תגובה חדשה

 

= 7 + 3