Одну из задач (которая была решена и принята сервером) я реализовал в виде кода (забил * и X-ми чтобы не спойлерить).
/* xxx
1. Считывать строки(параметры) с консоли, пока пользователь не введет пустую строку(Enter).
2. Каждый параметр соответствует имени ***.
Для каждого параметра:
3. Создать объект *** класса ***, который равен *** из getX(String параметр).
4. Вывести на экран toString().
*/
public class Solution
{
public static void main(String[] args) throws Exception
{
//Add your code here
List al= new ArrayList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str;
while(!"".equals(str = reader.readLine())) al.add(str);
for (int i = 0; i
Зашедший в гости полузнакомый раскритиковал, что так не пишут (это тебе не C и т.п.).
Не подскажете в чем я не прав (есть какие нормы и общепринятые стандарты) ?
Или использование в одной строчке нескольких конструкций (оно вообще, без промежуточных присваиваний временным переменным, может привести в каких-либо ситуациях к каким-либо возможным последствиям?) - дурной тон?
Основные переменные (al, reader, str) объявлены до их использования (pascal-стиль), так как мне удобнее, всегда знаешь где можешь найти описание переменной с возможным комментарием.
Вспомогательные переменные объявлены в нужной зоне видимости (как переменная цикла i).
Idea не ругается, правда предлагает 2 опции:
Split into declaration and assigment (таки разделить объявление и присваивание) и заключить некоторые участки в блок try.
Как бы Вы правильнее написали код?
Что не так?
Для такой задачи не стоит комментировать каждую строчку.
я предпочел бы заменить на:
Названия переменных типа «а1» суть зло ))
Вопрос — а зачем обрамлять в {} если один оператор? На случай будущих кодовых вставок в тело цикла? Или распространенные сторонние инструменты анализа кода для будущего рефакторинга не распознают?
Но таким образом ведь мы лишаем себя видеть дополнительную пару строк кода в текущей области окна редактора кода.
И еще вопрос (с точки зрения прекомпиляции и используемой памяти): обе конструкции генерируют одинаковый байт-код и одинаково расходуют память?
Такое не грех и в одну строку записать. Т.е. когда конструкция крайне проста.
Переменная al и а1. В некоторых шрифтах разницу не заметить. Я вот не заметил.
Такое
ну тоже не в одну строчку… и покрасивше… Я такое видел в «решениях», но мне не очень нравится.
ИМХО красивее было бы что-то типа:
Но, не настаиваю. Тут всё-таки мы в вторгаемся в тему предпочтений, а тут кому как )
Нет пределов совершенству
опасно! а если reader.readLine() вдруг вернет null?
Всегда лучше сравнивать строковую переменную с константой так:
, тогда гарантированно не поймаете NullPointerException, так как equals() вызовется на точно существующем объекте «someConstantString»
имеет больше прав на существование :-)
— если результат улучшает общую читабельность кода и меньше 80 символов, то можно записать в одну строку без фигурных скобок;
— если же нужно разместить на нескольких строках, то всегда следует использовать фигурные скобки.
в виде
Из-за отступа сразу видна зависимость оператора (от шапки цикла, условия...)
P.S. Все это субъективно + если работаете в коллективе могут быть наложены и свои правила.