Учим Kotlin с нуля | №19 Класс Any. equals() и hashCode().

Sdílet
Vložit
  • čas přidán 25. 01. 2022
  • Полный видеокурс по языку программирования Kotlin. В девятнадцатом уроке разбираем equals() и hashCode().
    !!Важно!! Повторяйте руками весь код, который вы видите на видео. Просто просмотреть недостаточно. Если возникают вопросы/ошибки пишите в комментах. Будем разбираться вместе.
    Язык программирования Kotlin используют для создания бэкенда веб-приложений и приложений для Android. Язык похож на Java, но проще по синтаксису. Молодой и востребованный на рынке язык программирования.
    #kotlin​​​​​ #уроки​​​​​ #программирование
  • Věda a technologie

Komentáře • 59

  • @imago29
    @imago29 Před 2 lety +9

    Пожалуйста, не бросай! Ты делаешь очень крутые уроки. Не знаю, в чем именно они крутые, но мне на 2-м месяце изучения программирования заходят именно твои ролики. Учу по книге и параллельно по твоему каналу. Большое тебе человеческое спасибо!

  • @user-ev5jh4sh8p
    @user-ev5jh4sh8p Před 2 lety +3

    Ну вот, я теперь и в этом разобрался. Всё как по полочкам. А то я раньше не мог толком понял зачем эти функции нужны и где их применять. спасибо!

  • @user-lu4ws2nh5v
    @user-lu4ws2nh5v Před rokem +1

    Ещё одно адекватное объяснение... Спасибо большое.

  • @antonparfenov8519
    @antonparfenov8519 Před 2 lety +6

    Ура! Новый урок. Спасибо за простое объяснение.
    Ждём продолжения

  • @_senator
    @_senator Před 2 lety +4

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

  • @alexeytushnolob4845
    @alexeytushnolob4845 Před 2 lety

    Мне нравится как автор очень разборчиво и доходчиво излагает

  • @Danik2h
    @Danik2h Před 5 měsíci

    Смотрю этот ролик 16.01.24 в 15:25, просто прикольное совпадение "почти". Спасибо за урок, после книжек прям очень заходит, рассказываешь и показываешь супер доступно, очень приятно смотреть и слушать

  • @InvincibleXXX
    @InvincibleXXX Před 3 měsíci

    И вам спасибо большое!

  • @alexandershaykevich9672
    @alexandershaykevich9672 Před 6 měsíci

    Отличное объяснение и способ подачи материала. Только одно, но очень существенное замечание. Все таки, надо было с самого начала акцентировать внимание, что мы разбираем пример с дата классом, у которого уже переопределены equals/hascode/tostring, а по умолчанию эти методы работают иначе.

  • @lubovkabanova
    @lubovkabanova Před 2 lety

    Отличный курс! Наконец-то нашлось именно то, что я искала. Большое спасибо! Хорошая подача, очень понятное и глубокое объяснение материала. После Ваших уроков стали, наконец, понятны некоторые вещи, с которыми было никак не разобраться самостоятельно и по оф.документации. Самый лучший курс по kotlin на ютубе.

  • @irina_manina
    @irina_manina Před rokem

    Респект! Все, что смотрю на платформе по обучению - полный трэш(( я там не понимаю процентов 80.. Только твои уроки меня спасают)) книги читать некогда, хотя тоже есть стоящие) Спасибо тебе, дорогой человек))

  • @jojek
    @jojek Před rokem +6

    Спасибо за урок!
    Но я сломал голову над тем, почему в начале видео сравнение user1 и user2 равно true, если hashcode у них разный и соответственно результатом сравнения должен быть false. При тестировании в IDE, также вижу false.

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  Před rokem +1

      В Котлин сравнение объектов по умолчанию осуществляется по всем его полям, а не по хэшкоду

    • @vitalyzavaritsky8303
      @vitalyzavaritsky8303 Před rokem +6

      @@SyntaxSugarDaddy Я кстати тоже голову сломал, потом разобрался. У тебя в предыдущем уроке просто класс, а в этом уже data. В обычном классе сравниваются не поля а ссылки на объекты. С простым класслм они будут разные и при сравнении будет false даже если поля идентичные.

  • @ruslanboroda5145
    @ruslanboroda5145 Před rokem

    Огромная благодарность автору!

  • @user-wf7zt8ht8r
    @user-wf7zt8ht8r Před 2 lety

    Благодарю!

  • @ashot.davtyan
    @ashot.davtyan Před rokem

    Спасибо

  • @garrinchadossantos6381
    @garrinchadossantos6381 Před 2 lety +3

    Большое вам спасибо за эти уроки. Среди большинства видео на ютюбе, я рад что нашел именно ваш канал, так как тут самое лучшее и доступное для меня объяснение материала.
    Хотел бы еще спросить - примерно каков у вас порядок опубликования материала - раз в месяц? И планируете ли вы рассказать в ближ время о делегирование, коллекциях, корутине и асинхронных потоках. Удачи вам !)

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  Před 2 lety

      Порядок называется «как придётся» )) когда есть время тогда и снимаю. До коллекций скоро доберёмся

  • @kluster120
    @kluster120 Před rokem +1

    Спасибо, очень понравилось ! НО, надо было бы упомянуть хотя-бы частично: о базовых класса и классах-данных.

    • @maze1-0
      @maze1-0 Před 11 měsíci

      да. Пришлось разбираться самому в разнице 'class User' и 'data class User', автор этот момент упустил, но это прямо влияет на все два урока с Any

  • @SunSet-cr7oj
    @SunSet-cr7oj Před 2 lety

    Когда новые уроки? Жду с нетерпением!

  • @olegprud8323
    @olegprud8323 Před 2 lety +1

    Здравствуйте! Спасибо Вам самое лучшее объяснение, скажите будет ещё продолжение

  • @vladislav_kiss7288
    @vladislav_kiss7288 Před 2 lety

    Спасибо! Жду новых уроков как свежие серии любимого сериала) Интересно как далеко мы от темы Лямда выражений и функций высшего порядка? Есть ли в планах такие темы? Хотелось бы услышать в твоем формате! Всех благ!!!

  • @oleg12395
    @oleg12395 Před 2 lety +1

    Спасибо за классный урок. toString переопределен все равно 21:26 так как у Вас data class

  • @patrickj1129
    @patrickj1129 Před 2 lety

    Обобщая предыдущие комментарии, можно заключить: Классно! ЕЩЁ!

  • @user-ff8vo4xs6v
    @user-ff8vo4xs6v Před 2 lety

    очень хочется увидеть объяснение простыми словами(по возможности с примерами или картинками) ООП именно в kotlin, буду очень благодарен

  • @hrisogona9330
    @hrisogona9330 Před 2 lety

    Понятно

  • @user-yu9iu6ft5r
    @user-yu9iu6ft5r Před 5 měsíci

    Лайк и замечание. В прошлом уроке был просто класс, в это уже data класс. Я попробовал - при использовании не data класса метод toString работает, а метод equals возвращает всегда false, даже если объекты класса одинаковы. Это на заметку тем, кто смотрит это видео сейчас и вопрос автору - в чем причина?

  • @sinoptik13rus
    @sinoptik13rus Před 2 lety +1

    А можно про исключения, а так же про коллекции и дженерики)

  • @user-lu4ws2nh5v
    @user-lu4ws2nh5v Před rokem

    А то я учусь по книге Atomic Kotlin. И полезна она по сути только перечнем тем. Потому что каждую тему мне приходится читать в других источниках. И не для того чтобы дополнить знания, а понять. Автор исходит из своей логики. Возможно он считает, что многое я должен уже знать. Хотя в описании книги написано, что она для новичков. Может новичков "котлинистов"?
    Спасибо ещё раз :)

  • @Belov23
    @Belov23 Před rokem

    спасисбо, ты делаешь хорошее дело!

  • @shopiak
    @shopiak Před 2 lety

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

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  Před 2 lety +1

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

  • @user-st7mz3ds6k
    @user-st7mz3ds6k Před 2 lety

    Добрый день! Было ли Ваших уроках про паттерн наблюдатель? Что то не смог найти((

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  Před 2 lety

      Нет, про паттерны не рассказывал

  • @locky1827
    @locky1827 Před 2 měsíci

    Надо было пояснить что вы поставили перед классом data, и поэтому по умолчанию обьекты равны, е сли равны. НОООООООО если слова ключевого data нет то даже равные обьекты дают false

  • @Bivis63
    @Bivis63 Před rokem

    Здравствуейте ,если сделать класс обычным а не data то при сравнивание user1==user2 выдает false почему так ?)

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  Před rokem

      В data классах по умолчанию переопределен метод equals, который сравнивает по полям объекта. В обычном классе в этом случае идет сравнение ссылок на объекты

  • @Volodya2410
    @Volodya2410 Před rokem

    Блин у меня хешкоды разные у одинаковых объектов. Раз на 10 перепроверил уже))

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  Před rokem +1

      Хэшкоды могут быть одинаковыми только если объект всего один, но на него есть несколько ссылок. Если ты создал 2 одинаковых (по полям) объекта у каждого вызвав конструктор, то это 2 разных объекта с разными хэшкодами, даже если значения их полей одинаковы

    • @pavlo_herasymchuk
      @pavlo_herasymchuk Před rokem

      Если обычный класс, то они и будут разные. В таком случае хэш вычисляется по адресу в памяти (heap memory). Каждому новому объекту выделяется отдельное место в памяти и у каждого будет свой адрес (ссылка на объект, которую будет хранить переменная), даже если все поля одинаковые.
      Другое дело data class, тут хэш вычисляется уже по самим полям, поэтому, если создавать разные объекты с одинаковыми полями, они будут иметь одинаковый хэш.

  • @LinarOPS
    @LinarOPS Před 2 lety

    Я дико извиняюсь, но после попытки сравнить два экземпляра класса через метод .equals у меня в результате получилось false. Экземпляры были идентичны

    • @anasko3824
      @anasko3824 Před rokem +1

      Нужно ключевое слово data class перед именем класса прописать или переопределить метод equals() в классе

  • @Posudik
    @Posudik Před 2 lety

    Давай изучать Kotlin вместе, я уже начал…присоединяйся
    Смотри в описании моего канала!!!

  • @wildnatureW
    @wildnatureW Před 24 dny

    делаю все как на 1:42 минуте, но выдает false

    • @wildnatureW
      @wildnatureW Před 23 dny +1

      класс родитель (User) должен быть data. Автор вроде бы забыл это упомянуть и почему equals работает только с дата классами?
      (я даун - в комментах уже обсуждалось)

  • @user-sx2fw7lh1w
    @user-sx2fw7lh1w Před rokem

    fun main() {
    val user1 = User("Andrés", "Uskov", 40);
    val user2 = User("Andrés", "Uskov", 40);
    println(user1 == user2)
    }
    результат false
    Но почему?

    • @user-sx2fw7lh1w
      @user-sx2fw7lh1w Před rokem

      уже разобрался - причина в "data" в определении класса User. Теперь хотя бы знаю, что именно нужно гуглить

    • @black_river102
      @black_river102 Před rokem

      @@user-sx2fw7lh1w дружище можешь подробнее рассказать, такая же проблема 🤣

    • @pavlo_herasymchuk
      @pavlo_herasymchuk Před rokem

      Разобрался?)

    • @black_river102
      @black_river102 Před rokem

      @@pavlo_herasymchuk да, выше же дали ответ

  • @aqfwgerg
    @aqfwgerg Před 13 dny

    котлин за 2 года поменялся да.. с юзерами выдает false

    • @aqfwgerg
      @aqfwgerg Před 13 dny

      Так и с хэшкодами выдает разное значение при одинаковых объектах, хотя иквалс дало тру

  • @user-zz2ns6js7z
    @user-zz2ns6js7z Před rokem

    var user1 = User("1234", "Dot", 30)
    var user2 = User("1234", "Dot", 30)
    println(user1.hashCode())
    println(user2.hashCode())
    в консоль выводятся следующие значения:
    495053715
    1922154895
    почему так? пробовала создавать и других юзеров, меняла значения (сразу в двух) - всё равно хэш-коды значительно отличаются

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  Před rokem

      Все правильно. Каждый раз при вызове конструктора создается новый объект в куче со своим уникальным хешкодом

    • @user-dl8yr3zo1g
      @user-dl8yr3zo1g Před měsícem

      @@SyntaxSugarDaddy делаю так же, и у меня хэшкоды совпадают. ???