#1 Уроки Kotlin. Введение: классы, конструкторы, наследование

Уроки Kotlin 1

Введение

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

Kotlin статически типизированный язык программирования, разработанный компанией JetBrains. Kotlin Может предложить намного больше возможностей по сравнению с Java. Эти два языка совместимы между собой и могут быть использованы в одном проекте.

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

Предварительные условия

Чтобы следовать вместе со мной, вы должны иметь:

— хорошее знание Java
— последняя версия Android Studio

1. Классы

Для создания класса в Kotlin используется ключевое слово класс. Например, вот пустой класс Person:

class Person {
 
}

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

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

var name: String = ""
var age: Int = 0

Как вы можете наблюдать синтаксис создания переменных немного отличается от Java. Для создания переменных мы должны использовать ключевое слово var. Однако если вы хотите использовать неизменяемую (final) переменную, используется ключевое слово val.

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

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

var college: String? = null

Сейчас мы создадим объект класса Person:

var jake = Person()

Для создания объекта не нужно ключевое слово new. Доступ к переменным осуществляется также как и в Java:

jake.name = "Jake Hill"
jake.age = 24
jake.college = "Stephen's College"

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

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

class Person(var name: String, var age: Int, var college: String?) {
 
}

Класс с конструктором можно создать даже без фигурных скобок.

class Person(var name: String, var age: Int, var college: String?)
 
var jake = Person("Jake Hill", 24, "Stephen's College")

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

class Person(var name: String, var age: Int, var college: String?) {
     
    var email: String = ""
 
    constructor(name:String, age:Int, college: String?, email: String) : this(name, age, college) {
        this.email = email
    }
}

Создание объекта через вторичны конструктор выглядит также как и с первичным конструктором:

var jake = Person("Jake Hill", 24, "Stephen's College", "jake.hill@example.com")

1.3 Наследование классов

Нужно знать несколько очень важных моментов о наследовании в Kotlin:

— вместо ключевого слова extends в используется : (двоеточие).
— заголовок базового класса должен иметь аннотацию open в заголовке.
—  если ваш базовый класс имеет конструкторы, то вы должны инициализировать эти конструкторы в заголовке.

Давайте создадим класс Employee наследника класса Person:

open class Person(var name: String, var age: Int, var college: String?) {
    ...
}

class Employee(name: String, age: Int, college: String?, var company: String) : Person(name, age, college) {

}

2.3 Расширение классов

В Kotlin можно расширять классы в определенном месте не изменяя код самого класса:

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

fun Person.isTeenager(): Boolean {

    //если возраст в пределах от 13 до 19
    //вернет true

    return age in 13..19
}

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

fun String.containsSpaces(): Boolean {
    return this.indexOf(" ")!=-1
}

2. Добавление функций

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

fun isEligibleToVote(): Boolean {
    // If age is greater or equal to 18
    // return true
 
    return age >= 18
}

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

jake.isEligibleToVote()

Также функцию isEligibleToVote() можно написать одной строчкой:

fun isEligibleToVote(): Boolean = (age >= 18);

2.1 Переопределение функций

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

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

override fun isEligibleToVote(): Boolean {
    // Always return true
    return true
}

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

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

Давайте добавим функцию main, доступную в пакете ru.javahelp.kotlin:

package ru.javahelp.kotlin
 
fun main(args:Array<String>) {
 
}

Источник: Classes and Inheritance

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

9 Комментарии “#1 Уроки Kotlin. Введение: классы, конструкторы, наследование

  1. Почему здесь не показан хороший код на Kotlin?
    Ведь идеология языка подталкивает(заставляет, если точнее) нас писать меньше кода.
    Так вот эту функцию:
    override fun isEligibleToVote(): Boolean {
    // Always return true
    return true
    }
    Определяют так:
    override fun isEligibleToVote(): Boolean = true

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

      1. > Почему здесь не показан хороший код на Kotlin?
        тогда «не» и «хороший» следует поменять местами.
        Странно как-то упрекать читателя в том, что автор статьи не удосужился подобрать действительно качественные иллюстрации, а сделал их на «отвали». А потом всё сваливать на «цели».

  2. Опечатка в примере с вторичным конструктором (пункт 1.2 — кстати, в статье два пункта 1.2).

    Вторичный конструктор вызывает super вместо this

      1. «Вторичный конструктор делегирует первичный конструктор с помощью ключевого слова super. «, все таки this)

          1. Вам спасибо, на русском всяко лучше запоминается)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

3 + 3 =