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

Поділитися
Вставка
  • Опубліковано 25 січ 2022
  • Полный видеокурс по языку программирования Kotlin. В девятнадцатом уроке разбираем equals() и hashCode().
    !!Важно!! Повторяйте руками весь код, который вы видите на видео. Просто просмотреть недостаточно. Если возникают вопросы/ошибки пишите в комментах. Будем разбираться вместе.
    Язык программирования Kotlin используют для создания бэкенда веб-приложений и приложений для Android. Язык похож на Java, но проще по синтаксису. Молодой и востребованный на рынке язык программирования.
    #kotlin​​​​​ #уроки​​​​​ #программирование
  • Наука та технологія

КОМЕНТАРІ • 59

  • @imago29
    @imago29 2 роки тому +9

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

  • @user-ev5jh4sh8p
    @user-ev5jh4sh8p 2 роки тому +3

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

  • @antonparfenov8519
    @antonparfenov8519 2 роки тому +6

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

  • @user-lu4ws2nh5v
    @user-lu4ws2nh5v Рік тому +1

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

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

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

  • @InvincibleXXX
    @InvincibleXXX 4 місяці тому

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

  • @alexeytushnolob4845
    @alexeytushnolob4845 2 роки тому

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

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

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

  • @ruslanboroda5145
    @ruslanboroda5145 2 роки тому

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

  • @jojek
    @jojek 2 роки тому +6

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

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  2 роки тому +1

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

    • @vitalyzavaritsky8303
      @vitalyzavaritsky8303 2 роки тому +7

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

  • @lubovkabanova
    @lubovkabanova 2 роки тому

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

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

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

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

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

  • @user-wf7zt8ht8r
    @user-wf7zt8ht8r 2 роки тому

    Благодарю!

  • @ashot.davtyan
    @ashot.davtyan Рік тому

    Спасибо

  • @garrinchadossantos6381
    @garrinchadossantos6381 2 роки тому +3

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

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  2 роки тому

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

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

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

    • @maze1-0
      @maze1-0 Рік тому

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

  • @vladislav_kiss7288
    @vladislav_kiss7288 2 роки тому

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

  • @olegprud8323
    @olegprud8323 2 роки тому +1

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

  • @oleg12395
    @oleg12395 2 роки тому +1

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

  • @SunSet-cr7oj
    @SunSet-cr7oj 2 роки тому

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

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

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

  • @user-ff8vo4xs6v
    @user-ff8vo4xs6v 2 роки тому

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

  • @patrickj1129
    @patrickj1129 2 роки тому

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

  • @hrisogona9330
    @hrisogona9330 2 роки тому

    Понятно

  • @user-yu9iu6ft5r
    @user-yu9iu6ft5r 6 місяців тому

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

  • @sinoptik13rus
    @sinoptik13rus 2 роки тому +1

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

  • @user-lu4ws2nh5v
    @user-lu4ws2nh5v Рік тому

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

  • @shopiak
    @shopiak 2 роки тому

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

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  2 роки тому +1

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

  • @user-st7mz3ds6k
    @user-st7mz3ds6k 2 роки тому

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

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  2 роки тому

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

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

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

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

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

  • @locky1827
    @locky1827 3 місяці тому

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

  • @Volodya2410
    @Volodya2410 2 роки тому

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

    • @SyntaxSugarDaddy
      @SyntaxSugarDaddy  2 роки тому +1

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

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

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

  • @Posudik
    @Posudik 2 роки тому

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

  • @LinarOPS
    @LinarOPS 2 роки тому

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

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

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

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

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

    • @wildnatureW
      @wildnatureW Місяць тому +1

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

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

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

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

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

  • @user-sx2fw7lh1w
    @user-sx2fw7lh1w Рік тому

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

    • @user-sx2fw7lh1w
      @user-sx2fw7lh1w Рік тому

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

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

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

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

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

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

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

  • @user-zz2ns6js7z
    @user-zz2ns6js7z Рік тому

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

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

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

    • @user-dl8yr3zo1g
      @user-dl8yr3zo1g 2 місяці тому

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