LINUX.ORG.RU

подожди еще 20 лет, жаба для этого слишком молода.

ps. там для тернарки компилятор не может адекватно вывести тип, а ты auto

Deleted
()

потому что тогда это будут кресты?

darkenshvein ★★★★★
()

Потому что дизайнеры языка считают это ненужным.

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

емнип не скомпилируется:

List<Integer> first = null;
List<Integer> list = first == null? Collections.emptyList() : first;

и там еще много приятных случаев (напр. http://stackoverflow.com/questions/12108998/wrong-return-type-when-using-if-v... )

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Мне кажется, что длинные типовые конструкции заворачиваются в классы. Так же накал страстей сильно сбивает автокомплит.

anonymous
()

На сколько я знаю, в основном по идеологическим причинам: явный тип есть тот тип, который задуман программистом, а не который получился по факту. Тип выражения на самом деле и так выводится, просто он сравнивается с указанным типом, и в случае не совпадения выдается ошибка. Типа это более безопасный подход. Но имхо все это спорно и возможно когда-нибудь добавят и вывод типов, но точно не скоро, это же java :)

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 1)
Ответ на: комментарий от Deleted

Это как бы не особо в тему вопроса. Тип выражения справа от знака равно вычисляется без типа в объявлении. Т.е. будет там auto или что-то другое абсолютно ни на что не влияет. auto просто забирает тип rhs в lhs.

Так, например, ошибки будут в обеих строках на C++:

true ? "literal" : 1;
auto trash = true ? "literal" : 1;

xaizek ★★★★★
()

Потому что так (не) захотели авторы языка.

PolarFox ★★★★★
()

Ну, по типу auto в крестах.

Блджад, ну не удобно же эти ваши ауто читать. Какой укуренный чудак его придумал?

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

Блджад, ну не удобно же эти ваши ауто читать

оно удобно при инициализации простым выражением (литерал, или переменная, например). иногда вызовом функции

MyTrooName ★★★★★
()

Потому что auto или var это зло, и им не место в строго типизированном Объектно-Ориениированном языке.

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

Для этого typedef вообще-то придумали.

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

Ну так это, «программисты» на JavaScript и PHP дорвались до плюсов, и притащили с собой свое говно.

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

Нужно же было как-то избавляться от my_lovely_namespace::class_of_shit<another_damn_class>::iterator

Не нужно. Читаешь код и них** не понятно, «кто на ком стоял». Вызывается какая-то функция, ее результат суется в auto. Потом по этому auto пускается цикл, к лучшему значению прибавляется 42 и возвращается из метода. Ах да, метод возвращает auto. Красота, чо.

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

Когда пишутся такие простыни, тоже иногда не очень удобно читать. Анон выше прав, в таком случае typedef, например, отлично подойдёт.

Deleted
()

Потому что жабу не разрабатывали и не предназначали для compile-time обобщенного программирования, а без этого auto особо и не нужен.

hlebushek ★★
()
Ответ на: комментарий от php-coder

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

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

Скорее программисты на всяких Haskell и пр. функциональных языках. Оттуда новые фичи плюсов(с поправкой на императивность и «низкоуровневость»).

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

Раньше джависты так и о лямбдах говорили. Ничего, добавили. Добавят и вывод типов когда-нибудь.

anonymous
()

Ну вот, например, такая ситуация. С седьмой джавы можно писать как-то так.

List<Yoba> yoby = new ArrayList<>();
А если добавить auto, то будет
auto yoby = new ArrayList<>();
И получится (Array?)List<Object>, и даже в рантайме нельзя его специализировать.

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

Ничто, конечно, но как-то это непоследовательно.

anonymous
()

Потому, что Eclipse с IDEA самоубивались.
При тестировании auto жаба раздувалась, впадала в кому и сжигала ядра.

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

В отстутствии локальной проверки типов. Такой код не взлетит:

List<Yoba> yoby = new ArrayList<>();
yoby.add(new Dildo());
А если yoby будет List<Object> то вполне.

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

В отстутствии локальной проверки типов.

В каком месте она отсутствует?

А если yoby будет List<Object> то вполне.

И в чем проблема?

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

Проблема в использовании auto с diamond types.

Конкретнее можно? Вроде все вполне хорошо выводится.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.