[[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.