Найти в Дзене
KOTLIN_IT

Урок №60 по Котлин. Конструкторы

Для создания объекта необходимо вызвать конструктор класса. По умолчанию компилятор создает конструктор, который не принимает параметров и который мы можем использовать. Но также мы можем определять свои собственные конструкторы. Классы в Kotlin могут иметь один первичный конструктор (primary constructor) и один или несколько вторичных конструкторов (secondary constructor). Вторичные конструкторы Вторичные конструкторы определяются в теле класса с помощью ключевого слова constructor Рассмотрим пример: Конструкторы во многом похожи на функциии, как и обычные функции, могут иметь параметры. Здесь в классе People определен конструктор, принимает два параметра: _name и _age - условно говоря имя и возраст человека. Внутри конструктора эти значения передаются переменным name и : В функции main создаются два объекта People. Для их создания применяется вторичный конструктор, параметрам которого передаются некоторые значения: Выведем в консоль: Точно так же мы можем определять и большее

Для создания объекта необходимо вызвать конструктор класса.

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

Классы в Kotlin могут иметь один первичный конструктор (primary constructor) и один или несколько вторичных конструкторов (secondary constructor).

Вторичные конструкторы

Вторичные конструкторы определяются в теле класса с помощью ключевого слова constructor

Рассмотрим пример:

-2

Конструкторы во многом похожи на функциии, как и обычные функции, могут иметь параметры.

Здесь в классе People определен конструктор, принимает два параметра:

_name и _age - условно говоря имя и возраст человека.

Внутри конструктора эти значения передаются переменным name и :

-3

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

-4

Выведем в консоль:

-5

Точно так же мы можем определять и большее количество конструкторов:

-6

Теперь в классе People также определен еще один конструктор, который принимает только один параметр - имя человека и передает его значение переменной name.

Мы видим ошибку в объявлении переменной age, нужно её проинициализировать

Сделаем значение по умолчанию - число 0.

-7

В функции main вызываем оба конструктора:

-8

Для создания первого объекта вызывается первый конструктор, а для второго - второй конструктор.

Консольный вывод:

-9

Однако в данном случае мы сталкиваемся с дублированием кода - установкой переменной name.

В данном случае это может быть не актуально.

Но что, если мы захотим добавить какую-то более сложную логику установки имени, например, с проверкой на длину строки, какие-то другие маркеры?

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

Для этого применяется ключевое слово this:

-10

Здесь выражение this(_name) как раз и представляет вызов первого конструктора, где и устанавливается имя.

При этом можно удалить строчку: name = _name