С проблемой в данном примере я абсолютно согласен. В Java есть такая же проблема, но тут уже идёт работа с типами. И никакие var-ы от случайной невнимательности не спасут.
Проблему я вижу именно в том что бы использовать для такого:
var codefx = new URL("http://codefx.org");
var connection = codefx.openConnection();
var reader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
В данном примере это часто встречаемая конструкция, и тот кто её уже использовал легко поймут, что тут проходит.
Но а если это будет, что-то более редкое. Что-то, что будет казаться автору понятным и легким, а тому кто поддерживает код (в виду обстоятельств) не очевидным, т.к. он не использовал такой конструкции. А потом ещё на это мы наложим проблему правильного именования переменных.
В итоге мы будем иметь красиво форматированный код, но с не очевидным описанием команд.
Другой пример:
Вот пришёл новичок в мир Java уже после релиза Java 10. Разумеется более быстро находимые статьи будут про новые фичи. Почитав он думает — «Ага, зачем мне писать по старому, по новому меньше печатать». (хотя я опять повторюсь, с IDE проблема надумана)
И вот реализует компонент который использует множественное наследование. И по привычке он пишет:
var вася = new Вася();
вместо,
Человек вася = new Вася();
а потом допустим положил в массив.
Какой будет тип у вася, Человек или Вася?
P.S. пост не нацелен оскорбить Василиев, это просто пример.
P.P.S. Может мне не хватает знаний, рассуждать объективно на эту тему, но мне не нравиться, что в угоду не самой объективной проблеме, придумали двухстороний меч.
P.P.P.S. Если проблема кроется у большинства в:
А что относительно читаемости?
Теперь перейдем к читаемости. Несомненно, когда типы отсутствуют, читаемость должна ухудшиться, не так ли? Вообще говоря, да. Когда вы пытаетесь понять, как работает часть кода, типы являются важным компонентом. И даже если бы IDE разработали функции, позволяющие отображать все выведенные типы, это все равно было бы более косвенным, чем если бы они всегда присутствовали в исходнике.
Таким образом, var сразу приносит нам недостаток читаемости и должен компенсировать это. Один из способов — выравнивание имен переменных:
// с явными типами
No no = new No();
AmountIncrease<BigDecimal> more = new BigDecimalAmountIncrease();
HorizontalConnection<LinePosition, LinePosition> jumping =
new HorizontalLinePositionConnection();
Variable variable = new Constant(5);
List<String> names = List.of("Max", "Maria");
// с выведенными типами
var no = new No();
var more = new BigDecimalAmountIncrease();
var jumping = new HorizontalLinePositionConnection();
var variable = new Constant(5);
var names = List.of("Max", "Maria");
Имена типов важны, но имена переменных могут быть важнее. Типы описывают общую концепцию в контексте всей экосистемы Java (для классов JDK), общий вариант использования (библиотека или фреймворк) или бизнес-домен (приложение) и, следовательно, всегда будут иметь общие имена. Переменные, с другой стороны, определены в конкретном и очень малом контексте, в котором их имя может быть очень точным.
С var имена переменных выходят на первый план и выделяются так, как раньше этого не делали, особенно если подсветка кода отмечает ключевое слово и, таким образом, позволяет инстинктивно игнорировать его. Я какое-то время проводил час или два в день, читая Kotlin, и я тут же привык к этому. Это может значительно улучшить читаемость.
Как говорилось выше, другое улучшение читаемости может происходить из-за того, что объявлено больше промежуточных переменных, поскольку это связано со снижением издержек при записи и чтении.
То почему бы не придумать иное форматирование стиля например, \n\t после объявления типа переменной. Тогда всё имена переменных будут тоже в колонку.
Object
obj = new Object();
SuperMegaGigaCoolType
cupCoffee = new SuperMegaGigaCoolType();
Я только учусь Java, и по сути это мой первый языка программирования. Но мне нравится очевидность этого языка. Когда всё расписано(в разумных пределах), а не сокращено до максимума.
Не ужели так много людей пишет в блокноте? Ведь IDE, все проблемы «многословности» легко нивелирует, делая их мнимыми проблемами.
В связи с этим вопрос господа профессионалы, почему вы так не любите очевидность?
Осталось реализовать все остальные датчики, основать стартап, и продаться гугл за много много денег.
Проблему я вижу именно в том что бы использовать для такого:
В данном примере это часто встречаемая конструкция, и тот кто её уже использовал легко поймут, что тут проходит.
Но а если это будет, что-то более редкое. Что-то, что будет казаться автору понятным и легким, а тому кто поддерживает код (в виду обстоятельств) не очевидным, т.к. он не использовал такой конструкции. А потом ещё на это мы наложим проблему правильного именования переменных.
В итоге мы будем иметь красиво форматированный код, но с не очевидным описанием команд.
Другой пример:
Вот пришёл новичок в мир Java уже после релиза Java 10. Разумеется более быстро находимые статьи будут про новые фичи. Почитав он думает — «Ага, зачем мне писать по старому, по новому меньше печатать». (хотя я опять повторюсь, с IDE проблема надумана)
И вот реализует компонент который использует множественное наследование. И по привычке он пишет:
вместо,
а потом допустим положил в массив.
Какой будет тип у вася, Человек или Вася?
P.S. пост не нацелен оскорбить Василиев, это просто пример.
P.P.S. Может мне не хватает знаний, рассуждать объективно на эту тему, но мне не нравиться, что в угоду не самой объективной проблеме, придумали двухстороний меч.
P.P.P.S. Если проблема кроется у большинства в:
Таким образом, var сразу приносит нам недостаток читаемости и должен компенсировать это. Один из способов — выравнивание имен переменных:
Имена типов важны, но имена переменных могут быть важнее. Типы описывают общую концепцию в контексте всей экосистемы Java (для классов JDK), общий вариант использования (библиотека или фреймворк) или бизнес-домен (приложение) и, следовательно, всегда будут иметь общие имена. Переменные, с другой стороны, определены в конкретном и очень малом контексте, в котором их имя может быть очень точным.
С var имена переменных выходят на первый план и выделяются так, как раньше этого не делали, особенно если подсветка кода отмечает ключевое слово и, таким образом, позволяет инстинктивно игнорировать его. Я какое-то время проводил час или два в день, читая Kotlin, и я тут же привык к этому. Это может значительно улучшить читаемость.
Как говорилось выше, другое улучшение читаемости может происходить из-за того, что объявлено больше промежуточных переменных, поскольку это связано со снижением издержек при записи и чтении.
То почему бы не придумать иное форматирование стиля например, \n\t после объявления типа переменной. Тогда всё имена переменных будут тоже в колонку.
Не ужели так много людей пишет в блокноте? Ведь IDE, все проблемы «многословности» легко нивелирует, делая их мнимыми проблемами.
В связи с этим вопрос господа профессионалы, почему вы так не любите очевидность?