Анонимные функции и Задержка с Future | DART

Анонимные функции и Задержка с Future | DART
Анонимные функции и Задержка с Future | DART

Привет, если вы на пути изучения Flutter/Dart или вам просто интересно почитать про разработку подписывайтесь на мой канал в telegram, буду рад вас видеть! А я сегодня поговорим про функции в DART-е!

Предыдущая статья: Реализация функций DART

Объявление анонимных функций

Проблема

Вы хотите заключить выражение в функцию.

Решение

Объявите анонимную функцию для выполнения простого выражения. Часто для функции требуется только одно выражение, и в этом случае анонимная функция может предоставить элегантное решение. Вот пример того, как использовать анонимную функцию:

void main() { int value = 5; // Anonymous Function - Style 1 int ex1Squared(num1) => num1 * num1; int ex1Cubed(num1) => num1 * num1 * num1; // Anonymous Function - Style 2 int ex2Squared(num1){ return num1 * num1; } int ex2Cubed(num1){ return num1 * num1 * num1; } print('EX1: $value squared is ${ex1Squared(value)}'); print('EX1: $value cubed is ${ex1Cubed(value)}'); print('EX2: $value squared is ${ex2Squared(value)}'); print('EX2: $value cubed is ${ex2Cubed(value)}'); }

Обсуждение

В примере была создана функция для возведения числа в квадрат / куб в соответствии с требованиями. Алгоритм принимает входные данные и умножает их, возвращая результат вызывающей стороне. Вы заметите, что функции не содержат имени и являются анонимными. Обычно вы увидите анонимные функции, используемые для коротких фрагментов кода, которые используются для возврата значения. Перед функцией объявляется переменная для хранения результата функции. Примечание: переменная может включать параметры, добавляя их в объявлении в квадратных скобках.

Анонимные функции обычно используют => для указания функции. В примере первые объявленные функции используют этот стиль. Возвращаемое значение функции неявно в объявлении этого типа, что означает, что у вас будет доступ к результату выполненного выражения.

Вторая схема стиля выполняет ту же задачу; однако обратите внимание, что для предоставления доступа к результату используется явный return. Стилистически выбор за вами, как разработчиком, какой из них предпочтительнее.

Dart поддерживает функции первого класса, что, по сути, означает, что их можно использовать в сочетании с функцией (передаваемой в качестве аргументов) и структурами данных. В примере обратите внимание, как оператор print способен обрабатывать встроенные функции для получения результата. Другим вариантом использования было бы, как часть цикла forEach, который выполняет вызов функции за итерацию.

Добавление функциональной задержки с использованием Future

Проблема

Вы хотите ввести пользовательскую задержку, которая будет ожидать состояния завершения.

Решение

Используйте Future для выполнения указанной программной задержки в вашем коде. Вот пример того, как использовать Future для достижения программной задержки:

void main() async { int myDelay = 5; print ('Hello'); var value = await _customDelay(myDelay); var customText = myDelay == 1 ? "second later": "seconds later"; print ('Its $value $customText'); } Future <int> _customDelay(int delay) async { try { await Future.delayed(Duration(seconds: delay)); return delay; } catch (e) { print(e); return delay; } }

Обсуждение

В примере код реализует пользовательскую задержку на основе конкретного поля number в функции main. Вызов _customDelay использует Future, который представляет собой асинхронную операцию с двумя состояниями (например, завершено и не завершено). Асинхронные операции обычно используются для ожидания завершения другой операции. В этом примере мы хотим задержать выполнение программы перед выводом окончательного сообщения, указывающего, как долго была использована задержка.

Класс Future используется в ряде ситуаций, как правило, для загрузки длительно выполняющихся процессов, для завершения которых может потребоваться некоторое время. В главе 13 класс Future будет использоваться специально для удаленного доступа к данным.

При использовании Future вы увидите две конкретные вещи, которые обозначают его внутреннюю работу. Первая - это ссылка на async, которая указывает на использование асинхронной функции. Кроме того, вы можете увидеть ссылку на ключевое слово await, означающее “на данном этапе, пожалуйста, дождитесь ответа, прежде чем продолжить”. Затем код будет ожидать завершения состояния для асинхронного выражения.

11
Начать дискуссию