Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > расстановка {}


Автор: MAKCim 5.3.2006, 18:16
Всем привет!
вопрос конечно детский но все же
какая на ваш взгляд расстановка скобок в коде делает его более удобночитаемым? smile
1.
Код

int F() {
    int a=1, b=5;
    if (a<b) {
        switch (a) {
            case 0: return 1;
            case 1: return 0;
        }
    }
}

2.
Код

int F()
{
    int a=1, b=5;
    if (a<b)
    {
        switch (a)
        {
            case 0: return 1;
            case 1: return 0;
        }
    }
}

сам склоняюсь к варианту 2

Автор: Void 5.3.2006, 18:26
http://forum.vingrad.ru/index.php?showtopic=73954 такой опрос. Выяснилось, что большинство также предпочитает вариант 2.

Автор: Cr@$h 5.3.2006, 20:42
Думаю, первый предпочитают Java-программисты, а второй -- С/С++/С#. Па крайней мере, большинство редакторов так заточено по умолчанию. Самому не нравятся оба варианта. Люблю так:
Код

int F()
    int a=1, b=5;
    if (a<b)
        switch (a)
            case 0: return 1;
            case 1: return 0;
        end switch
    end if
end function

Все равно эти end'ы писаться автоматически будут, а читаемость для меня повышается резко. ИМХО. Не люблю я в этом смысле "птичьи" языки.

Автор: Void 5.3.2006, 23:29
Cr@$h +1, только я бы для ИЯ предпочел блоки do..end, без явного указания, какой блок закрывается. Т.е. что-то больше похожее на синтаксис Модулы или Оберона.

Автор: MAKCim 6.3.2006, 08:37
Цитата

Был такой опрос.

намек понял smile

Автор: Cr@$h 6.3.2006, 13:39
Цитата(Void @ 6.3.2006, 00:29 Найти цитируемый пост)
только я бы для ИЯ предпочел блоки do..end, без явного указания, какой блок закрывается. Т.е. что-то больше похожее на синтаксис Модулы или Оберона.

Ну,.. крылья другие, птица та же. Здесь у меня такие мнения: не хочу писать начало блока типа: begin, {. Ведь началом блока является сама конструкция. Плюс begin может заставить вынуждат делать лишние или нестандартные отступления. Появятся конструкции с несколькими блоками -- пожалуйста. Считаю полезным в end'е писать название конструкции, а то следующие коды по практичности одинаковы:
Код

            end
        end
    end
end


Код

            }
        }
    }
}


Более того, полезно уметь давать конструкции имя
Код

for( ... )
    inner: for( ... )
        for( ... )
            ...
            if( ... )
                continue inner
            ...
        end for
    end for inner
end for

Автор: nerezus 10.9.2006, 12:49
Я { скобки в объявлении классов и функций пишу с новой строки.
В остальных местах - в джава-стиле  smile 

Автор: Sardar 10.9.2006, 16:30
Не люблю begin/end, do/end и прочие. Глазу проще различить (даже с подсветкой) ключевое слово от скобок и подобного, отсюда люблю С'подобные языки. По сабжу, первый вариант, если приходиться читать второй, то в редакторе ре-форматирую в первый.

Автор: Cr@$h 10.9.2006, 17:10
Цитата(Sardar @  10.9.2006,  17:30 Найти цитируемый пост)
Глазу проще различить (даже с подсветкой) ключевое слово от скобок и подобного

Даже субъективным мнением мне сложно назвать: посмотри на мой пост выше. Просто я ну ни как не могу понять, как птички могут быть проще: там же совсем не понятно, к чему относится скобка.

Автор: Mad 10.9.2006, 17:33
2 вариант


Цитата(Cr@$h @  10.9.2006,  16:10 Найти цитируемый пост)
росто я ну ни как не могу понять, как птички могут быть проще: там же совсем не понятно, к чему относится скобка.

если правильно оформить код (не пропускать табы), то читаеться одинаково легко, как со скобками, ток и с ключевыми словани
(тем более в VS.2005 если использовать возможность сворачивания блоков в строку)

Автор: Sardar 10.9.2006, 17:57
Цитата(Cr@$h @  10.9.2006,  16:10 Найти цитируемый пост)
Просто я ну ни как не могу понять, как птички могут быть проще: там же совсем не понятно, к чему относится скобка. 

Даже не задумываюсь, просто вижу и всё smile  Примерно то же самое говорю себе когда вижу begin/end, не вижу где начало блока, где конец, всё как одна простыня. Это всё от натренировки мозга, есть опыт, читаешь не задумываясь.

Сам это понял, когда писал много документации для Java. То что нужно самому раставлять HTML разметку меня убило, ведь это просто различать параграфы и списки, как например это делает phpDocumentor. Через пол года привык, теперь наоборот глюки phpDocumentor'а (<b><i>test</i></b> поймёт только <b>, вложенные теги вообще не понимает) кажуться просто вопиющим бредом, хочеться контроль над разметкой полный, т.к. иногда к классам пишу целые мануалы с заголовками и прочим smile

Автор: Cr@$h 10.9.2006, 19:10
Цитата(Mad @  10.9.2006,  18:33 Найти цитируемый пост)
если правильно оформить код (не пропускать табы), то читаеться одинаково легко, как со скобками, ток и с ключевыми словани

Ну, давай посмотрим.
Код

            }
        }
    }
}


