Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java code convention (if, while, for) and {}, ставите ли вы скобки ?  
:(
    Опции темы
ci5
  Дата 15.11.2011, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.12.2008

Репутация: нет
Всего: нет



Собственно и дошло время познакомиться с этим файликом. Многое я выполнял и до этого, но наткнулся на такие вещи, как: 
Note: if statements always use braces {}. Avoid the following error-prone form:
if (condition) //AVOID! THIS OMITS THE BRACES {}!
statement;

Тоже самое касается цикла for, while. Тоесть 
Код

for (int i=0;i<size;i++) { //хорошо
    System.out.println("i");
}

for (int i=0;i<size;i++)  //плохо
    System.out.println("i");


Код

if (true) { //хорошо
    System.out.println("Hello");
}

if (true)  //плохо
    System.out.println("Hello");


Собственно напрашивается вопрос для чего это надо. По мне табуляция в 4 пробела делает нормальную читабельность. Или другими словами что вы об этом думаете и какая политика у вас в фирме с этим делом? Ну, если не секрет конечно smile 
PM MAIL   Вверх
Alca
Дата 15.11.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Я ставлю скобки.

Добавлено через 52 секунды
Код

for (int i=0;i<size;i++) { //хорошо
    System.out.println("i");
    System.out.println("--------");
}

for (int i=0;i<size;i++)  //плохо
    System.out.println("i");
    System.out.println("--------");



--------------------
PM WWW ICQ Skype Jabber   Вверх
kemiisto
Дата 15.11.2011, 14:16 (ссылка) |  (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Ну всё правильно. Я тоже всегда ставлю. Это частный случай золотого правила программирования, так сказать. Код пишеться с нуля один раз, а правиться миллионы раз. То есть прежде всего надо заботиться о том, чтобы последующие изменения обходились малой кровью. 

Написали:
Код

for (...)
    statement1;


Потом захотели добавить в тело цикла ещё что-то, надо добавлять скобки:
Код

for (...) {
    statement1;
    statement2;
}


А если забыли {} (мало ли бывает, например, параллельно пишем что-то на Python и по невнимательности...)
Код

for (...)
    statement1;
    statement2

то получим совсем не то, что ожидаем...


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Stolzen
Дата 15.11.2011, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Поддерживаю - всегда ставлю скобки, даже если после ифа только одна строка.


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Дрон
Дата 15.11.2011, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 92



Цитата(ci5 @  15.11.2011,  13:40 Найти цитируемый пост)
Или другими словами что вы об этом думаете и какая политика у вас в фирме с этим делом?

Ставим скобки даже если одна строка.
Правда я иногда себе позволяю не ставить скобки в if с управляющими (или как их по-русски) операторами return, continue, break, ну и иногда throw, если он простой.


Цитата(ci5 @  15.11.2011,  13:40 Найти цитируемый пост)
 По мне табуляция в 4 пробела делает нормальную читабельность.

Как правильно сказал kemiisto код не только пишется и читается, но ещё и редактируется.

Это сообщение отредактировал(а) Дрон - 15.11.2011, 15:22


--------------------
Да. Именно так.
PM   Вверх
Samotnik
Дата 15.11.2011, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Если много условий, то без скобок наоборот лучше. Например:
Код

if (1)  System.out.println("1");
if (2)  System.out.println("2");
if (3)  System.out.println("3");
if (4)  System.out.println("4");
if (5)  System.out.println("5");
if (6)  System.out.println("6");
if (7)  System.out.println("7");
if (8)  System.out.println("8");
if (9)  System.out.println("9");
if (10)  System.out.println("10");

При использовании скобок, код значительно увеличится. Хотя, пожалуй это единственный случай, когда лучше писать без скобок. ИМХО.
PM MAIL   Вверх
kemiisto
Дата 15.11.2011, 15:51 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Цитата(Samotnik @  15.11.2011,  14:45 Найти цитируемый пост)
Например

Пример бредовый. Такого в коде вообще быть не должно.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Samotnik
Дата 15.11.2011, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



kemiisto,  будет больше опыта в Java программировании - поймёшь, что был не прав  smile 
PM MAIL   Вверх
Kangaroo
Дата 15.11.2011, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Samotnik, а сколько опыта нужно, чтобы пришло озарения? smile Где ты такое писал в реальном проекте?


--------------------
Lost....
PM MAIL MSN   Вверх
toxx
Дата 15.11.2011, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 1
Всего: 13



Samotnik
Для вашего примера свитч со стейтами смотрится приятней, плохой пример =)
PM MAIL   Вверх
kemiisto
  Дата 15.11.2011, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



toxx, будет больше опыта в Java программировании - поймёшь, что был не прав smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Samotnik
Дата 15.11.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(Kangaroo @  15.11.2011,  19:47 Найти цитируемый пост)
сколько опыта нужно, чтобы пришло озарения?

у кого как  smile 
Цитата(Kangaroo @  15.11.2011,  19:47 Найти цитируемый пост)
Где ты такое писал в реальном проекте? 

Ситуация: Клиент посылает запрос, один из параметров это название немецкого bundesland. Он приходит в полном виде, например bayern, на сервере в базе также есть bundeslands, но хранятся они в сокращённом формате, например BY. Допустим, нужно самое простое, сделать выборку, подставив значение. При том, что есть куча фильтров, в которых используется это значение. Т.е. нужно либо в каждом методе писать конвертацию внешнего вида bundesland во внутреннюю, либо сделать это один раз, сразу после приёма параметра. Я выбрал второй вариант:
Код

    private String convertBundesland(String bundesland) {
        if (bundesland != null && !bundesland.isEmpty()) {
            String[] bundeslands = bundesland.split(SPLIT_TOKEN);
            StringBuilder bundeslandList = new StringBuilder();
            for (String str : bundeslands) {
                if (str.equals(EBundesland.BW.getLocalName())) bundeslandList.append(EBundesland.BW.getName());
                else if (str.equals(EBundesland.BY.getLocalName())) bundeslandList.append(EBundesland.BY.getName());
                else if (str.equals(EBundesland.BE.getLocalName())) bundeslandList.append(EBundesland.BE.getName());
                else if (str.equals(EBundesland.BB.getLocalName())) bundeslandList.append(EBundesland.BB.getName());
                else if (str.equals(EBundesland.HB.getLocalName())) bundeslandList.append(EBundesland.HB.getName());
                else if (str.equals(EBundesland.HH.getLocalName())) bundeslandList.append(EBundesland.HH.getName());
                else if (str.equals(EBundesland.HE.getLocalName())) bundeslandList.append(EBundesland.HE.getName());
                else if (str.equals(EBundesland.MV.getLocalName())) bundeslandList.append(EBundesland.MV.getName());
                else if (str.equals(EBundesland.NI.getLocalName())) bundeslandList.append(EBundesland.NI.getName());
                else if (str.equals(EBundesland.NW.getLocalName())) bundeslandList.append(EBundesland.NW.getName());
                else if (str.equals(EBundesland.RP.getLocalName())) bundeslandList.append(EBundesland.RP.getName());
                else if (str.equals(EBundesland.SL.getLocalName())) bundeslandList.append(EBundesland.SL.getName());
                else if (str.equals(EBundesland.SN.getLocalName())) bundeslandList.append(EBundesland.SN.getName());
                else if (str.equals(EBundesland.ST.getLocalName())) bundeslandList.append(EBundesland.ST.getName());
                else if (str.equals(EBundesland.SH.getLocalName())) bundeslandList.append(EBundesland.SH.getName());
                else if (str.equals(EBundesland.TH.getLocalName())) bundeslandList.append(EBundesland.TH.getName());
                else bundeslandList.append(str);
                bundeslandList.append(",");
            }
            return bundeslandList.toString();
        } else {
            return bundesland;
        }
    }

kemiisto,  Есть лучше вариант?  С радостью послушаю и воспользуюсь.
PM MAIL   Вверх
kemiisto
Дата 15.11.2011, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Если у вас такой код в продакшене, мне вас жаль. Вообще, я с трудум понимаю тех, кто радуется возможности switch'ить по строкам в Java 7. Если у ввас возникла необходимость switch'ить по строкам, у меня для вас плохие новости, как сказать, так сказать. smile 

Тут enum'ы в чистом виде. Заранее фиксированный набор значений. Особенно меня радует вот этот кусок:
Код

else bundeslandList.append(str);


То есть вызываем convertBundesland("Ololo Trollolo!") и будьте любезны - в Германии на одну bundesland больше.

Или можно ещё завести Map<String, String> и от него плясать.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Samotnik
Дата 15.11.2011, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(kemiisto @  15.11.2011,  21:03 Найти цитируемый пост)
Если у вас такой код в продакшене, мне вас жаль

давай без философии. Конкретно, как ты бы решил проблему? Свитчем по энаму?  И что, чем это лучше ифа ?
Цитата(kemiisto @  15.11.2011,  21:03 Найти цитируемый пост)
То есть вызываем convertBundesland("Ololo Trollolo!") и будьте любезны - в Германии на одну bundesland больше.

Я не выкладывал код проверки валидности значений, она в другом месте. Цель была показать место, где нужно применять много ифов. 
Цитата(kemiisto @  15.11.2011,  21:03 Найти цитируемый пост)
Или можно ещё завести Map<String, String> и от него плясать.

Пример можно ?
PM MAIL   Вверх
kemiisto
Дата 15.11.2011, 21:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Цитата(Samotnik @  15.11.2011,  20:08 Найти цитируемый пост)
Пример можно ? 

На коленках:
Код

import java.util.HashMap;
import java.util.Map;

public class App {

    public static void main(String[] args) {
        // 1. Create a map!
        Map<String, String> map = new HashMap<String, String>();
        // 2. Fill it out!
        map.put("BW", "Baden-Württemberg");
        map.put("BY", "Bayern");
        map.put("Ololo", "Trollolo");
        // 3. ???
        // 4. PROFIT!!!111
        System.out.println(map.get("BY"));
        System.out.println(map.get("BA"));
    }
}


get по отсутствующему ключу вернёт null, но корректность ты где-то в другом месте проверяешь, так что я тоже не стал заморачиваться. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1092 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.