arilou: (Default)
Вышла тут бурная дискуссия с коллегой на тему того, вредны (его мнение) или полезны (моё) checked exceptions. Он ссылался на то, что мол большинство уже пришло к тому, что лучше без них, что возлагавшиеся на них надежды на практике не оправдались, а потому пусть всё (ну или почти всё) будет наследоваться от RuntimeError, и уже на уровне договорённостей следить, чтобы всё ловилось и ловилось вовремя. Мне такой вариант не нравится, мбо сам я пока что за свой не очень большой опыт писания на Java имел от checked exceptions больше пользы, чем неудобств.

Знаю, что есть у меня во френдах джависты не просто "опытнае", а даже "матёрые" ;)
Что скажете?
arilou: (Default)
Ранее я уже высказывал такую концептуальную претензию к языку Java, и на днях снова сплясал по этим граблям.

Синтаксис Java слишком много взял от C++. Якобы для того, чтобы программисты на С++ (точнее, те, кто ничего, кроме С++ не признаёт и не понимает) переходили на Java легко и непринуждённо. Однако при этом в те же одежды синтаксиса порой рядится существенно иная тушка семантики.

На днях я порадовался об обобщённые (универсальные, генерики) методы и классы. Синтаксис мимикрирует под шаблоны C++, однако принципиальное отличие (если я всё верно понял) в том, что генерик-то компилируется ровно один раз и полностью обходится только тем, что ему на тот момент известно, в то время как шаблон на момент инстанцирования знает всё о типах параметров шаблона. Например, может вызвать конструктор объекта типа T (где T — параметр шаблона), обратиться к его статическим полям и методам и т.д.. В случае же джавы этого ничего нет.

И потом, имея, например несколько строк кода, однотипного для двух десятков мелких классов, и использующего в одном месте выражение вида MyClass.class, я, если хочу заменить их обобщённым методом, должен этот самый MyClass.class передавать ещё одним параметром в обобщённый метод. Хотя, казалось бы, из типа использованных параметров ясно, какой там класс в каждом конкретном вызове. (И подумалось, что вообще-то потребность в этом параметре известна на момент компиляции генерика, и он может потребовать, чтобы ему этот параметр при вызове неявно передавали, избавляя человека от лишней писанины.)

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

В общем, моя претензия к джаве в неоправданной мимикрии под C++ лишь окрепла.

Profile

arilou: (Default)
Danil "Eleneldil G. Arilou" Lavrentyuk

February 2023

S M T W T F S
   1234
5678 91011
12131415 161718
192021222324 25
262728    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 23rd, 2025 11:37 am
Powered by Dreamwidth Studios