// Импорт стороннего компонента // Функция void variablesAndDatatypes() { // Переменные и типы данных // Логическая переменная: истина (true) или ложь (false) bool b = true; // Целочисленная переменная int i = 10; // Вещественная переменная double d = 10.001; // Текстовая переменная String s = 'Hello!'; // Коллекции // Список (динамический) List numbers = [1, 1, 2, 2, 3, 3]; numbers.add(4); print(numbers); Set names = {'Ivan', 'Ivan', 'John', 'John', 'Nick', 'Nick'}; names.add('Helen'); print(names); Map dict = {1: 'one', 2: 'two'}; print(dict); dict[0] = 'zero'; dict[1] = 'one!'; print(dict); } void record() { const myRecord = ('text', a: 'one', b: true, c: 3); print(myRecord); } void variables() { // Определение типа переменной при объявлении int i = 1; // Автоматическое определение типа переменной при объявлении var v = 1; // Автоматическое определение типа переменной при объявлении // с возможностью изменить тип переменной dynamic d = 1; print(d); d = 'test'; print(d); // Все типы данных в Dart являются наследниками класса Object Object o = 1; } // Функция, которая возвращает значение int getValue() { return 10; } void constants() { const int i = 10; const j = 10; final int k = getValue(); final l = getValue(); final int m = 10; } void printSmthN(String s) { print(s); } void printSmth(String? s) { // Если s == null, то выводится правая часть выражения // иначе будет выводится левая часть выражения print(s ?? 'smth'); } void printSmthUpper(String? s) { // Если s == null, то выводится правая часть выражения // иначе будет вызвана функция объекта s, // а затем будет выводится левая часть выражения print(s?.toUpperCase() ?? "SMTH"); } void printWithError(String? s) { print(s!.toUpperCase()); } void nullables() { int a = 10; print(a); int? b; print(b); //int c; //print(c); String hello = 'Hello!'; String? nullStr; printSmthN(hello); // printSmthN(nullStr); printSmth(hello); printSmth(nullStr); printSmthUpper(hello); printSmthUpper(nullStr); printWithError(hello); //printWithError(nullStr); } void formattedStrings() { const a = 1; const b = 2; print('a + b'); // Пример интерполяции print('$a + $b'); // Пример интерполяции print('${a + b}'); // Пример интерполяции const sum = '${a + b}'; // Пример соединения строк (конкатенация) print('sum is ' + sum); // Пример интерполяции print('sum is $sum'); } enum GenderType { man, woman, unknown } extension GenderTypeExt on GenderType { void printGender() { switch (this) { case GenderType.man: print('This is a man'); case GenderType.woman: print('This is a woman'); default: print('Unknown gender'); } } } void enums() { const gender = GenderType.man; print(''' - This is a woman? - ${gender == GenderType.woman} '''); } void conditions() { const value = 10; if (value > 100) { print('big value'); } else if (value > 50) { print('middle value'); } else { print('small value'); } // Тернарный оператор print(value > 100 ? 'big value' : value > 50 ? 'middle value' : 'small value'); switch (value) { case > 100: print('big value'); case > 50: print('middle value'); default: print('small value'); } final valueType = switch (value) { > 100 => 'big value', > 50 => 'middle value', _ => 'small value', }; print(valueType); const gender = GenderType.man; switch (gender) { case GenderType.man: print('This is a man'); case GenderType.woman: print('This is a woman'); default: print('Unknown gender'); } gender.printGender(); } // Пример функции bool isAMan(GenderType gender) { return GenderType.man == gender; } // Пример функции в функциональном стиле bool isAWoman(GenderType gender) => GenderType.woman == gender; // Пример функции с именованными и неименованными параметрами void myPrint( String s, { bool capitalize = false, String? suffix, }) { print('${capitalize ? s.toUpperCase() : s}${suffix ?? ''}'); } // Данная функция будет работать с любым списком void printList(List list) { if (list is List || list is List) { print(list); } else { print('Unknown type ${list.runtimeType}'); } } // Примеры работы с циклами void loops() { final list = [1, 2, 3, 4]; for (int i = 0; i < list.length; i++) { print(list[i]); } for (final element in list) { print(element); } int i = 0; while (i < list.length) { print(list[i]); i++; } for (final element in list) { if (element % 2 == 0) { continue; } print(element); } for (final element in list) { if (element % 2 != 0) { continue; } print(element); } for (final element in list) { if (element == 3) { break; } print(element); } } // Объявление класса class Car { // Поля final int maxSpeed; final String? manufacturer; double priceInDollars = 0; // Конструктор Car(this.maxSpeed, {this.manufacturer}); // Методы bool canReachSpeed(int speed) => speed <= maxSpeed; String getInfo() => 'car: ${manufacturer ?? 'unknown'}; max speed: $maxSpeed, price \$: ${priceInDollars.toStringAsFixed(2)}'; String get info => 'car: ${manufacturer ?? 'unknown'}; max speed: $maxSpeed, price \$: ${priceInDollars.toStringAsFixed(2)}'; set price(double priceInRubles) => priceInDollars = priceInRubles / 100; } // Пример работы с объектами класса Car void cars() { final unknown = Car(100); final lada = Car(110, manufacturer: 'VAZ'); lada.price = 26000.00; final bmw = Car(120, manufacturer: 'BMW'); bmw.price = 104000.23; print(unknown.getInfo()); print(unknown.info); print(lada.getInfo()); print(lada.info); print(bmw.getInfo()); print(bmw.info); print(lada.canReachSpeed(120)); print(bmw.canReachSpeed(120)); } class MyTest { final int publicField; final int _privateField = 10; MyTest(this.publicField); } abstract class Vehicle { final int maxSpeed; Vehicle(this.maxSpeed); bool canReachSpeed(int speed) => speed <= maxSpeed; } class Car2 extends Vehicle { final String? manufacturer; double priceInDollars = 0; Car2(super.maxSpeed, {this.manufacturer}); // Именованный конструктор Car2.lada(super.maxSpeed) : manufacturer = 'VAZ'; String get info => 'car2: ${manufacturer ?? 'unknown'}; max speed: $maxSpeed'; } void cars2() { final unknown = Car2(100); final lada = Car2.lada(110); final bmw = Car2(120, manufacturer: 'BMW'); print(unknown.info); print(lada.info); print(bmw.info); print(lada.canReachSpeed(120)); print(bmw.canReachSpeed(120)); } void main(List arguments) { // Вывод данных в консоль print('Hello!'); // Вызов функции //variablesAndDatatypes(); //record(); //constants(); //variables(); //nullables(); // Использование Random из стороннего компонента dart:math //print(Random().nextDouble()); // formattedStrings(); // enums(); // conditions(); // Пример работы с функциями /*const gender = GenderType.man; print(isAMan(gender)); print(isAWoman(gender)); const s = 'Hello'; myPrint(s); myPrint(s, capitalize: true); myPrint(s, suffix: '?'); myPrint(s, capitalize: true, suffix: '!'); myPrint(s, suffix: '!', capitalize: true);*/ // Пример работы с обобщениями (щаблонными типами) /*printList([1, 2, 3, 4]); printList([1.0, 2, 3, 4]); printList(['1', '2', '3', '4']); printList([1, '2', '3', '4']);*/ // Пример анонимных функций /*[1, 2, 3, 4].forEach((int val) => print(val)); [1, 2, 3, 4].forEach(print); print([1, 2, 3, 4].reduce((int a, int b) { return a + b; }));*/ // Примеры работы с циклами // loops(); // cars(); /*final myTest = MyTest(2); print(myTest.publicField); print(myTest._privateField); final myTest2 = MyTest2(2); print(myTest2.publicField); // print(myTest2._privateField);*/ // Пример работы со статическими полями класса /*final st1 = MyStatic(); final st2 = MyStatic(); print(st1.static); print(st2.static); MyStatic.staticField++; print(st1.static); print(st2.static); print(MyStatic.staticField);*/ // final v = Vehicle(10); // cars2(); }