Путешествие от Kotlin Basics до продвинутого уровня

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

Как писать функции или методы в Котлине?

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

Функция должна быть объявлена ​​внутри класса. Чтобы объявить метод в Kotlin, нам в основном нужны три разных параметра

  • fun - в Kotlin функции объявляются с помощью ключевого слова fun.
  • имя - нам нужно иметь уникальное имя для каждого метода.
  • () - круглые скобки, которые являются общими для объявлений методов в большинстве языков программирования.

Вышеупомянутая простая функция при выполнении выводит «Добро пожаловать в Котлин».

Объяснение примера

  • doSomeThing() - название метода
  • {} - блок метода, определяющий начало и конец метода

Помимо этого, нам нужно знать еще кое-что, связанное с методами.

Параметры или аргументы

Если мы хотим передать некоторую информацию методам, мы можем отправить ее как параметр. Они действуют как локальные переменные внутри блока метода. Параметры указываются в круглых скобках () метода. Мы можем добавить столько параметров, сколько захотим, просто разделив их запятыми.

Пример параметризованной функции следующий

Тип возврата

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

Вот простой пример сложения двух чисел и возврата результата. Но в реальном сценарии представьте, где у нас есть URL-адрес и мы хотим загрузить файл изображения, поэтому здесь мы пишем метод, передающий URL-адрес в качестве аргумента этого метода, например, dowloadImage (url: String) и внутри Метод, мы пишем все, что нужно для загрузки изображения, и, наконец, возвращаем файл изображения.

Поскольку Kotlin - удобный язык, мы можем написать один и тот же метод добавления по-разному, но результат будет тем же.

Это все об основах функции письма в Котлине. Теперь давайте изучим некоторые продвинутые концепции, поддерживаемые в Kotlin.

Расширенные концепции, связанные с функциями в Kotlin

Аргументы по умолчанию

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

fun foo(i: Int = 10){
    print(i)
}

поэтому, если мы вызываем foo () в любом месте, где он запускается, и выводим значение по умолчанию, и если мы предоставляем какие-либо значения, тогда значение по умолчанию будет заменено значением, указанным во время вызова метода.

Именованные аргументы

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

Мы можем вызвать это, используя аргумент по умолчанию:

printMyDetails(str)

иначе мы можем передать все аргументы, чтобы переопределить значения по умолчанию

printMyDetails(str, true, true, false, 's')

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

Вот как бы это было предельно ясно и понятно.

Расширения Kotlin

Расширения - одна из широко используемых концепций из коллекции Kotlin.

Согласно документации Котлина:

«Kotlin предоставляет возможность расширять класс с помощью новых функций без необходимости наследовать от класса или использовать шаблоны проектирования, такие как Decorator. Это делается с помощью специальных объявлений, называемых extension ».

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

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

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

Чтобы показать тост, мы обычно пишем одно общее предложение, например

Toast.makeText(this, "message", Toast.LENGTH_SHORT).show()

И, как правило, это обычная практика: показывать тост-сообщения в нескольких действиях и повторять одну и ту же строку в нескольких точках, а также повсюду ненужный импорт класса Toast.

Чтобы уменьшить это, мы можем создать функцию расширения тоста и вызывать ее везде. Мы можем создать функцию расширения для Activity, Fragment или просто для Context. Давайте проверим с помощью Context

И мы можем вызвать это из любого действия, передав сообщение типа

toast(getString(R.string.something_wentwrong))

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

Расширения разрешаются статически, что означает, что вызываемая функция расширения определяется типом выражения, для которого функция вызывается, а не типом результата вычисления этого выражения во время выполнения - из Kotlin docs

Расширение по умолчанию, предоставленное Kotlin

Есть также некоторые предопределенные или стандартные расширения Kotlin, которые мы можем использовать. Давайте проверим несколько расширений по умолчанию в коллекциях, таких как filter, firstOrNull.

фильтр - возвращает список, содержащий только элементы, соответствующие заданному условию или предикату.

Разве это не хорошо? В Java мы пишем все циклы, выполняем итерацию и выполняем задачи.

FirstOrNull - возвращает первый элемент или значение null, если коллекция пуста.

Вы узнаете больше об этом и о том, насколько они полезны при их использовании. Так что попробуйте их.

Функции высокого порядка

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

  • он принимает функцию как параметр
  • он возвращает функцию

Взгляните на простой фрагмент

Чаще всего используется обработка щелчка адаптера Recyclerview. При щелчке по элементу в адаптере нам нужно передать некоторые данные обратно, чтобы мы могли справиться с этим эффективно.

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

Ниже приведен фрагмент кода для передачи функции от активности адаптеру.

Ниже приведен фрагмент вызова переданной функции с необходимыми аргументами внутри адаптера.

Резюме

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

Читать дальше на Котлине:

Пожалуйста, дайте мне знать ваши предложения и комментарии.

Вы можете найти меня в Medium и LinkedIn

Спасибо за прочтение…