Учим Kotlin с нуля | №19 Класс Any. equals() и hashCode().
Vložit
- čas přidán 25. 01. 2022
- Полный видеокурс по языку программирования Kotlin. В девятнадцатом уроке разбираем equals() и hashCode().
!!Важно!! Повторяйте руками весь код, который вы видите на видео. Просто просмотреть недостаточно. Если возникают вопросы/ошибки пишите в комментах. Будем разбираться вместе.
Язык программирования Kotlin используют для создания бэкенда веб-приложений и приложений для Android. Язык похож на Java, но проще по синтаксису. Молодой и востребованный на рынке язык программирования.
#kotlin #уроки #программирование - Věda a technologie
Пожалуйста, не бросай! Ты делаешь очень крутые уроки. Не знаю, в чем именно они крутые, но мне на 2-м месяце изучения программирования заходят именно твои ролики. Учу по книге и параллельно по твоему каналу. Большое тебе человеческое спасибо!
Ну вот, я теперь и в этом разобрался. Всё как по полочкам. А то я раньше не мог толком понял зачем эти функции нужны и где их применять. спасибо!
Ещё одно адекватное объяснение... Спасибо большое.
Ура! Новый урок. Спасибо за простое объяснение.
Ждём продолжения
Спасибо за уроки, очень полезными оказались, продолжай в том же духе, ещё многое можно рассказать)
Мне нравится как автор очень разборчиво и доходчиво излагает
Смотрю этот ролик 16.01.24 в 15:25, просто прикольное совпадение "почти". Спасибо за урок, после книжек прям очень заходит, рассказываешь и показываешь супер доступно, очень приятно смотреть и слушать
И вам спасибо большое!
Отличное объяснение и способ подачи материала. Только одно, но очень существенное замечание. Все таки, надо было с самого начала акцентировать внимание, что мы разбираем пример с дата классом, у которого уже переопределены equals/hascode/tostring, а по умолчанию эти методы работают иначе.
Отличный курс! Наконец-то нашлось именно то, что я искала. Большое спасибо! Хорошая подача, очень понятное и глубокое объяснение материала. После Ваших уроков стали, наконец, понятны некоторые вещи, с которыми было никак не разобраться самостоятельно и по оф.документации. Самый лучший курс по kotlin на ютубе.
Респект! Все, что смотрю на платформе по обучению - полный трэш(( я там не понимаю процентов 80.. Только твои уроки меня спасают)) книги читать некогда, хотя тоже есть стоящие) Спасибо тебе, дорогой человек))
Спасибо за урок!
Но я сломал голову над тем, почему в начале видео сравнение user1 и user2 равно true, если hashcode у них разный и соответственно результатом сравнения должен быть false. При тестировании в IDE, также вижу false.
В Котлин сравнение объектов по умолчанию осуществляется по всем его полям, а не по хэшкоду
@@SyntaxSugarDaddy Я кстати тоже голову сломал, потом разобрался. У тебя в предыдущем уроке просто класс, а в этом уже data. В обычном классе сравниваются не поля а ссылки на объекты. С простым класслм они будут разные и при сравнении будет false даже если поля идентичные.
Огромная благодарность автору!
Благодарю!
Спасибо
Большое вам спасибо за эти уроки. Среди большинства видео на ютюбе, я рад что нашел именно ваш канал, так как тут самое лучшее и доступное для меня объяснение материала.
Хотел бы еще спросить - примерно каков у вас порядок опубликования материала - раз в месяц? И планируете ли вы рассказать в ближ время о делегирование, коллекциях, корутине и асинхронных потоках. Удачи вам !)
Порядок называется «как придётся» )) когда есть время тогда и снимаю. До коллекций скоро доберёмся
Спасибо, очень понравилось ! НО, надо было бы упомянуть хотя-бы частично: о базовых класса и классах-данных.
да. Пришлось разбираться самому в разнице 'class User' и 'data class User', автор этот момент упустил, но это прямо влияет на все два урока с Any
Когда новые уроки? Жду с нетерпением!
Здравствуйте! Спасибо Вам самое лучшее объяснение, скажите будет ещё продолжение
да, конечно
Спасибо! Жду новых уроков как свежие серии любимого сериала) Интересно как далеко мы от темы Лямда выражений и функций высшего порядка? Есть ли в планах такие темы? Хотелось бы услышать в твоем формате! Всех благ!!!
Спасибо за классный урок. toString переопределен все равно 21:26 так как у Вас data class
Обобщая предыдущие комментарии, можно заключить: Классно! ЕЩЁ!
очень хочется увидеть объяснение простыми словами(по возможности с примерами или картинками) ООП именно в kotlin, буду очень благодарен
Понятно
Лайк и замечание. В прошлом уроке был просто класс, в это уже data класс. Я попробовал - при использовании не data класса метод toString работает, а метод equals возвращает всегда false, даже если объекты класса одинаковы. Это на заметку тем, кто смотрит это видео сейчас и вопрос автору - в чем причина?
А можно про исключения, а так же про коллекции и дженерики)
Все будет)
А то я учусь по книге Atomic Kotlin. И полезна она по сути только перечнем тем. Потому что каждую тему мне приходится читать в других источниках. И не для того чтобы дополнить знания, а понять. Автор исходит из своей логики. Возможно он считает, что многое я должен уже знать. Хотя в описании книги написано, что она для новичков. Может новичков "котлинистов"?
Спасибо ещё раз :)
спасисбо, ты делаешь хорошее дело!
Приветствую автора, я сейчас на 8-мом уроке, курс просто отличный, хотелось бы узнать - будет ли продолжение курса, или это последнее видео?
загружаю новое уже. планирую еще уроков 10 точно, но когда их запишу пока сказать не могу.
Добрый день! Было ли Ваших уроках про паттерн наблюдатель? Что то не смог найти((
Нет, про паттерны не рассказывал
Надо было пояснить что вы поставили перед классом data, и поэтому по умолчанию обьекты равны, е сли равны. НОООООООО если слова ключевого data нет то даже равные обьекты дают false
Здравствуейте ,если сделать класс обычным а не data то при сравнивание user1==user2 выдает false почему так ?)
В data классах по умолчанию переопределен метод equals, который сравнивает по полям объекта. В обычном классе в этом случае идет сравнение ссылок на объекты
Блин у меня хешкоды разные у одинаковых объектов. Раз на 10 перепроверил уже))
Хэшкоды могут быть одинаковыми только если объект всего один, но на него есть несколько ссылок. Если ты создал 2 одинаковых (по полям) объекта у каждого вызвав конструктор, то это 2 разных объекта с разными хэшкодами, даже если значения их полей одинаковы
Если обычный класс, то они и будут разные. В таком случае хэш вычисляется по адресу в памяти (heap memory). Каждому новому объекту выделяется отдельное место в памяти и у каждого будет свой адрес (ссылка на объект, которую будет хранить переменная), даже если все поля одинаковые.
Другое дело data class, тут хэш вычисляется уже по самим полям, поэтому, если создавать разные объекты с одинаковыми полями, они будут иметь одинаковый хэш.
Я дико извиняюсь, но после попытки сравнить два экземпляра класса через метод .equals у меня в результате получилось false. Экземпляры были идентичны
Нужно ключевое слово data class перед именем класса прописать или переопределить метод equals() в классе
Давай изучать Kotlin вместе, я уже начал…присоединяйся
Смотри в описании моего канала!!!
делаю все как на 1:42 минуте, но выдает false
класс родитель (User) должен быть data. Автор вроде бы забыл это упомянуть и почему equals работает только с дата классами?
(я даун - в комментах уже обсуждалось)
fun main() {
val user1 = User("Andrés", "Uskov", 40);
val user2 = User("Andrés", "Uskov", 40);
println(user1 == user2)
}
результат false
Но почему?
уже разобрался - причина в "data" в определении класса User. Теперь хотя бы знаю, что именно нужно гуглить
@@user-sx2fw7lh1w дружище можешь подробнее рассказать, такая же проблема 🤣
Разобрался?)
@@pavlo_herasymchuk да, выше же дали ответ
котлин за 2 года поменялся да.. с юзерами выдает false
Так и с хэшкодами выдает разное значение при одинаковых объектах, хотя иквалс дало тру
var user1 = User("1234", "Dot", 30)
var user2 = User("1234", "Dot", 30)
println(user1.hashCode())
println(user2.hashCode())
в консоль выводятся следующие значения:
495053715
1922154895
почему так? пробовала создавать и других юзеров, меняла значения (сразу в двух) - всё равно хэш-коды значительно отличаются
Все правильно. Каждый раз при вызове конструктора создается новый объект в куче со своим уникальным хешкодом
@@SyntaxSugarDaddy делаю так же, и у меня хэшкоды совпадают. ???