[[oktatas:web:dart|< Dart]] ====== Dart nyelv ====== * **Szerző:** Sallai András * Copyright (c) 2023, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * 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 ===== * https://dart.dev/language ===== Helló Világ ===== 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 ===== /* több soros megjegyzés */ void main() { //megjegyzés /* több soros megjegyzés */ } ===== Kiíratás ===== print(3*5); ===== Változók ===== var nev = 'Nagy János'; void main() { print(nev); } void main() { var nev = 'Nagy János'; print(nev); } void main() { var base = 30; var height = 35; var area = base * height / 2; print('Terület: $area'); } void main() { String name = "Feri"; print("Üdv ${name}"); print("Üdv $name"); } ===== Állandók ===== void main() { final max = 100; print(max); } void main() { const max = 100; print(max); } ===== Típusok ===== 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 ===== import "dart:math"; void main() { print(sqrt(9)); } Teszteljük 144-el is. ===== Bekérés ===== 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. 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ó ===== void main() { double ho = 3.5; if(ho <= 0) { print('fagy'); }else { print('nincs fagy'); } } 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 ==== 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ó ===== void main() { for(int i=0; i<5; i++) { print('egy'); } } void main() { int i=0; while(i<5) { print(i); i++; } } ===== Sztringek ===== void main() { String name = "Feri"; print(name.length); } void main() { //0123 String name = "Feri"; print(name.length); print(name[0]); } ===== Lista ===== void main() { List nums = [3, 5, 8, 4, 2]; print(nums); } void main() { List nums = [3, 5, 8, 4, 2]; // 0 1 2 3 4 nums[0] = 35; print(nums[0]); } void main() { List nums = [3, 5, 8, 4, 2]; // 0 1 2 3 4 nums.add(27); nums.add(53); print(nums.length); } void main() { List 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 ===== 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. void main() { say('Helló'); } void say(String msg) { print(msg); } 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: 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. A függvények tetszőleges számú pozícióparamétert tartalmazhatnak, amit tetszőleges számú nevesített paraméter követhet. ==== Opcionális paraméter ==== 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: 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. (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.