pmu_flutter/lec2/bin/main.dart

415 lines
9.4 KiB
Dart
Raw Permalink Normal View History

2024-10-03 21:59:50 +04:00
// Импорт стороннего компонента
// Функция
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();
}