Урок 12: Конструкторы (primary, secondary). Блоки инициализации init. // Котлин курс с нуля

Поділитися
Вставка
  • Опубліковано 2 жов 2024

КОМЕНТАРІ • 34

  • @ievetrov
    @ievetrov  2 роки тому +4

    Ссылки и содержание:
    🔹 Тесты и практика по этому уроку: t.me/KotlinBasicsBot?start=youtube
    🔹 Текстовая версия урока: clck.ru/39VGHt
    🛠 Код из всех уроков: t.me/ievetrov_dev
    🛠 Личный телеграм канал про путь разработчика: t.me/ievetrov_dev
    ✅ Вопросы и ответы для Android собеседований: t.me/AndroidSprint_Interview
    🔹 Бесплатный курс по Android: clck.ru/376Zab
    🔹 VK: vk.com/ievetrov.development
    00:00 Что такое конструктор в Kotlin
    01:24 Блок 1: пустой конструктор
    03:34 Блок 2: основной конструктор (primary constructor)
    05:58 Блок 3: упрощенная форма основного конструктора
    06:27 Блок 4: вторичный конструктор (secondary constructor)
    09:32 Инициализатор

  • @gennady8263
    @gennady8263 4 місяці тому +3

    7:25 а почему в главный конструктор не прописали свойство по умолчанию isNeedToPrepare, как в случае класса Dish? Зачем нужно было создать второй конструктор?

    • @Diabolic9595
      @Diabolic9595 Місяць тому

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

  • @wsxpocxeafx
    @wsxpocxeafx 3 місяці тому +1

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

  • @ДмитрийМаксимов-ю3б
    @ДмитрийМаксимов-ю3б 6 місяців тому +2

    Как вы пишете сразу в нескольких местах пример: 5:05 ?

  • @iJoji
    @iJoji Рік тому +1

    на 5:35 сложное объяснение вышло: Значения из Сигнатуры присваиваются ранее созданным полям класса - понять бы к чему эти определения привязаны. Можно ещё мышкой указть что есть что, и какая взаимосвязь, было бы понятнее, чуть чуть сложное объяснение

  • @andrewl6319
    @andrewl6319 Рік тому +2

    Ни фига не понял, но очень интересно!

  • @kluster120
    @kluster120 Рік тому +3

    Спасибо ! Как новичку в начале кажется очень запутанным, могли ли бы Вы оставлять после каждого урока ссылки на рекомендуемый для прочтения материал по теме, (знаю что в google, их миллионы, поэтому было бы интересно видеть ресурсы рекомендуемые автором) еще раз спасибо ).

    • @ievetrov
      @ievetrov  Рік тому +3

      Здравствуйте! спасибо вам за фидбэк)
      Оставлять ссылки еще боюсь у меня не хватит ресурса пока что, поэтому не могу обещать) но возможно в рамках курса по андройд это будет актуально для некоторых тем, чтобы более углубленно разобраться в какой-то технологии.
      Касаемо котлин могу рекомендовать официальную документацию и ресурс с ее неофициальным переводом. Там довольно удобная навигация по разделам, ну и полезно читать официальные источники, так как версии языка меняются, где-то материал может быть устаревшим, неверно интерпретирован и так далее.
      Вот эти ресурсы:
      en kotlinlang.org/docs/getting-started.html
      ru kotlinlang.ru/
      И конечно литература от создателей языка "Kotlin в действии"

    • @kluster120
      @kluster120 Рік тому

      @@ievetrov спасибо !

  • @ratio3bet423
    @ratio3bet423 2 роки тому +2

    Огонь, хорошие примеры

  • @vitalyzavaritsky8303
    @vitalyzavaritsky8303 Рік тому +5

    Блин, два раза пересмотрел, понял только начало)

    • @ievetrov
      @ievetrov  Рік тому +1

      Возможно где-то я не докрутил) Но тема сначала кажется действительно сложноватой, нужно, чтобы этот шаблон прижился в голове. Должна помочь доп литература и/или альтернативное объяснение

    • @sunshineforester8747
      @sunshineforester8747 Рік тому +1

      Два, мало, нужно ещё и почитать... А так это одно из лучших объяснений на русском языке!

  • @eric_mejlumyan
    @eric_mejlumyan Рік тому +2

    Понравилась реализация ООП в котлин, спасибо за объяснение. пересмотрев видео, сразу всё понял

    • @ievetrov
      @ievetrov  Рік тому +2

      Вам спасибо, кайф, что заходит подача)

  • @ПростоУлыбка-ш2о
    @ПростоУлыбка-ш2о 2 роки тому +1

    совсем редко стали уроки выходить =(

  • @elenashevtsova4034
    @elenashevtsova4034 Рік тому

    на 2.25 и на 3.37 оба вида конструктора называете primary. Так какой из них какой ?

    • @ievetrov
      @ievetrov  Рік тому +1

      Здравствуйте. На этих таймкодах я демонстрирую один и тот же основной конструктор. Разный лишь синтаксис. class Dish, class Dish(), class Dish constructor() - это все классы, который имеют пустой основной конструктор (он указан именно в сигнатуре класса, рядом с названием)
      Вторичный конструктор - это когда мы [в теле класса] явно прописываем ключевое слово conctructor() {} со всеми нужными нам полями.

  • @liberty5493
    @liberty5493 Рік тому

    Хороший урок, можно на примере разобрать порядок выполнения кода со вторичным конструктором?

    • @ievetrov
      @ievetrov  Рік тому +1

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

  • @neyronsupergamer55
    @neyronsupergamer55 7 місяців тому

    Эх жаль что нет текстовых уроков 😢

    • @ievetrov
      @ievetrov  7 місяців тому

      Здравствуйте. Текстовые версии у меня на сайте вот по этой ссылке ievetrov.ru/kotlin-%d1%81-%d0%bd%d1%83%d0%bb%d1%8f-%d1%83%d1%80%d0%be%d0%ba%d0%b8/

    • @vallltar
      @vallltar 6 місяців тому

      @@ievetrov спасибо большое вам, на 12 уроке только узнал что есть текстовая версия, до этого сам делал записи. сделайте на сайте донат, кто захочет, пришлёт сколько сможет вам в качестве благодарности.

  • @ksiana_fx
    @ksiana_fx 11 місяців тому

    Как кастомизировать полосу компиляции как у вас с котиком?

    • @ievetrov
      @ievetrov  10 місяців тому +2

      В разделе плагины скачайте nyan cat)

  • @ОлегКирсанов-й2т

    В видео неправильно назван порядок выполнения первичного, вторичного конструкторов и блока init.
    Правильно так:
    1. Первичный конструктор
    2. init
    3. Вторичный конструктор
    Это легко проверить, выполнив этот код:
    class Person(val name: String, var age: Int) {
    init {
    println("Initializing Person object")
    }
    constructor(name: String, age: Int, address: String) : this(name, age) {
    println("Secondary constructor called")
    }
    }
    fun main() {
    val person = Person("John", 30, "123 Main St.")
    }
    В консоль будет выведено:
    Initializing Person object
    Secondary constructor called
    Автор, проверяйте внимательно то, что говорите, особенно новичкам.

    • @ievetrov
      @ievetrov  Рік тому +6

      Вы не внимательно слушали, вот ваш же пример, только дополнен кодом, который отрабатывает именно в момент вызова:
      class Person(
      val name: String,
      var age: Int,
      val some1: Unit = println("первичный конструктор"),
      ) {
      init {
      println("блок init 1")
      }
      constructor(
      name: String,
      age: Int,
      address: String,
      some2: Unit = println("вторичный конструктор")
      ) : this(name, age) {
      println("тело вторичного конструктора")
      }
      init {
      println("блок init 2")
      }
      }
      fun main() {
      val person = Person("John", 30, "123 Main St.")
      }
      А вот вывод:
      вторичный конструктор
      первичный конструктор
      блок init 1
      блок init 2
      тело вторичного конструктора
      Прям как в видео на 10:42
      Обратите внимание, все init'ы вызывается перед телом вторичного конструктора. Еще могу посоветовать статью:
      medium.com/keepsafe-engineering/an-in-depth-look-at-kotlins-initializers-a0420fcbf546

    • @ОлегКирсанов-й2т
      @ОлегКирсанов-й2т Рік тому +3

      @@ievetrov сдаюсь. Действительно довольно путанная тема. Спасибо за статью.