LINUX.ORG.RU

Зачем нужен var в Java?

 , ,


1

2

Как многие уже знают, в Java решили ввести ключевое слово var. Драма разыгралась неслабая (хотя бы на хабре), но никто ещё не смог придумать случай, в котором этот var вообще имеет смысл использовать. Может, хотя бы здесь кто-то всё-таки сможет привести подобный пример?

★★★★

Ответ на: комментарий от anon1984

Ну дак надо выделять и читать доп. инфу, вместо того чтобы не делать ничего. Из адекватного применения var результат должен быть просто очевиден. По дефолту. И не нужно никуда лезть. Да и не всегда есть любимая идешечка под рукой. Да и не обязательно редактировать, бывает нужно просто прочитать и понять код. Понять и простить. А если еще размер кода не большой огромной, то и сливать реп будет западло, можно ж просто почитать с гитхаба/битбакета/etc.

znenyegvkby
()
Ответ на: комментарий от znenyegvkby

Не буду спорить, возможно. В лагере динамики, например, аннотаций типов чаще всего вообще нет, и ничего, ревьюят код, и восстанавливают семантику из наименований переменных и методов (и еще тестов). В случае джавы, типы будут объявлены в сигнатуре метода, даже если внутри одни var/val. А метод, известно, не рекомендуют делать выше одного экрана, значит и запутаться там трудно.

anon1984
()

Ого, неужели больше не увидим Kukarek<kokoko> kukarek = new Kukarek<kokoko>? Мир никогда уже не будет прежним.

anonymous
()
Ответ на: комментарий от anon1984

Смешно конечно наблюдать, как у ынтырпрайсеров подгорает от локального вывода типов. Какой чудовищно запутанный код: var foo = new Foo(); Вар какой-то... Шо же это за фу будет? Надо лезть в код смотреть.. Напридумывают кококо хипстота кококо а людЯм потом житья нету кудкудах!

anonymous
()
Ответ на: комментарий от anonymous

Подгорает, и ладно. Каждый имеет право на мнение, лишь бы диалог был конструктивным, а не:

Напридумывают кококо хипстота

У меня, например, подгорает от многословности и DI (зачем уродовать код, если в тестах можно мочить и манкипатчить?), но я просто туда не лезу.

anon1984
()
Ответ на: комментарий от cdshines

то твоя личная, раз ты не смог сделать так, чтобы в гайдлайнах ясно было написано

по твоим словам кто не тимлидер тот фуфло 8)

Deleted
()
Ответ на: комментарий от alix

var даёт нам нечитабельную кашу а-ля Scala\Groovy.
Намного лучше было бы примерно вот так:

     OutputStream unbufOut = .getOutputStream(sock);

I60R ★★
()
Ответ на: комментарий от I60R

var даёт нам нечитабельную кашу а-ля Scala\Groovy.

Чушь, он наоборот улучшает читабельность, при условии адекватного применения. В случае примера автора — он не нужен вообще.

Намного лучше было бы примерно вот так:

А вы знаете толк в извращениях.

znenyegvkby
()
Ответ на: комментарий от vertexua

Меня оно сбивает с толку.
На первом месте привычнее видеть название класса, а не синтаксический мусор типа var,val,let...

I60R ★★
()
Ответ на: комментарий от znenyegvkby

А вы знаете толк в извращениях.

Конечно пример очень беглый, но новое ключевое слово var — тоже уродливое извращение, мозолящее глаза

I60R ★★
()
Последнее исправление: I60R (всего исправлений: 2)
Ответ на: комментарий от anonymous

Потом ещё придётся скастовать someMap к HashMap<Integer, String>

I60R ★★
()
Ответ на: комментарий от I60R

Но почему мозолящее? Тот же банальный пример с созданием экземпляра.

ThereIsVeryLongName tivln = new ThereIsVeryLongName();
var tivln = new ThereIsVeryLongName();
Ну зачем вам два раза читать одно и тоже, если в данной ситуации вы уверены что получите в результате. В этом основной поинт var, он применяется только тогда, когда клиент уверен в результате. И это улучшает читаемость, ибо мозг просто связывает ключевое слово и результат. Или вопрос в том, что чем меньше сахара, тем лучше восприятие кода? Я так не думаю. Эволюции языка как бы нам на это намекают.

