Реализация функций DART

Реализация функций DART
Реализация функций DART

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

Содержание:

В этой статье мы выйдем за рамки основ Dart и представим функции. Как вы, возможно, заметили, мы уже использовали ряд функций (например, main и print). В этой главе мы рассмотрим основные варианты использования функций.

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

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

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

Объявление функций

Проблема

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

Решение

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

void main() { getCurrentDateTime(); } void getCurrentDateTime() { var timeLondon = DateTime.now(); print('London: $timeLondon'); }

Обсуждение

Dart использует функцию main() в качестве отправной точки для приложения. Стандартный код не принимает аргументов и не ожидает возвращаемого значения (т.е. void). С помощью этой функции мы можем как создавать, так и вызывать другие функции для обработки в нашем приложении.

В предыдущем примере мы создаем служебную функцию с именем getCurrentDateTime. Обратите внимание, что функция объявлена как не требующая параметров и возвращает значение void аналогично основной функции. Роль функции getCurrentDateTime заключается в получении текущей даты и времени. Для этого он вызывает библиотечную функцию с именем DateTime.now(), которая возвращает текущее время при запуске.

Хотя вы могли бы добавить код непосредственно в основную функцию, теперь у нас есть способ получить доступ к текущей дате, который можно легко добавить в другие программы. Поскольку мы сгруппировали функциональность в отдельную функцию, ее можно изолировать и использовать по мере необходимости в других программах. Установление функциональной изоляции внутри ваших программ - это хорошая привычка, которую нужно приобрести, и это означает, что со временем вы, вероятно, сможете повторно использовать больше своего кода.

Добавление параметров к функции

Проблема

Вы хотите передать информацию о переменной в функцию.

Решение

Используйте параметр для передачи информации функции. В следующем примере параметр предоставляется функции, используемой как часть потока управления.

void main() { getCurrentDateTime(-7); } void getCurrentDateTime(int hourDifference) { var timeNow = DateTime.now(); var timeDifference = timeNow.add(Duration(hours: hourDifference)); print('The time now is: $timeNow'); print('The time minus 7 hours is: $timeDifference'); }

Обсуждение

В предыдущем примере параметр, предоставленный функции, используется для определения действия. Функция используется для определения конкретной часовой разницы, используя текущее время, возвращаемое DateTime.now().

Учитывая, что мы добавили значение параметра в функцию, теперь мы можем указать требуемую разницу в количестве часов. Это сделало функцию более применимой к более широкому ряду вариантов использования. Однако, поскольку функция не возвращает значение, функция не такая гибкая, какой могла бы быть.

Использование параметров повышает гибкость функции за счет добавления переменной. Добавление переменных к сигнатуре функции делает функцию более общей по своей природе. Создание обобщенных функций таким образом - хороший подход к сокращению объема кода, который необходимо создать для задачи.

Использование не обязательных параметров

Проблема

Вы хотите изменить количество параметров для функции.

Решение

Укажите необязательный параметр. Dart поддерживает необязательные параметры, которые позволяют опускать значения. Доступны два различных типа необязательных параметров: именованные и позиционные.

// Вот пример использования именованных параметров: void main() { printGreetingNamed(); printGreetingNamed(personName: "Rich"); printGreetingNamed(personName: "Mary", clientId: 001); } void printGreetingNamed({String personName = 'Stranger', int clientId = 999}){ if (personName.contains('Stranger')) { print('Employee: $clientId Stranger danger '); } else { print('Employee: $clientId $personName '); } } // Вот пример использования позиционных параметров: void main() { printGreetingPositional("Rich"); printGreetingPositional("Rich", "Rose"); } void printGreetingPositional(String personName, [String? personSurname]){ print(personName); if (personSurname != null){ print(personSurname); } }

Обсуждение

Dart обеспечивает дополнительную гибкость при использовании параметров для функций. Там, где параметры могут быть опущены, может быть полезно рассмотреть возможность использования необязательных параметров.

Именованные параметры предоставляют возможность включать именованные переменные в объявление функции. Чтобы использовать параметр этого типа, включите фигурные скобки для определения необходимых значений, которые будут представлены. В первом примере необязательные параметры используются для передачи имени и идентификатора клиента. Если функция не снабжена информацией, она все равно будет работать ожидаемым образом, установив значение по умолчанию. Значения по умолчанию могут быть предоставлены, если необходимо указать значение и выполнить определенную логику, например, “int ClientID = 999”.

Позиционные параметры работают аналогично обычным параметрам, при необходимости их можно опустить. Во втором примере второй параметр определяется, как позиционный параметр с использованием квадратных скобок. Кроме того, Dart позволяет определить переменную как потенциальное значение путем включения ? символа.

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

Возврат значений из функции

Проблема

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

Решение

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

void main() { DateTime timeNow = getCurrentDateTime(0); DateTime timeDifference = getCurrentDateTime(-7); print('The time now is: $timeNow'); print('The time minus 7 hours is: $timeDifference'); } DateTime getCurrentDateTime(int hourDifference) { DateTime timeNow = DateTime.now(); DateTime timeDifference = timeNow.add(Duration(hours: hourDifference)); return timeDifference; }

Обсуждение

В предыдущем примере функция с именем getCurrentDateTime расширена для возврата значения. Функция объявлена для приема параметров и возврата значения. Теперь у нас есть более универсальная функция, которую можно использовать в более широком диапазоне настроек.

В данном случае функция, принимающая параметры, означает, что вы можете указывать разные значения часов. Функция знает только, что она должна принимать значение int, представляющее количество часов, которые будут использоваться. Из примера, который мы видим, мы выполняем два вызова функции, чтобы инициализировать текущее время с разницей в ноль часов, за которым следует разница во времени с отрицательными 7 часами.

Возвращаемое значение из функции getCurrentDateTime представляет объект DateTime. Захватив возвращаемое значение, вы можете вывести относительную комбинацию даты и времени.

Обратите внимание, как мы повторно использовали функцию, которая вызывается с целочисленным параметром, а затем возвращает объект DateTime. Dart предоставляет возможность создавать простые функциональные возможности, подобные этой, чтобы помочь вам в разработке. Наличие богатого набора методов, связанных с объектами класса, такими как DateTime, экономит огромное количество времени на разработку.

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