Быстрый старт Flutter-разработчика. Андрей Алеев

Читать онлайн книгу.

Быстрый старт 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 {

       


Скачать книгу