znenyegvkby
()
Ответ на: комментарий от cdshines

Ты опять не с той стороны заходишь к проблеме.

Deleted
()
Ответ на: комментарий от cdshines

а что, припекло-таки?

Да. У меня бомбит от «программистов», пишущих var и лямбды вместо лупов. А когда что-то идет не так, ой, а я не знаю почему, вроде должно работать... и дебаггер не дебажит лямбды, ой, надо анролить их и переписывать ой ой новые технологии кококо

unt1tled ★★★★
()

Как-то странно получается.

Раньше писали так: Map<String, Object> map = new HashMap<String, Object>.

Теперь можно писать таким макаром: Map<String, Object> map = new HashMap<>.

Но можно ли будет писать так? var map = new HashMap<>

Если да, то на выходе имеем нечитаемую гадость вместо кода. Если нет, то польза от нового ключего слова стремится к нулю, ибо выходит, что две концепции языка не стыкуются: var и «бриллиантовый оператор».

Вывод — не нужно. Если уж так хотят новое ключевое слово ввести, то пусть воскрешают goto, всяко больше толку будет.

CARS ★★★★
()
Ответ на: комментарий от Deleted

Потому что по этому говну уже оценивают компетентность программистов. А когда в твоем городе таких борцунов за новые технологии вдруг оказывается 90%, потому что нормально писать код они не осилили, а лямбду нагуглить это как 2 пальца, а клиент лох, он будет платить до посинения, потому что уйти некуда. Вот так вот рыночек порешает.

Сидишь и тихо ненавидишь рукожопых обезьян.

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

О, да тебе давно пора быть архитектором, ведь ты отлично знаешь, как должно быть «правильно». Какое тебе дело до каких-то там оценивальщиков?

anon1984
()
Ответ на: комментарий от anon1984

Причем тут архитектура приложения? За архитекторов аля «у нас микросервисы» я отдельно могу рассказать. Дело мне есть до индустрии и до того, во что она скатывается благодаря понаползшей невесть откуда хипстоты без мозгов.

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

Обычно совет архитекторов формулирует кодстайл и требования к набираемым разрабам. Если ты знаешь как правильно, и твои решения положительно влияют на проект, к тебе же всяко будут прислушиваться? Или ты граф Толстой только на словах?

anon1984
()
Ответ на: комментарий от znenyegvkby

потому что, когда я вижу на новой строчке слово с маленькой буквы (как в случае с var), то я ожидаю увидеть либо примитивный тип, либо ключевое слово; а тут аж целое присвоение чего-то взятого откуда-то.
А при присвоении я привык видеть на первом месте тип.
Ломает привычки и логику + выглядит некрасиво (хоть и кода меньше, да).
А ещё и var будет путать выходцев из JS.
Сразу видно — над синтаксисом не думали, а решили сделать как в C++ (или где оно там появилось).
Решение выглядит не солидно — многим не нравится, не зря.

Особенно этот контраст бросается в глаза рядом с diamond expression:

List<String> l = new LinkedList<>();

Где лишний текст упразднили с правой стороны.
А здесь упразднили с левой + добавили новую сущность — var.
Ну это ли не идиотизм?
Вот например следующие решения (хотя self сменить на что-то другое надо)

SomeClass someClass = new self(param, param);
OtherClass otherClass = self.getInstance();
не ломают привычное восприятие и не позволяют писать лапшу, в которой без IDE с толковым автокомплитом и документации не разберёшься. Да ещё и защита от идиота — как бонус

I60R ★★
()
Ответ на: комментарий от unt1tled

Потому что по этому говну уже оценивают компетентность программистов.

Ага, вот где собака порылась. Старперистый гуру начинает сдавать позиции на рынке труда молодым макакам. Ха-ха-ха! Пора уже осваивать мирную профессию для старикашек, дедуля.

anonymous
()
Ответ на: комментарий от CARS

Вот, дико плюсую. Сам об этой проблеме (и возможном решении) постом выше написал.

I60R ★★
()
Ответ на: комментарий от znenyegvkby

