pmu_flutter/lec2/bin/main.dart

415 lines
9.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Импорт стороннего компонента
// Функция
void variablesAndDatatypes() {
// Переменные и типы данных
// Логическая переменная: истина (true) или ложь (false)
bool b = true;
// Целочисленная переменная
int i = 10;
// Вещественная переменная
double d = 10.001;
// Текстовая переменная
String s = 'Hello!';
// Коллекции
// Список (динамический)
List<int> numbers = [1, 1, 2, 2, 3, 3];
numbers.add(4);
print(numbers);
Set<String> names = {'Ivan', 'Ivan', 'John', 'John', 'Nick', 'Nick'};
names.add('Helen');
print(names);
Map<int, String> 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<T>(List<T> list) {
if (list is List<int> || list is List<String>) {
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<String> 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();
}