Tartalomjegyzék
Dart nyelv
- Szerző: Sallai András
- Copyright © 2023, Sallai András
- Web: https://szit.hu
A Dart
A Google 2011-ben mutatta be. A JavaScript leváltására lett kitalálva, oly módon, hogy a böngészők egy VM-t mellékelnek minden böngészőhöz. Ez nem történt meg a böngészőgyártóknál, így maradt a JavaScript-re fordítás. A dart fordító azonban képes az adott operációs rendszer bináris formátumára is fordítani, például Windows és Linuxos binárisok is létrehozhatók.
Webhely
Helló Világ
- main.dart
void main() { print('Helló Világ!'); }
Futtatás:
dart main.dart
Vagy VSCode-ban a szerkesztőben kattintunk a „Run”-ra.
Fordítás
A Dart nyelven írt program futtatható a dart utasítással, de le is fordítható például JavaScript nyelvre.
dart compile js main.dart
Elkészül egy out.js, out.js.deps, és egy aout.js.map állomány. Futtatás:
node out.js
A kód optimalizálható is:
dart compile js -O4 main.dart
Ha src és bin könyvtárat használunk:
app01/ |-bin/ `-src/ `-main.dart
A fordítás:
dart compile js src/main.dart -o bin/main.js
A bin könyvtár ha nem létezik, automatikusan létrejön.
Futtatás:
node bin/main.js
Bináris
Az adott operációs rendszernek megfelelő binárisra fordul.
- ELF
- EXE
Az ELF bináris (Linuxos, BSD) is .exe kiterjesztést kap. Ehhez a js helyett exe kapcsolót kell használni. Az exe alparancs nem hozza létre automatikusan a bin könyvtárat.
Megjegyzés
- main.dart
/* több soros megjegyzés */ void main() { //megjegyzés /* több soros megjegyzés */ }
Kiíratás
print(3*5);
Változók
- main.dart
var nev = 'Nagy János'; void main() { print(nev); }
- main.dart
void main() { var nev = 'Nagy János'; print(nev); }
- main.dart
void main() { var base = 30; var height = 35; var area = base * height / 2; print('Terület: $area'); }
- main.dart
void main() { String name = "Feri"; print("Üdv ${name}"); print("Üdv $name"); }
Állandók
- main.dart
void main() { final max = 100; print(max); }
- main.dart
void main() { const max = 100; print(max); }
Típusok
- main.dart
void main() { String name = "Feri"; int age = 35; double gpa = 2.5; //Osztályzat átlaga; Grade Point Average bool hasCar = true; print("$name $age $gpa $hasCar"); }
Matematikai függvények
- main.dart
import "dart:math"; void main() { print(sqrt(9)); }
Teszteljük 144-el is.
Bekérés
- main.dart
import "dart:io"; void main() { print("Mi a neved?: "); String? fullname = stdin.readLineSync(); print('Üdv: $fullname'); }
A stdin.readLineSync() olyan stringet ad vissza ami lehet null is. Ezt így jelöljük:
String?
Ez nem egyenlő a szimpla String jelöléssel.
- main.dart
import "dart:io"; void main() { stdout.write("Alap: "); String baseStr = stdin.readLineSync() ?? ''; double base = double.parse(baseStr); stdout.write("Magasság: "); String heightStr = stdin.readLineSync() ?? ''; double height = double.parse(heightStr); double area = base * height / 2; print('Terület: $area'); }
Szelekció
- main.dart
void main() { double ho = 3.5; if(ho <= 0) { print('fagy'); }else { print('nincs fagy'); } }
- main.dart
void main() { double num = 3; if(num == 1) { print('egy'); }else if(num == 2) { print('kettő'); }else if(num == 3) { print('három'); }else { print('nem 1, 2 vagy 3'); } }
Switch
- main.dart
void main() { int num = 3; switch(num) { case 1: print('egy'); break; case 2: print('kettő'); break; case 3: print('három'); break; default: print('más'); } }
Iteráció
- main.dart
void main() { for(int i=0; i<5; i++) { print('egy'); } }
- main.dart
void main() { int i=0; while(i<5) { print(i); i++; } }
Sztringek
- main.dart
void main() { String name = "Feri"; print(name.length); }
- main.dart
void main() { //0123 String name = "Feri"; print(name.length); print(name[0]); }
Lista
- main.dart
void main() { List<int> nums = [3, 5, 8, 4, 2]; print(nums); }
- main.dart
void main() { List<int> nums = [3, 5, 8, 4, 2]; // 0 1 2 3 4 nums[0] = 35; print(nums[0]); }
- main.dart
void main() { List<int> nums = [3, 5, 8, 4, 2]; // 0 1 2 3 4 nums.add(27); nums.add(53); print(nums.length); }
- main.dart
void main() { List<int> nums = [3, 5, 8, 4, 2]; // 0 1 2 3 4 print(nums.length); nums.remove(8); print(nums.length); }
Keresés
print(nums.indexOf(20));
Az eredmény -1 ha a 20 nem található.
print(nums.contains(20));
Az eredmény false ha 20 nem található.
Függvények
- main.dart
void printAbout() { print('Nagy János'); } void main() { printAbout(); }
A függvények a forráskódban definiálhatók a hívás helyétől lentebb is.
- main.dart
void main() { say('Helló'); } void say(String msg) { print(msg); }
- main.dart
void main() { print(add(30, 35)); } double add(double num1, double num2) { return num1 + num2; }
A Dartban ajánlott a típusok meg adása, de nem kötelező. Ez is működik:
- main.dart
void main() { print(calcArea(30, 35)); } calcArea(base, height) { return base * height / 2; }
Ha a függvény csak egy kifejezést tartalmaz, használhatunk rövidítést:
double calcArea(double base, double height) => base * height / 2;
A nyíloperátor után nem állhat utasítás, például if, csak kifezés.
Opcionális paraméter
- main.dart
void main() { kiir('első'); kiir('első', 'második'); } void kiir(String egy, [String? ketto]) { String szoveg = egy; if(ketto != null) { szoveg += ketto; } print(szoveg); }
Assert
Az asseret() függvény a product fejlesztésben nem ír ki semmit.
Futtatáskor használhatjuk a --enable-asserts kapcsolót az aktiváláshoz:
dart --enable-assert src/main.dart
Az assert() függvény egy bool típusú értéket vár, de második paraméterként megadhat egy szöveget is.
Példa:
- src/main.dart
void main() { var osztalyzat = 0; assert(!(osztalyzat < 1), 'Nem lehet az osztályzat 1-nél kisebb'); }
A futtatás lehetséges kimenete:
dart --enable-asserts src/main.dart Unhandled exception: 'file:///home/andras/dev/gyak/dart/app01/src/main.dart': Failed assertion: line 6 pos 10: '!(osztalyzat < 1)': Nem lehet az osztályzat 1-nél kisebb #0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61) #1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5) #2 main (file:///home/andras/dev/gyak/dart/app01/src/main.dart:6:10) #3 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:296:19) #4 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:189:12)
Ha az osztályzatot 1-re állítjuk nem kapunk semmit.