Felhasználói eszközök

Eszközök a webhelyen


oktatas:web:dart:nyelv

< Dart

Dart nyelv

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.

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

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.

oktatas/web/dart/nyelv.txt · Utolsó módosítás: 2023/06/24 13:43 szerkesztette: admin