Код

            end
        end
    end
end


Код

            end for
        end if
    end while
end function

Практичность измеряется, кто не знал  smile Засеките время, если захотите добавить код после конструкций while или if. Да тут, пока определишь, от чего какая птичка, то запутаться можно. Ведь код наверх может идти не так уж коротко. С простыми end -- то же самое почти, но лучше.
А уж тем более не понимаю, зачем открывающую кавычку сделали: просто потому что есть открывающая, каждой твари по паре, что ли.
Цитата(Sardar @  10.9.2006,  18:57 Найти цитируемый пост)
Это всё от натренировки мозга, есть опыт, читаешь не задумываясь.

Согласен. Я привык к "нормальным" конструкциям, а не к заголовкам конструкций с блоками из птичек.

Автор: ZeeLax 10.9.2006, 20:40
За первый вариант. А что до удобочитаемости - комментарии можно юзать и для ключевых слов и для птичек.

Автор: Cr@$h 10.9.2006, 22:39
Цитата(ZeeLax @  10.9.2006,  21:40 Найти цитируемый пост)
А что до удобочитаемости - комментарии можно юзать и для ключевых слов и для птичек. 

Многое мои друзья программисты именно так и делают. Можешь привести пример на основе моих двух конструкций: та, что с птичками, и та, что end'ами? smile 

Автор: He1mut 27.9.2006, 21:18
ИМХО, второй вариант без сомнения наиболее удобочитаем.

Я вот даже в таких случаях пишу:
Код

for(int k = 0; k < 5; k++)
{
      cout << "что-то там, это к примеру" << endl;
}

Автор: comtat 28.9.2006, 12:19
Предпочитаю вариант для Perl
Код

sub C_Login_Create {
 my ($user_id, $record_id)=@_;
    if ($user_id<20000) {
      print (qq{ok !!!});
    }
}

и
Код

begin
....
end;

у Delphi

