LINUX.ORG.RU

Почему в индустрии победил стиль скобок Си на одной строке?

 ,


0

1

Как человек, который много писал на паскале, я довольно быстро пришел к форме:

if condition then
begin
  ...
end;
как наиболее универсальной записи, которая, к тому же, еще и каноничная. Если мы посмотрим на ядро линупса, то увидим довольно интересные вещи:
int crypto_register_acomps(struct acomp_alg *algs, int count)
{
	int i, ret;

	for (i = 0; i < count; i++) {
		ret = crypto_register_acomp(&algs[i]);
		if (ret)
			goto err;
	}
Эм-м-м, чо? Почему в одной функции скобка на новой строке и не на новой? Или, вот, например, стиль гугля для крестов:
int ClassName::ReallyLongFunctionName(int par_name1, int par_name2,
                                      int par_name3) {
  DoSomething();
  ...
}
Может я просто не знаком с крестами и не понимаю, как такая запись резонирует с привычками крестовиков, но на мой сишно-паскальный взгляд такая такой стиль вырвиглазен, поскольку в нем «DoSomething» непонятно к чему относится. Некоторые люди приходят к стилю:
int ClassName::ReallyLongFunctionName(int par_name1, int par_name2,
                                      int par_name3) {

  DoSomething();
  ...
}
который на самом деле так и просит перенести эту чертову скобку на новую строку, которую ты уже и так сделал.

Тот же Qt переносит скобку на новую строку для классов и функций, но не делает этого для условий-циклов.

Единственное оправдание, которое я вижу для крестовиков — это инициализаторы, которые пишутся одной строкой. Ну так пишите их одной строкой, когда они влазят в одну строку. Сишники в итоге все-таки пришли к тому, что фигурная скобка для функций должна быть строго на новой строке — я хз, почему этот стиль нельзя по логике распространить и на условия с циклами, я просто не вижу никакого оправдания для размещения фигурной скобки на одной строке с условием-циклом. Может вы его видите.

★★★★

Дело вкуса, вобщем-то.

Скобка в конце строки позволяет сэкономить место по вертикали, особенно в ситуации когда функции короткие.

Скобка на новой строке, на мой взгляд, лучше выделяет блок и добавляет единообразия.

dyb4hzvo
()

Не имеет отношения к С.

В паскале тоже часто пишут begin на той же строке:

for i := 0 to 2 do begin 
  //...
end;
if condition then begin
  //...
end;
fsb4000 ★★★★★
()

я всегда ставлю скобку в конце строки. Не для экономии места, а для уменьшения числа требующих распознавания сущностей. Объявление функции - блок с кодом - конец функции. Со скобкой на новой строке лично для меня это превращается в «объявление функции - начало блока с кодом - блок с кодом - конец функции». Неприятно.

Естественно, часто хочется визуально отделять блок с кодом от объявления функции. Это гораздо лучше делать просто пустой строкой, а не скобкой: если захочется написать там какой-нибудь коммент, то в последнем случае возможны неприятные эффекты с форматированием.

Так что я целиком и полностью за 2 последних варианта.

Lrrr ★★★★★
()

Так случилось, что мониторы более широкие нежели более высокие, а видеть значимой информации по вертикали больше чем меньше — дорогого стоит.

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от x3al

ctrl-c -> ctrl-v и вот у нас уже замечательная каша и в лучшем случае ошибка парсинга. А со скобочками только линтер запустить

anonymous
()

Имхо, логичней всего выглядит стиль похапэ.

Класс, метод - на новой строке.

Функция, цикл - на той же строке.

Но в продакшене многим насрать. Где-то подправили кусок кода и забыли перенести скобку. Где-то просто по-быстрому, тяп-ляп наклепали, шоб работало.

qtm ★★★
()
Последнее исправление: qtm (всего исправлений: 1)
Ответ на: комментарий от anonymous

ctrl-c -> ctrl-v и вот у нас уже

новое топливо для биореактора …

gremlin_the_red ★★★★★
()

«Как человек, который много писал на паскале, я» © имею сказать, что

grep -r 'then begin' * | wc -l
41043

gremlin_the_red ★★★★★
()

Один стиль выглядит как

if(cond)

    code


Другой выгдядит как

if(cond)
    code


Очевидно, что второй стиль лучше, так как удволетворяет принципу близости.

quantum-troll ★★★★★
()
Последнее исправление: quantum-troll (всего исправлений: 1)

Больше строк на монитор вмещается - удобнее читать большое кол-во кода.

Norgat ★★★★★
()

погугли и прозреешь: tzar Почему стиль говна не совместим с современным языком

anonymous
()
Ответ на: комментарий от quantum-troll

Так-то оно так, но например некоторые люди пишут вот так:

if ... {
  ...
} else {
  ...
}

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

if ... {
  ...
}
else {
  ...
}
anonymous
()

А вообще этот тред - это такой хитрозамаскированный срач K&R vs. Allman.

anonymous
()

Сишники в итоге все-таки пришли к тому, что фигурная скобка для функций должна быть строго на новой строке — я хз, почему этот стиль нельзя по логике распространить и на условия с циклами

Потому что K&R. Там типы параметров писали так

int crypto_register_acomps(algs, count)
    struct acomp_alg *algs, 
    int count
{
...

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

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
int CryptoRegisterAcomps(
 struct acomp_alg  *Algs,
 int               cntAlgs
) {
/*

 Algs                   .

 cntAlgs                .

 Return:                .

 Links:                 .

 Notes:                 .


*/

 int  i,
      iRet ;

 for ( i = 0;  i < cntAlgs;  i++ ) {

  ret = crypto_register_acomp(
   &algs[ i ]
  );

  if ( iRet )
   goto  err;

 }                                                         // for ( i = 0;  i < cntAlgs;  i++ ) {

}                                                          // int CryptoRegisterAcomps(

У меня так.

Владимир

anonymous
()

никакого оправдания для размещения фигурной скобки на одной строке с условием-циклом

А за что нужно оправдываться?

no-such-file ★★★★★
()

Стиль, может и должен плавать, и выражать части кода, а не пропихивать под стиль код.

void foo(int var)
{
   if(bar())
   {  do_1();
      do_2();
   }else{
      do_3();
   };

   switch(var)
   {
     case BLA: { do_22(); }break;
     case BLU: { do_33(); }break;
     case BLU: 
     {
        ...
        ...
        LALA();
        LULE();
        ...
        ...
     };
   };

}

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

К примеру, это подчиняется некому стилю мол если больше 2ъ параметров то все после второго на новой строке…. Ну бред же.

int ClassName::ReallyLongFunctionName(int par_name1, int par_name2,
                                      int par_name3) {
  DoSomething();
  ...
}

Так лучше

int ClassName::ReallyLongFunctionName(int par_name1,
                                      int par_name2,
                                      int par_name3) 
{
  DoSomething();
  ...
}

Или хоть так.


int ClassName::ReallyLongFunctionName(int par_name1, int par_name2,
                                      int par_name3, int par_name4) {
  DoSomething();
  ...
}

Стилизовать надо по ходу дела сохраняя симметрию по возможности, а не вхерачивать невхерачиваемое.

А вообще на вкус и цвет. Ну код стайл в командах конечно нужен. Но это вынужденное страдание. Тут не попишешь.

LINUX-ORG-RU ★★★★★
()

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

anonymous
()
Ответ на: комментарий от anonymous

фапающий на JS

Конкретно эти закидоны я наблюдал в коде на java. Причём тот индус фапал на пистон. Ты, наверное тоже питонист?

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)

Потому что меньше писать мусора надо. Все эти begin, end, then и еще и ; - шум, мусор, не несущий особого смысла.

invy ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

даёшь обфускацию путём поломки натренированности взгляда на определённый стиль. так подебим

anonymous
()

Не readable код пишут только - лентяи, чайники и дураки.

 if(CFileSrc.mOk==FALSE){ 

 if ( CFileSrc.mOk == FALSE ) {

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Это ужасно.

if (CFileSrc.mOk == FALSE) {

Красота и благодать!

anonymous
()
Ответ на: комментарий от no-such-file

Щас придёт милиция и всех расстреляет потрёт.

А там где мат перемат оставит живыми.

Владимир

anonymous
()

Интересно было бы посмотреть на стиль написания кода участниками форума.

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Сеодня будет. Кстати, сегодня годовщина первой Метапрог-темы, как насчет поздравлений? @metaprog

«Шоб Windows переписали на Метапрог».

anonymous
()

Нахрена тратить целую строку на один символ???

Да и в паскакале на одну лексему тоже бессмысленно.

Miguel ★★★★★
()
как наиболее универсальной записи, которая, к тому же, еще и каноничная. Если мы посмотрим на ядро линупса, то увидим довольно интересные вещи:
int crypto_register_acomps(struct acomp_alg *algs, int count)
{
	int i, ret;

	for (i = 0; i < count; i++) {
		ret = crypto_register_acomp(&algs[i]);
		if (ret)
			goto err;
	}
"Широка страна моя родная. Много в ней полей и рек.".  

Колхозница Фрося в свободное от работы на свиноферме времени, контрибьюит в ядро Linux.

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Это ладно, знал бы ты кто контрибьютит в линуксовые ДЕ, пока Фрося занята…

anonymous
()
int ClassName::ReallyLongFunctionName(int par_name1, int par_name2,
                                      int par_name3) {
  DoSomething();
  ...
}

часто так делаю тоже, потому что это более читабельно чем одинока скобка, да и при фолдинге в редакторе сворачивается нормально

jo_b1ack ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.