Pull to refresh

Comments 23

Спасибо за статью, лишний раз напомнить себе о внимательности не помешает. Кроме того многое из описанного так же может и будет попадаться и в других языках.

Вот из-за таких проблем как в первом примере с точкой запятой после if — надо всегда ставить открывающую скобку на той же строчке, что if и всегда ставить после if фигурные скобки, даже если дальше только одна строка.

boolean myBool = false;
if(myBool = true) System.out.println(myBool);


Не надо в условии bool сравнивать с bool

Также, в большинстве случаев стоит работать с final явно. Либо переходить на Котлин.

А можно спросить, что из этого ошибки, если это всё — вполне описанное поведение языка?
Придирка к опечаткам уровня «не там поставил точку с запятой» — выглядят совсем странными.
Попалась задачка на поиск косяков в коде. В числе прочего был такой отрывок:
        while (fileInputStream.available() > 0);
        {
            int data = fileInputStream.read();
            fileOutputStream.write(data);
            count++;
        }
Пока не запустил отладку, так и не понял, почему программа уходит в туман…
nicholas_k, Благодарю за комментарий. Нет не надо «Не надо в условии bool сравнивать с bool». Только вы о чем? Пожалуйста, прочитайте внимательно. Речь идет о присвоении переменной значения true в условии if. Это не ошибка, но такой прием следует использовать с осторожностью. Лучше вообще не использовать.

roman901, Благодарю за комментарий. Цель публикации не придирки к опечаткам. Дан конкретный пример, где опечатку бывает сложно с первого взгляда определить.


Igor_ku, Спасибо за полезный комментарий.
Согласен с вами. Но, не все используют Idea. Часто программисту приходится использовать собственное внимание и аккуратность.
Возможно я недостаточно внимательно прочел, поправьте, если я неправ.

Насколько я понял, имелась в виду ошибка, когда вместо
if(bool == true){}
мы пишем
if(bool = true){}


Дело в том, что такая ошибка возможна только с типом bool(Boolean), с любым другим не скомпилируется. Но дело в том, что выражение
 if(bool == true){}
совершенно эквивалентно выражению
if(bool){}
.

При таком раскладе мы не только пишем меньше кода, но и получаем более читабельный код, особенно если используем общепринятое именование булевых переменных по типу isSomethingChecked.
Да просто автор неудачно выбрал тип в своем примере. Взял бы int — и возражений бы не было:
int myInt = 0;
if (myInt = 5) {} // вайвайвай!

В джаве такое просто не скомпилируется.

Довольно странные у вас получились ошибки.
Присвоение в условии вместо сравнения, Инициализация переменных

и опечатку в виде пустого if вообще распознаёт Idea. Ну а все остальные либо специфика языка, либо довольно понятные ошибки. Для начинающего java'ста это наверное самые малые проблемы, которые только можно придумать :)
nicholas_k, Спасибо за комментарий. Нет вы всё поняли правильно. Это я не достаточно ясно написал. Постараюсь дополнить. Речь идет не о if(bool == true){}, а именно о присвоении переменной значения переменной в условии. Пример: (bOol = true), переменной bOol присваиваем значение true, оператор () возвращает значение переменной, после присвоения. И тд.
Упоминание Java 8 улыбнуло, учитывая, что примеры из статьи отдают началом 2000-х.
Suvitruf, это вопрос или утверждение? Мне вам обязательно отвечать, или это оффтоп?

PS. Правильно поставленный вопрос, уже половина ответа. Как говорится: «Торг здесь не уместен».

Хорошо, что наконец-то статья по Java. Плохо, что статья уровня Pre-Junior

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

Насчёт того, что можно сделать метод, название которого такое же как у класса и перепутать его с конструктором. Первое, что говорят про методы в java это то, что название метода должно начинаться с маленькой буквы. Первое, что говорят про классы это то, что название класса должно начинаться с большой буквы. Поэтому как правило проблема описанная в статье на практике не встречается.

UFO just landed and posted this here

На хабре конкурс статей на тему "как я пытался hello world в первый раз" что ли?

У вас опечатка: char (символ Unicode, 2 байта, [0, 65536]) -> 65535
Будьте внимательны, раз уж про ошибки пишите :)
million, спасибо, вы правы поправил [0, 65536[. Это тоже важно, поскольку может ввести новичков в заблуждение.
Sign up to leave a comment.

Articles