Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Java code convention (if, while, for) and {} |
Автор: ci5 15.11.2011, 12:40 | ||||
Собственно и дошло время познакомиться с этим файликом. Многое я выполнял и до этого, но наткнулся на такие вещи, как: Note: if statements always use braces {}. Avoid the following error-prone form: if (condition) //AVOID! THIS OMITS THE BRACES {}! statement; Тоже самое касается цикла for, while. Тоесть
Собственно напрашивается вопрос для чего это надо. По мне табуляция в 4 пробела делает нормальную читабельность. Или другими словами что вы об этом думаете и какая политика у вас в фирме с этим делом? Ну, если не секрет конечно ![]() |
Автор: Alca 15.11.2011, 14:09 | ||
Я ставлю скобки. Добавлено через 52 секунды
|
Автор: kemiisto 15.11.2011, 14:16 | ||||||
Ну всё правильно. Я тоже всегда ставлю. Это частный случай золотого правила программирования, так сказать. Код пишеться с нуля один раз, а правиться миллионы раз. То есть прежде всего надо заботиться о том, чтобы последующие изменения обходились малой кровью. Написали:
Потом захотели добавить в тело цикла ещё что-то, надо добавлять скобки:
А если забыли {} (мало ли бывает, например, параллельно пишем что-то на Python и по невнимательности...)
то получим совсем не то, что ожидаем... |
Автор: Stolzen 15.11.2011, 15:20 |
Поддерживаю - всегда ставлю скобки, даже если после ифа только одна строка. |
Автор: Samotnik 15.11.2011, 15:45 | ||
Если много условий, то без скобок наоборот лучше. Например:
При использовании скобок, код значительно увеличится. Хотя, пожалуй это единственный случай, когда лучше писать без скобок. ИМХО. |
Автор: kemiisto 15.11.2011, 15:51 |
Пример бредовый. Такого в коде вообще быть не должно. |
Автор: Samotnik 15.11.2011, 15:55 |
kemiisto, будет больше опыта в Java программировании - поймёшь, что был не прав ![]() |
Автор: Kangaroo 15.11.2011, 19:47 |
Samotnik, а сколько опыта нужно, чтобы пришло озарения? ![]() |
Автор: toxx 15.11.2011, 20:36 |
Samotnik Для вашего примера свитч со стейтами смотрится приятней, плохой пример =) |
Автор: kemiisto 15.11.2011, 20:38 |
toxx, будет больше опыта в Java программировании - поймёшь, что был не прав ![]() |
Автор: Samotnik 15.11.2011, 20:50 | ||
у кого как ![]() Ситуация: Клиент посылает запрос, один из параметров это название немецкого bundesland. Он приходит в полном виде, например bayern, на сервере в базе также есть bundeslands, но хранятся они в сокращённом формате, например BY. Допустим, нужно самое простое, сделать выборку, подставив значение. При том, что есть куча фильтров, в которых используется это значение. Т.е. нужно либо в каждом методе писать конвертацию внешнего вида bundesland во внутреннюю, либо сделать это один раз, сразу после приёма параметра. Я выбрал второй вариант:
kemiisto, Есть лучше вариант? С радостью послушаю и воспользуюсь. |
Автор: kemiisto 15.11.2011, 21:03 | ||
Если у вас такой код в продакшене, мне вас жаль. Вообще, я с трудум понимаю тех, кто радуется возможности switch'ить по строкам в Java 7. Если у ввас возникла необходимость switch'ить по строкам, у меня для вас плохие новости, как сказать, так сказать. ![]() Тут http://www.xefer.com/2006/12/switchonstring в чистом виде. Заранее фиксированный набор значений. Особенно меня радует вот этот кусок:
То есть вызываем convertBundesland("Ololo Trollolo!") и будьте любезны - в Германии на одну bundesland больше. Или можно ещё завести Map<String, String> и от него плясать. |
Автор: Samotnik 15.11.2011, 21:08 | ||
давай без философии. Конкретно, как ты бы решил проблему? Свитчем по энаму? И что, чем это лучше ифа ?
Я не выкладывал код проверки валидности значений, она в другом месте. Цель была показать место, где нужно применять много ифов. Пример можно ? |
Автор: kemiisto 15.11.2011, 21:39 | ||
На коленках:
get по отсутствующему ключу вернёт null, но корректность ты где-то в другом месте проверяешь, так что я тоже не стал заморачиваться. ![]() |
Автор: Samotnik 15.11.2011, 22:07 |
kemiisto, и что это? У меня 16 bundeslands. В твоём случае это 16 строк кода, чтобы положить значения в хэшмап. В моём коде те же 16 строк, только через StringBuilder, где PROFIT пока не ясно, ну да ладно, допустим, хорошо. Ситуация: с клиента пришли такие bundeslands: bayern, berlin, brandenburg, bremen. Для дальнейшей работы с ними в приложении тебе нужно их сконвертировать во внутренние. Как твой код поможет сделать это? |
Автор: kemiisto 15.11.2011, 22:39 | ||
Я где-то обещал, что строчек будет меньше? Профит тут в том, что сразу ясно, что проиходит на самом деле. Есть множество полных названий земель и множество аббревиатур. Между ними установлено однозначное соответсвие. Что происходит в твоих 16 строчках без вдумчивого анализа не понять. Мне, может, за тебя ещё всю систему написать? ![]() |
Автор: Samotnik 15.11.2011, 22:46 | ||
Конечно задач плёвая, это был хотфиксинг, её нужно было решить в течение 15 минут. Это было давно. Просто тема к слову пришлась, вот отрыл кусок кода. Вообще я спросил в том ракурсе, что твой код лишь демонстрирует твоё умение создавать и заполнять Мэп, а задачу поставленную он вообще не решает. |
Автор: ci5 15.11.2011, 22:51 |
Спасибо. Логику понял. |
Автор: Samotnik 15.11.2011, 22:55 |
Логика в том, что конечно же лучше всегда использовать {}, но бывают случаи 1 из 1000, что иногда для лучшей читабельности лучше обходится без скобок, но это скорее исключение, чем правило. |
Автор: kemiisto 16.11.2011, 00:09 | ||||||
Samotnik, вот ты привязалсо то! ![]()
Устроит? Идею, думаю, ты уловил. ![]()
Опять же повторюсь - ты не показал такого примера. Твой пример неправильный. Ты и сам признаёшь, что эта заплатка, написанная за пару минут абы-как. Я тебя ругать не собираюсь. ![]() Очень похоже на холивар по goto. Там, обычно, мелькают подобные "примеры". |
Автор: Stolzen 16.11.2011, 08:58 |
О ужас, я думал так только студенты первых курсов пишут. +1 к map. |
Автор: jk1 16.11.2011, 09:27 |
Обилие такой условной логики, как правило, указывает на серьезные проблемы с полиморфизмом у автора. На собеседованиях все бодренько так выдают определение, а вот в практике откровенно полиморфное поведение распознать не могут и лепят цепочки if-ов. +1 к enum, на худой конец и map сойдет Возвращаясь к теме, скобки я ставлю. Всегда. Потому что то, что сегодня укладывается в одну строку, завтра разрастается до десятка. |
Автор: Samotnik 16.11.2011, 10:07 | ||
kemiisto, Stolzen, без дешёвых слов "о ужас", "что за бред", "первокурсник" можете нормально объяснить чем способ kemiisto, лучше моего ?
А конкретнее? Что именно полиморфного я понимаю? |
Автор: Stolzen 16.11.2011, 10:56 |
Samotnik, посчитайте, сколько у kemiisto ифов, и сколько у вас. Ваш код непонятен с первого раза, второй код читается легко, и сразу ясно, что в нем происходит. Далее, данные из ассоциативного массива извлекаются за О(1), в то время как для прохождения по цепочке ифов нужно O(N). Удивление вызывает то, что вы - активный участник форума - и постите достаточно наивное решение. |
Автор: Samotnik 16.11.2011, 11:13 | ||
Не удивляйся, иногда даже я делаю ошибки, что тут поделаешь. Все мы люди. Если ты всегда пишешь идеальный код - кинь в меня камень ![]() |
Автор: Samotnik 16.11.2011, 11:33 |
kemiisto, согласен, был не прав,твой алгоритм отрабатывает за 2млс, мой за 113. |