Автор: Bose 24.10.2006, 19:25
Я тоже последнее время крепко задумываюсь по этому поводу. Для Java и Delphi насколько я знаю принято писать { или begin в конце строки! То есть первый вариант(!).

Лично мне же более читаемым кажется 2й, вариант - когда открывающая и закрывающая конструкция находятся на одном уровне - мне так проще выделять код в визуальные блоки. 

Фигурные скобки мне кажутся более лакончичными и удобными, чем слова begin - end. Уже года 3 программирую только на Delphi, но когда набрасываю на бумаге алгоритм, всё-равно предпочитаю рисовать фигурные скобки. Видимо сказывается, то, что C++ я выучил раньше паскаля.

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

Автор: Piphon 26.10.2006, 00:01
На вопрос топика: 2 способ. А так пофиг  с 'птичками' или со словами. Вот только первый способ мне очень не нравиться. Код должен быть структуирован.

Автор: batigoal 3.11.2006, 16:05
Цитата(Bose @  24.10.2006,  20:25 Найти цитируемый пост)
Для Java и Delphi насколько я знаю принято писать { или begin в конце строки! То есть первый вариант(!).

В общем-то, такая рекомендация есть (для Java), но любителей переноса скобок на новую строку - примерно половина.

Автор: EvgenZ 3.11.2006, 16:11
А мне нравится первый вариант и воспринимаю его легче. Помоему он симпотичнее. Второй мне не нравится.


Автор: ivashkanet 3.11.2006, 16:29
Второй

Автор: smartov 3.11.2006, 17:11
Пишу в втором варианте. (Java Style или ANSI C style как его зовут)
Первый (K&R style) мне кажется менее читабельным из-за того, что строки кода условия сливаются с условием условия (каламбурчег).
Есть еще http://en.wikibooks.org/wiki/C++_Programming/Code_Style, от которого меня лично вообще тошнит.
Это когда скобка стоит на отдельной линии но табулирована на пол-таба
Код

if (a > 5) 
  {
    // This is GNU style
  }


Автор: Любитель 4.11.2006, 12:58
Цитата(batigoal @  3.11.2006,  16:05 Найти цитируемый пост)
В общем-то, такая рекомендация есть (для Java)

Если не секрет - она как-то аргументирована?

Автор: batigoal 4.11.2006, 14:04
Цитата(Любитель @  4.11.2006,  13:58 Найти цитируемый пост)
Если не секрет - она как-то аргументирована? 

Нет, просто договоренность. Некоторым так действительно нравится больше - сразу видно, при каком условии выполнится тот или иной кусок кода. В свете современных IDE с возможносями collapse/expand - не такое уж и преимущество.

Вот цитата из Code Conventons:
Цитата

When coding Java classes and interfaces, the following formatting rules should be followed:
  ...
    * Open brace "{" appears at the end of the same line as the declaration statement;

Без аргументации.

Автор: Любитель 4.11.2006, 14:15
Тогда не согласен с преимуществом такого способа. Второй вариант лучше потому что:
1. Лучше читается
2. Легче поддаётся обработке различными редакторами и утилитами.

Автор: batigoal 4.11.2006, 14:19
Если первый пункт - дело вкуса (и вкус у меня такой же), то второго я не понял. Можно пример?

Автор: Exception 4.11.2006, 19:26
Код
class SomeClass
{
    public void FooBar()
    {
    }

    public Stuff SomeStuff()
    {
        get
        { return StuffProvider.GetStuff(); }
        set
        { StuffProvider.SetStuff(value); }
    }
}

Автор: EvgenZ 4.11.2006, 22:34
Код

class SomeClass {
    public void FooBar() {
    }

    public Stuff SomeStuff() {
        get {
            return StuffProvider.GetStuff(); 
        }
        set { 
            StuffProvider.SetStuff(value); 
        }
    }
}


помоему наряднее...

Автор: ivashkanet 4.11.2006, 23:41
Цитата(EvgenZ @  4.11.2006,  21:34 Найти цитируемый пост)
помоему наряднее...

Только что синий ярче  smile 

А так я за код Exception-а (хотя, у нас технология общая  smile )

Автор: Любитель 7.11.2006, 18:19
Цитата(batigoal @  4.11.2006,  14:19 Найти цитируемый пост)
Если первый пункт - дело вкуса (и вкус у меня такой же), то второго я не понял. Можно пример? 

Поясню - редактору проще анализировать код (я говорю про простые текстовые реддакторы, а не достаточно накрученные), если быть увереным, что начало блока - строка из одного символа {. Конец - строка из одного символа }. Если мы вдруг решили написать какой-нибудь сценарий для обработки, то это допущение также облегчит жизнь.

Насчёт лучшего чтения - не только дело вкуса. Просто подобные блоки как-то осязаются сразу, с { на конце - нужна пауза. Помогают, конечно, инденты, но не всегда. Скажем, если у нас есть маса условий, которые надо проверить в ифе, то, возможно мы разобъём его на две строки. В итоге индент будет и там, потому отделение скобками ({ - }) значительно улучшает восприятие.  smile 

Автор: Rodman 10.11.2006, 19:14
Cr@$h, 
Код

int F()
    int a=1, b=5;
    if (a<b)
        switch (a)
            case 0: return 1;
            case 1: return 0;
        end switch
    end if
end function


первый раз такой С++ вижу...


Код

            end for
        end if
    end while
end function
 и такой паскаль тоже...

а вооще я за второй вариант

Автор: smalcom 13.11.2006, 23:37
использую следующий стиль

Код

int main()
{
int i = 0;

    if(i == 1)
    {
        i--;
        return 1;
    }
    else
    {//if(i == 1)
        int t;
        
        t = 50 + i;
        i += 43;
        return t;
    };//if(i == 1)
    return 0;
}


Код

class some_cl
{
public:

    some_cl();
    ~some_cl();

private:

    int hz_var;

}

/************************************/
/*                                                                    */
/************************************/
switch(tt)
{
    case 1:
        int kk = 0;

        kk++;
        break;
    default:
        break;
}


ну и табы всегда ставлю на восем позиций - получаеца хоть и широкий но очень удобочитаемый код

Автор: Void 13.11.2006, 23:47
Цитата(smalcom @  14.11.2006,  01:37 Найти цитируемый пост)
ну и табы всегда ставлю на восем позиций - получаеца хоть и широкий но очень удобочитаемый код

Особенно теми, у кого монитор не 20" и более.
ИМХО, макс. длина строки в 80 символов должна соблюдаться и табы в 8 позиций этому не способствуют, но это всего лишь моё мнение smile

Автор: diam 14.11.2006, 10:18
Цитата(Void @  14.11.2006,  02:47 Найти цитируемый пост)
ИМХО, макс. длина строки в 80 символов должна соблюдаться и табы в 8 позиций этому не способствуют, но это всего лишь моё мнение smile 

Соглашусь. Очень легко читать код, который не лежит кучей, а хорошо структурирован, но если при всём этом код ещё и компактен, то его вдвойне легче читать.
Код

// вариант 1
if (1 == 1)
    if (2 == 2)
        if (3 != 3)
            // код
        end if
        // код
    else
        // код
    end if
    // код
end if

// вариант 2
if (1 == 1)
        if (2 == 2)
                if (3 != 3)
                        // код
                end if
                // код
        else
                // код
        end if
        // код
end if

Для меня вариант 1 читается проще.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)