Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Kotlin

Введение в Котлин

by
Read Time:10 minsLanguages:

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Введение

С тех пор, как Apple выпустила язык программирования Swift для iOS, многие разработчики Android хотели использовать аналогичный язык для разработки Android. Если вы один из тех разработчиков, вам понравится Kotlin, язык JVM, который очень похож на Swift.

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

Если вы являетесь компетентным программистом на Java, вы сможете научиться Kotlin за очень короткое время. В этом уроке я расскажу вам, как использовать наиболее часто используемые конструкции Kotlin.

Предпосылки

Чтобы следовать за мной, вам понадобятся:

1. Классы

Чтобы создать класс в Kotlin, вам нужно использовать ключевое слово class. Например, вот как вы создаете пустой класс Person:

Добавление свойств

Класс обычно имеет свойства и функции-члены (также называемые методами). Давайте добавим два свойства в классе Person, name типа String и age типа Int.

Как вы можете видеть, синтаксис для создания переменных несколько отличается от синтаксиса Java. Чтобы создать переменную в Kotlin, вы должны использовать ключевое слово var. Однако, если вы хотите, чтобы ваша переменная была переменной только для чтения/назначения-единожды, используйте вместо этого ключевое слово val.

Ради null безопасности Kotlin также проводит различие между переменными, которые могут быть null и переменными, которые никогда не могут быть null. В нашем предыдущем примере переменные name и age не могут быть null. Если они равны null, компилятор вызовет ошибку.

Чтобы создать переменную, которая может содержать null, вам нужно добавить? после типа переменной. Например:

Теперь, когда у нас есть класс, можно легко создать его экземпляр:

Нет, у Kotlin нет ключевого слова new. Когда экземпляр создан, вы можете получить доступ к его свойствам так же, как и в Java:

Использование конструкторов

Инициализация отдельных свойств нашего экземпляра, как мы только что сделали, не является хорошей практикой кодирования. Лучший способ сделать это - использовать конструктор. Синтаксис Kotlin’s для создания такого конструктора очень компактен:

Фактически, если вам нечего добавить в свой класс, вам не нужны фигурные скобки. Следующий код работает очень хорошо:

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

Чтобы добавить к вашему классу дополнительные конструкторы, известные как вторичные конструкторы, вы должны использовать ключевое слово constructor. Вторичные конструкторы должны делегировать основному конструктору, используя ключевое слово this. Давайте добавим вторичный конструктор в наш класс, который инициализирует значение свойства с именем email:

Чтобы создать экземпляр с использованием вторичного конструктора, вы пишете что-то вроде этого:

Добавление функций-членов

В Kotlin функции создаются с использованием ключевого слова fun. Давайте добавим простую функцию-член с именем isEligibleToVote, которая возвращает значение Boolean:

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

Создание расширений

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

Например, чтобы добавить расширение с именем isTeenager в класс Person, вы напишите следующий код вне класса:

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

Создание производных классов

При создании производного класса важно помнить следующее:

  • Вы должны использовать : вместо ключевого слова Java extends.
  • Заголовок базового класса должен иметь аннотацию open.
  • Если ваш базовый класс имеет конструктор, который принимает параметры, ваш производный класс должен инициализировать эти параметры в самом заголовке.

Давайте создадим класс с именем Employee, который происходит от Person:

Переопределение функций-членов

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

Например, чтобы переопределить метод isEligibleToVote, вы добавляете следующий фрагмент кода в класс Employee:

Создание статических методов

Kotlin не позволяет создавать статические методы. Тем не менее, это позволяет вам создавать функции уровня пакета, которые не принадлежат ни одному классу.

Метод main - это, пожалуй, самый известный статический метод. Если вы хотите добавить метод main в пакет с именем com.tutsplus.code.tutorial, тогда ваш код будет выглядеть так:

2. Функции

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

Создание функций единичного выражения

Если функция возвращает значение одного выражения, вы можете использовать оператор = после заголовка функции, за которым следует выражение для определения функции.

Например, чтобы добавить метод к классу Person, который возвращает true, если человек является восьмидесятилетним, вы должны написать:

Как вы можете видеть, этот сокращенный синтаксис более компактен и читабелен.

Функции более высокого порядка и лямбда-выражения

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

Рассмотрим следующий пример, демонстрирующий синтаксис лямбда-выражения:

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

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

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

Вы можете вызвать эту функцию следующим образом:

Кроме того, вы можете передать выражение лямбда прямо в функцию более высокого порядка:

Лямбда-выражения часто используются с массивами. Например, рассмотрим следующий массив значений Int:

Если вы хотите, получить квадрат для значения каждого элемента в массиве, вы можете использовать функцию map вместе с выражением лямбда следующим образом:

3. Диапазоны

Выражения диапазона очень часто используются в Kotlin. Вы уже использовали их при создании методов isTeenager и isOctogenarian.

To create a range, all you need is the .. operator.

Чтобы создать диапазон в порядке убывания, используйте функцию downTo.

Если вы не хотите, чтобы шаг был 1, вы можете указать пользовательское значение, используя функцию step.

В этом уроке вы увидите больше выражений диапазона.

4. Условные конструкции

if

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

when

when выражение эквивалентно Java switch. Тем не менее, оно намного более универсально. Например, рассмотрим следующий пример.

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

5. Конструкции циклов

for..in

В Kotlin вы можете использовать цикл for..in для циклического преобразования массивов, коллекций и всего остального, который предоставляет итератор. Его синтаксис почти идентичен синтаксису Java, за исключением использования оператора in вместо оператора Java :. В следующем примере показано, как выполнить цикл массива объектов String.

С помощью выражений диапазона вы можете заставить этот цикл вести себя как традиционный цикл for C-стиля.

while и do..while

Синтаксис while и do ... while циклов в Kotlin идентичен синтаксису, используемому в Java. Например, следующий код Kotlin перебирает массив объектов String с использованием цикла while:

6. Шаблоны строк

Kotlin позволяет вставлять переменные и выражения в строки, обертывая их парой фигурных скобок с префиксом символа $. Например:

Заключение

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

Если вы хотите узнать, как использовать Kotlin в Android Studio, взгляните на статью Как использовать Kotlin в своих проектах Android. Чтобы узнать больше о языке Котлин, я рекомендую посетить документацию Kotlin.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.