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

Читать онлайн книгу Быстрый старт Flutter-разработчика - Андрей Алеев страница 6

СКАЧАТЬ параметры

      При объявлении функции мы можем в ее сигнатуре указать значения по умолчанию. Например, нам понадобится вызывать какую-то функцию много раз с одним и тем же параметром, но при этом необходимо сохранить гибкость. В таком случае, при вызове с функции с параметром по умолчанию, его (этот параметр) можно не указывать.

      В Dart существует два типа опциональных параметров: позиционные и именованные. Рассмотрим их подробнее.

      Примечание: Опциональный параметр не может быть одновременно и позиционным и именованным

      Именованные – такие параметры при вызове функции можно указывать опционально с именем и последующим двоеточием и оборачиванием в фигурные скобки. Пример:

      updateWidget (int position, {bool withTitle: true, int padding: 8})

      Аннотация @required делает этот параметр обязательным

      Позиционные – опциональные параметры, помещаемые при объявлении функции в квадратные скобки. Они будут читаться при вызове по их позиции среди аргументов.

      String something (String parametr1, [String parametr2]) {

      if (parametr2!= null) {

      return «$parametr1 and $parametr2»;

      } else {

      return «$parametr1»;

      }

      }

      Функции как объекты

      Функции можно передавать в качестве параметров другим функциям, а также назначать их переменным:

      void doubleIt (int it) {

      it = it * 2

      print (it);

      }

      var list = [1, 2, 3];

      // передаем на выполнение в foreach функцию

      list.forEach (doubleIt);

      // функция как переменная

      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 СКАЧАТЬ