Быстрый старт Flutter-разработчика. Андрей Алеев
Читать онлайн книгу.переменная
var doubleIt = (par1) => «$ {par1 * 2}»;
// функция как переменная с указанием типа
Function tripleIt = (par1) => «$ {par1 * 3}»;
Анонимные функции (лямбды)
Выше мы уже увидели пример анонимной функции – это функция не имеющая имени.
var list = [’a’, ’b’, ’c’];
list.forEach ((it) {
print («$it is ${list.indexOf (it) +1} letter of alphabet);
});
В этом примере у нас всего одно выражение в фигурных скобках, поэтому такую запись можно сократить до
list.forEach ((it) => print («$it is ${list.indexOf (it) +1} letter of alphabet));
Примечание: Переопределение методов (функций) родительского класса выполняется с помощью аннотации @override
Конструкторы
Конструкторы позволяют создать объект такого же типа, как и класс, в котором они объявлены. Выглядят они как и функции:
class Rectangle {
num width, height;
Rectangle (num width, num height) {
this. width = width;
this. height = height;
}}
Аналогично Java, если не объявлять конструктор, то будет использоваться конструктор по умолчанию – без параметров. Однако, в отличие от Java, конструкторы не наследуются.
Конструкторы могут быть именованными:
class Rectangle {
num width, height;
Rectangle (this. x, this. y)
Rectangle. square () {
this. width = 10;
this. height = 10;
}}
При наследовании классов конструкторы родительские конструкторы можно вызывать с помощью конструкции: super
class Rectangle {
num width, height;
Rectangle.fromParams (Map params) {
…
}
}
class Square extends Rectangle {
Square.fromParams (Map params): super.fromParams () {…}}
Наследование
Наследование выполняется с помощью ключевого слова extends
В Dart отсуствует ключевое слово interface. Вместо этого всякий класс неявно представляет собой интерфейс (абстрактное поведение или набор характеристик), который затем можно имплиментировать в других классах.
// Музыкант. Скрытый интерфейс содержит метод play ()
class Musician {
// В интерфейсе
final instrument;
// Не в интерфейсе – это конструктор
Musician(this.name);
// В интерфейсе
void play () => «Hi, I can play $instrument’;
}
// Гитарист имплиментирует Музыканта
class Guitarist implements Musician {
get name => «Guitar’;
void play () => «Hi, I can play $instrument’;
}
Примеси (mixins)
Примесь, или Mixin в языке Dart – это класс, описывающий некоторое поведение. Он чем-то напоминает интерфейс, однако правила его использования несколько отличаются. Примеси не наследуются, а как бы подключаются, «примешиваются» к коду класса, поэтому и называются примесями. Отличие от интерфейса в Java заключается в том, что методы примеси уже не надо переопределять.
Посмотрим на примере. Предположим, нам нужно описать музыканта, который умеет играть разные стили музыки.
// Гитарист имплиментирует Музыканта и умеет играть разные стили
class Guitarist implements Musician with Jazz, Rock, Funk {
get name => «Guitar’;
void play (String arg) => «Hi, I can play $arg by $instrument’;
}
// примесь Rock
mixin Rock {
bool knowsHowToPlayACDC = true;
void playPopMusic () {
if (knowsHowToPlayACDC) {
play («TNT»)
}}}
mixin Jazz {