Все зависит от конкретного разработчика:

var strMap = new HashMap<String, String>();
Здесь «var» смотрится уместным

А вот в такого здесь

var o = MyStorage.instance().defaultObject();


Придется поломать голову какого типа будет "o", а если под рукой есть только фрагмент кода то и вообще не понять.
zaz ★★★★
()
Ответ на: комментарий от zaz

Придется поломать голову какого типа будет «o»

У вас IDE не показывает что-ли тип возвращаемого значения? Или ты пишешь в блокноте?

anonymous
()
Ответ на: комментарий от anonymous

Озадачивает обилие жабистов, цепляющихся за унылый бойлерплейт в инициализации. Вы такие одноклеточные утята, что не можете просечь контекст даже с помощью IDE? Или вам платят побайтно?

anonymous
()
Ответ на: комментарий от EXL

Ты потроллить пришел или тоже пишешь на жабе в блокноте? Расскажи тогда, как ты без var ручками выводишь тип для foo().bar().baz()? Грепаешь исходники?

anonymous
()
Ответ на: комментарий от EXL

В имаксе не осилили даже хинты по сигнатурам? Фейспалм.

anonymous
()
Ответ на: комментарий от Deleted

[offtopic]Почему с тебя сняли модератоские полномочия и погасили одну звезду? Напши в личку, please.[/offtopic]

EXL ★★★★★
()
Ответ на: комментарий от I60R

потому что, когда я вижу на новой строчке слово с маленькой буквы (как в случае с var), то я ожидаю увидеть либо примитивный тип, либо ключевое слово

[шланг_mode]А вы что видите? Ключевое слово языка :)[/шланг_mode]

а тут аж целое присвоение чего-то взятого откуда-то.

Вы драматизируете. Все не так страшно, если разобраться.

А при присвоении я привык видеть на первом месте тип.

Укоренение в привычках — не есть хорошо. Все меняется, в том числе и ЯП, поэтому нужно держать нос по ветру. Без исключений.

А здесь упразднили с левой + добавили новую сущность — var.

Когда вы найдете применение инструменту, то начнете им активно пользоваться. Если вы не видите возможностей для применения — это еще не значит что их нет.

Вот например следующие решения (хотя self сменить на что-то другое надо)

Ну вам то, конечно же, виднее как лучше.

znenyegvkby
()
Ответ на: комментарий от anonymous

Вывод типов придумал Гейтс

Чёё? Джопс же!

anonymous
()
Ответ на: комментарий от zaz

Ну о чем речь. Нужно просто адекватно применять инструмент, а не как попало. По кривой логике некоторых товарисчей не только var не нужен, но и жаба не нужна в-принципе.

znenyegvkby
()
Ответ на: комментарий от znenyegvkby

Когда вы найдете применение инструменту, то начнете им активно пользоваться. Если вы не видите возможностей для применения — это еще не значит что их нет.

Об этом, собственно, и трэд. В процессе дискуссии только один повод для применения var нашёлся, да и тот сомнительный - сэкономить несколько байт и движений пальцев, когда создаёшь новый объект при помощи new. Если видишь ещё варианты - приводи примеры, я реально хочу знать, чем мне это нововведение может пригодиться.

alix ★★★★
() автор топика
Ответ на: комментарий от alix

Вам выше уже написали, а вообще в jpe это кратно описано. В разделе «Цели». Там и про циклы, ЕМНИП, тоже сказано. Уже вроде бы здесь писали про них. Тоже удобно. Но в иссуях у него пока статус CANDIDATE, так что горевать или веселиться (кому как) пока рано :)

znenyegvkby
()

Отсюда и главная претензия к var — риск снижения читабельности. На практике мы «понимаем» код во многом благодаря трем составляющим: типы переменных, имена переменных, и имена методов. Повсеместное (а в худшем случае — бездумное) использование var, уничтожит первую из них. Для поддержания читабельности на том же уровне, придется больше внимания уделять именам методов, так как их вклад в восприятие кода значительно возрастет.

getNumberOfSkinCareEligibleItemsWithinTransaction

превратится в

getIntegerNumberOfSkinCareEligibleItemsWithinTransaction

это неприемлемо!

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 4)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.