LINUX.ORG.RU

[c++] Этика написания кода

 


0

0

Где можно почитать про сабж? Как именовать классы, из каких соображений разбивать код на файлы, почему не принято использовать CamelCode, как вообще оформлять код?

Вот как обычно делают?

if ( a==b ) b=b+1;
if (a==b) ++b;
if (a == b)
   b++;
if (a == b) {
   b++;
}
if ( a == b )
{
   b++;
}
★★★★★
Ответ на: комментарий от Obey-Kun

В плюсах использовать goto вообще не надо. Есть риск, например, получить видимую в скопе переменную, которая никак не была инициализирована.

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

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

Нет риска. Компилер заругается.

legolegs ★★★★★
()
Ответ на: комментарий от Miguel

> В плюсах использовать goto вообще не надо. Есть риск, например, получить видимую в скопе переменную, которая никак не была инициализирована.

1. (уже ответили)

2. выход из вложенного цикла требует goto

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

>выход из вложенного цикла требует goto

На эту тему была дискуссия: http://www.linux.org.ru/view-message.jsp?msgid=3520569 Вкратце: я предлагал использовать goto для выхода из вложенных циклов, но меня переубедили.

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

На эту тему была дискуссия: www.linux.org.ru/view-message.jsp?msgid=3520569 Вкратце: я предлагал использовать goto для выхода из вложенных циклов, но меня переубедили.

Ни разу не убедительно — goto в твоем бенче показало лучшее время, и вероятно и будет показывать, так как разработчики компилятора воспринимают этот случай как стандартный.

Предолжение Мигеля было интересно (особенно в случае концептуальности именно пути), однако:

1. его надо написать на шаблонах, чтобы оно не тормозило

2. вероятность его тормозов все равно >0

3. оно не аргумент для запрета goto

  while(i...) {
    while(j...) {
      switch(...) {
        case 'a' : goto apple;
        case 'b' : goto banana;
  } } }
  std::cout << "sorry";
  // half a page code here
  goto end;
apple: 
  std::cout << "apple found with " << f(i,j);
  // half a page code here
  goto end;
banana:
  std::cout << "banana found with " << g(i,j);
  // half a page code here
  goto end;
end:

понятно, что все по меткам можно запихать внутрь цикла, но это — нечитабельное тупое поклонение авторитету

З.Ы. правильное решение — реализация «статических» исключений средствами метапрограммирования

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

я в той теме промолчал только потому, что мне показалось, что все ясна победа goto

чтобы реализовать мой пример через return, тебе придется придумать никому не нужный enum BlaBlaBla {apple, banana}, возвращать его из функции, а потом делать по нему свитч, да еще и не забыть добавить в свитч один из вариантов, когда ты его добавишь в цикл!

кроме опасности, оно еще и тормозит -- в цикле ты знаешь куда надо прыгать, но нет -- мы будет это вспоминать в свиче. может жцц и соптимизирует это, но нафига?

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Miguel

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

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

>я в той теме промолчал только потому, что мне показалось, что все ясна победа goto

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

>тебе придется придумать никому не нужный enum BlaBlaBla {apple, banana}

Он нужный, ибо:

1. самодокументируемость: сразу видно какие вообще фрукты бывают.

2. компиляторы умеют предупреждать, когда в switch перечислены не все элементы enum.

B в первую очередь в твоём коде выкинуть в функции надо "// half a page code here"

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

> B в первую очередь в твоём коде выкинуть в функции надо "// half a page code here"

// this page of code is intentionally left blank

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