Java. Проблема с null. Null safety.

  Рет қаралды 9,716

Sergey Arkhipov Java Tutorials

Sergey Arkhipov Java Tutorials

2 жыл бұрын

В этом видео я рассказываю о проблеме с null в языке программирования Java, из-за которой возникает печально известное NullPointerExeption. Даю некоторые рекомендации по организации кода для борьбы с этой проблемой и повышения надежности работы программ.

Пікірлер: 74
@void656
@void656 2 жыл бұрын
интересно, спасибо. Вообще было бы интересно больше видео про разбор ошибок, хорошие и плохие практики, почему какой-то код написан не правильно и почему и как правильно и почему. Как-то так
@romawar1869
@romawar1869 2 жыл бұрын
Да ладно , месяц спустя ))) , я уже подумал плохое случилось , очень рад что нет надеюсь у тебя все хорошо ,
@user-lh8om7bb7b
@user-lh8om7bb7b 2 жыл бұрын
Спасибо большое! Очень рада Вас снова слышать. 🙏
@Alexander-is1eq
@Alexander-is1eq Жыл бұрын
Очень полезный урок. Спасибо большое!
@user-lt1jqrhcp7ext321
@user-lt1jqrhcp7ext321 2 жыл бұрын
Сергей, спасибо за ваши уроки.
@yushchenkoalexey
@yushchenkoalexey 2 жыл бұрын
Как всегда, замечательное видео, большое спасибо!
@user-uu7cg8mp7l
@user-uu7cg8mp7l 2 жыл бұрын
Класс!!! Спасибо за видео и пищу к размышлению ✊
@elena-8363
@elena-8363 2 жыл бұрын
А я уже думала пилить Optional везде, где можно. Передумала! Отличное видео.
@rollingdice
@rollingdice 2 жыл бұрын
спасибо тебе святой человек) обожаю твою подачу.
@fxvlad
@fxvlad 2 жыл бұрын
Сергей, вы такой крутой мужик, спасибо!!!
@godzosioda
@godzosioda 4 ай бұрын
Круто! Спасибо за такие "фишечки"!
@ascar66
@ascar66 2 жыл бұрын
Спасибо большое науку.
@chicago21
@chicago21 2 жыл бұрын
Спасибо! Очень доходчиво
@MagDag_
@MagDag_ 2 жыл бұрын
Привет из Флориды! Спасибо!
@wildjoe6259
@wildjoe6259 2 жыл бұрын
Познавательно! Спасибо!
@marvinheemeyer7027
@marvinheemeyer7027 2 жыл бұрын
Спасибо за урок
@serhiinik
@serhiinik Жыл бұрын
Спасибо огромное! На курсах так доступно не обьясняют!
@user-qy7vv5yx3b
@user-qy7vv5yx3b 2 ай бұрын
У Вас хорошие ролики.
@user-ce3lm7sz1k
@user-ce3lm7sz1k 2 жыл бұрын
класс, очень интересно
@user-vt5yu9ez9d
@user-vt5yu9ez9d Жыл бұрын
Спасібо, было интересно
@namefamily957
@namefamily957 2 жыл бұрын
Надеюсь у вас там все хорошо!
@valitovgaziz
@valitovgaziz Жыл бұрын
Рахметы. Идем в писать стартап))))
@nevmen9sha
@nevmen9sha 2 жыл бұрын
Спасибо!
@andriisavchenko6395
@andriisavchenko6395 Жыл бұрын
Спасибо
@olezhonnv3215
@olezhonnv3215 Жыл бұрын
Любому разрабу полезно покодить на Си. Вот для того, чтобы внимательность натренировать. Segmentation fault и вообще, ручная работа с памятью - реально тренирует внимательность. И проблема налл сама собой лечится, вы будете чувствовать пятой точкой, где может быть проблема. Уже работая на PHP, Java, JS и так далее. Эти языки расслабляют, после Си. А у меня много сишного кода в продакшне - знаю, о чем говорю. Не то, чтобы призываю к чему-то, просто для развития, на Си покодить полезно. Без фанатизма, просто базу дает хорошую, и по ОС - процессы, потоки, память, и по сети - ТСП, УДП. И вообще, как работает компьютер.
@AndrewOBannon
@AndrewOBannon Жыл бұрын
Согласен, Си - это маст хэв попробовать. Сам начинал с JS - непонятно было много чего, тот же Array вовсе не аррэй. А когда потрогал немного Си - сразу многое прояснилось. А Сергею спасибо. Хотелось бы еще таких уроков.
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 10 ай бұрын
А сишники друг другу так говорят про ассемблер. А 1сники друг другу так говорят про жаву
@hammerandsickle2537
@hammerandsickle2537 2 жыл бұрын
Спасибо.
@user-iz7jr4yt1o
@user-iz7jr4yt1o Жыл бұрын
500 лайк с меня!
@yurybelozerov3610
@yurybelozerov3610 2 жыл бұрын
В целом очень полезный урок. Только одно возражение по поводу @NotNull аннотации - описание в комментарии к Sergey Sukhotsky.
@user-ln1ps3lv9r
@user-ln1ps3lv9r 6 ай бұрын
Спасибо. Хорошо бы было добавить про Objects.requireNonNull() и Objects.requireNonNullElse()
@olezhonnv3215
@olezhonnv3215 Жыл бұрын
Optional - это налл, в профиль. Вместо налл появляется емпти - браво!
@olezhonnv3215
@olezhonnv3215 Жыл бұрын
Шо так проверять на налл, шо иначе проверять на емпти. Но, зато ввели дополнительный класс и якобы избавились от налл, заменив его суррогатом в виде Оптионал. Чем всех так тот налл пугает, на этапе отладки забытые проверки отлавливаются и доставляются. Может быть, я однобоко смотрю на проблему. Я за безопасный и надежный код.
@antonio82917
@antonio82917 2 жыл бұрын
Знаю случай когда вопрос о том ставить ли final перешёл в серьёзные дрязги в команде. Лично я убеждён что final для локальных переменных это пустая трата 6 символов. За много лет работы не встречал таких случаев, чтобы final от чего то спас, все гипотетически примеры очень надуманные.
@RenderDragon
@RenderDragon Жыл бұрын
Полностью с тобой согласен :)
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 10 ай бұрын
"не встречал таких случаев, чтобы final от чего то спас" Как вы определили, что final не спас от чего то?
@antonio82917
@antonio82917 9 ай бұрын
@@Das.Kleine.Krokodil Ну как если бы я хотел что-то сделать с переменной и не смог потому что она final и я сразу прозрел и осознал свою ошибку. Если мне нужно изменить программу - я точно знаю что я делаю, и мне придется потратить немного лишнего времени чтобы удалить final. То есть мало того что final создает ненужный шум в коде, я еще должен тратить время на то чтобы добавлять и удалять его.
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 9 ай бұрын
@@antonio82917 по вашим словам вы как правило не ставите финал, поэтому противоречие
@Libra7by
@Libra7by 2 жыл бұрын
Посмотрел ролик, и еще раз повторюсь: "Какой Kotlin оху...замечательный!"
@user-mq3gy8gf4o
@user-mq3gy8gf4o 2 жыл бұрын
На данный момент востребованы java Android (Junior) разработчики или только kotlin?
@arhitutorials
@arhitutorials 2 жыл бұрын
На данный момент без Котлина шансов нет.
@ankudinova
@ankudinova 2 жыл бұрын
Старый код на джаве тоже нужно кому-то поддерживать
@ankudinova
@ankudinova 2 жыл бұрын
Говорю про РЕГИОН, у нас стабильные крупные работодатели много платят именно джавистам, котлин в основном в стартапах.
@romawar1869
@romawar1869 2 жыл бұрын
@@arhitutorials значит нужно на него потихоньку переходить
@yarobest9594
@yarobest9594 2 жыл бұрын
@@ankudinova существует много разрабов, которые умеют джаву, ведь раньше только она и была. теперь требуется только котлин.
@dzianishrip5139
@dzianishrip5139 Жыл бұрын
Танкист!
@u_n_d_e_r_s_c_o_r_e_d
@u_n_d_e_r_s_c_o_r_e_d 6 ай бұрын
в чем прикол использовать optional, увеличивая нагрузку, если можно вручную сделать проверку?
@arhitutorials
@arhitutorials 6 ай бұрын
А как узнать, где нужно делать проверку и где не нужно?
@romawar1869
@romawar1869 2 жыл бұрын
это что система удалила 1 мой коментарий или кто то ручками ?
@arhitutorials
@arhitutorials 2 жыл бұрын
Вижу два комментария, ничего не трогал. Пока что все нормально.
@sweetcapitan5690
@sweetcapitan5690 Жыл бұрын
Лучший способ избежать NPE на джаве - перестать писать на джаве и перейти на Котлин)
@arhitutorials
@arhitutorials Жыл бұрын
Особо талантливые девелоперы ловят NPE и на Котлине)
@Eduard.Kardashov
@Eduard.Kardashov Жыл бұрын
тем не менее, очевидно, что Optional ничего не решает в части null safety, и нет никакой разницы возвращается String или Optional, и первое и второе может быть null.. таким образом, все сводится к джентельменскому соглашению, что возвращается не null, но если так, пользы от Optional нет - просто обертка с дополнительными методами и только
@arhitutorials
@arhitutorials Жыл бұрын
Не согласен, это разные вещи. Если из метода может вернутся null и не null, и это является нормальной ситуацией, то тогда везде в коде нужно ставить проверку. И та и другая ситуация не является ошибкой. Если из метода возвращается Optional, то наличие там null вместо Optional нормальной ситуацией не является. Проверок ставить не нужно, приложение должно падать.
@Eduard.Kardashov
@Eduard.Kardashov Жыл бұрын
@@arhitutorials не понял в чем не согласен, все тобой написанное никак не противоречит, написанному мной
@SERGEYSUKHOTSKIY
@SERGEYSUKHOTSKIY 2 жыл бұрын
Что за чушь.... Null это не проблема а возможность. Если там по ссылке чего то нет - это информация и тупо ее скрывать не лучший вариант. Нормальные IDE (типа Eclipse) это показывают в простых случаях - когда ты обращаешься к не инициализарованной переменной. Во всех иных случаях это сигнал, что что-то пошло не так, и он должен быть явно обработан. Not nullable переменные это просто заметание мусора под ковер - проблема просто выскочит у тебя в другом месте.
@arhitutorials
@arhitutorials 2 жыл бұрын
Я не предлагаю скрывать null. Я предлагаю, насколько это возможно, писать код так, чтоб null принципиально не мог появится.
@yurybelozerov3610
@yurybelozerov3610 2 жыл бұрын
Абсолютно согласен. Я столкнулся с этой ситуацией, когда перешел на spring boot. Вызывается метод, но ничего не происходит. Оказалось, что spring оборачивает мой код без каких-либо @NotNull и, если видит, что объект == null, то код не выполняется. Хуже не придумаешь, NPE показывает проблему.
@SERGEYSUKHOTSKIY
@SERGEYSUKHOTSKIY 2 жыл бұрын
@@arhitutorials А смысл? Это всего лишь значение, которое о чем-то говорит, точно так же ты мог бы захотеть писать код так, чтобы чтобы у тебя не было скажем значения 2... :-)
@Yornero
@Yornero 2 жыл бұрын
А не расскажешь, что eclipse подскажет при обращении к БД, когда заранее неизвестно, лежит там объект с каким то идентификатором или нет? Если к кэшу. Или к еще целой куче вещей, которые могут что-то вернуть, а могут и не вернуть, потому что нечего. Optional служит не для заметания мусора под ковер, а для удобной работы с объектами, наличие которых опционально и может варьироваться в тот или иной момент времени. Более того, он как раз таки содержит аж целый набор методов, для обработки случаев отсутствия объекта, поэтому к чему тут идут разговоры о заметании мусора под ковер - вообще не ясно
@janedoe6182
@janedoe6182 2 жыл бұрын
В наших квартирах есть розетки и это серьезная проблема. Если в розетку сунуть палец, то может поразить электрическим током. Проблема заложена дизайне электросетей и оборудование обрастает разными шторками, заглушками и диффавтоматами, но все равно, иногда электрик что-либо упускает, и нет-нет да и кто-то попадает под напряжение. В других культурах отказались от розеток и пляшут вокруг костров в набедренных повязках... А представляете, если у вас дома есть молоток? Это же можно себе гвоздь забить в палец?!!! А уксус с ацетоном и марганцовка? Ими же можно напиться и умереть в страшных муках! А еще, в наших домах есть газовые плиты... В общем, null - зло, отсутствие статической типизации - зло... Постойте, а как джаваскрипт стал самым популярным языком на планете? Человечество опасносте, надо его срочно запретить!
@arhitutorials
@arhitutorials 2 жыл бұрын
Джаваскрипт стал популярным, потому что у него нет альтернативы. Другие языки браузеры не понимают. При этом язык не очень удачный. Разработчики вынуждены писать юнит-тесты для проверки того, что в других языках проверяет статическая типизация - это достоинством едва ли можно назвать.
@janedoe6182
@janedoe6182 2 жыл бұрын
@@arhitutorials Бедные, бедные джаваскрипт-разработчики, так сильно страдают, и дни и ночи грезят о лучшем языке.... XD
@arhitutorials
@arhitutorials 2 жыл бұрын
​@@janedoe6182 Именно так. Иначе зачем были созданы TypeScript, CoffeScript и Dart?)
@janedoe6182
@janedoe6182 2 жыл бұрын
@@arhitutorials И как, сильно эти языки, особенно CoffeScript и Dart, обогнали JS по популярности?
@chupa00
@chupa00 2 жыл бұрын
@@janedoe6182 на ts переходят активно
@user-cw9nx3zw3p
@user-cw9nx3zw3p Жыл бұрын
А, в чем проблема добавить проверку на null? Ну, серьёзно! Что за нытье? Ты программист, ты должен писать код,который не падает. Ты должен предусмотреть не только все случаи, но и уж тем более проверки на 0, null, отрицательные значения, провериять если нужно пользовательский ввод...
@arhitutorials
@arhitutorials Жыл бұрын
Если б среднестатистический программист мог все предусмотреть, то багов бы не было. А они есть, причем даже в серьезных продуктах от крутых разработчиков. Раз нельзя полностью избавиться от ошибок в коде, то надо хотя бы принять меры, чтоб их было меньше.
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 10 ай бұрын
Спасибо
@lostus7695
@lostus7695 2 жыл бұрын
Спасибо
Java. Fluent Interface.
6:53
Sergey Arkhipov Java Tutorials
Рет қаралды 5 М.
Java. Разбираемся с монадами.
20:20
Sergey Arkhipov Java Tutorials
Рет қаралды 10 М.
Alat Seru Penolong untuk Mimpi Indah Bayi!
00:31
Let's GLOW! Indonesian
Рет қаралды 13 МЛН
Жайдарман | Туған күн 2024 | Алматы
2:22:55
Jaidarman OFFICIAL / JCI
Рет қаралды 1,5 МЛН
Osman Kalyoncu Sonu Üzücü Saddest Videos Dream Engine 170 #shorts
00:27
Как устроен Android и его приложения.
30:29
Sergey Arkhipov Java Tutorials
Рет қаралды 19 М.
Java. Об Iterator и Iterable c примерами.
16:20
Sergey Arkhipov Java Tutorials
Рет қаралды 23 М.
Hidden Beauties of Java Enums
22:20
Frank Delporte
Рет қаралды 12 М.
Java. Многопоточность. Как устроить Deadlock.
14:39
Sergey Arkhipov Java Tutorials
Рет қаралды 9 М.
Почему нельзя возвращать NULL?
22:11
Sergey Nemchinskiy
Рет қаралды 115 М.
Java. Для чего нужен Optional?
18:26
Sergey Arkhipov Java Tutorials
Рет қаралды 12 М.
Java. Методы equals и hashCode.
15:05
Sergey Arkhipov Java Tutorials
Рет қаралды 37 М.
Alat Seru Penolong untuk Mimpi Indah Bayi!
00:31
Let's GLOW! Indonesian
Рет қаралды 13 МЛН