LINUX.ORG.RU
ФорумTalks

Советы по кодстайлу с++

 ,


2

1

http://habrahabr.ru/post/172091/ Для Ъ:

Петросянские и не очень советы по код-стайлу на С++

Самый петросянский совет:

58. Следует избегать использования break и continue в циклах.

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

★★★★★

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

Ну там помимо стилей много забавных вещей.

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

for (vector<MyClass>::iterator i = list.begin(); i != list.end(); i++)

for(auto i: list)

Читаю новый стандарт — там много приятных плюшек и есть даже огроменные плюшищи.
Жаль только на работе пока нет возможности использовать новый gcc...

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

А 2012 студия разве не поддерживает уже с++11?

И да тут фишка не в длине записи, а в том, что афтар предлагает использовать i,j,k вместо нормальных имен у бегунков.

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

студия

Мы кроссплатформенный код пишем, так что gcc

бегунков

Ну вот. Я теперь буду целый день хихикать как дибил.

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

Аааа, я думал вообще gcc нельзя использовать. Ну от чего ж, мы на работе под студией вполне себе кроссплатформенный код писали...

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

Там от брейков отговаривают.

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

Не ну вообще тут итератор да, но там советы даются и на случай массивов обычных. Ну я и придумал такое нехорошее слово,да=)

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

Допускаются любые нарушения рекомендаций, если это улучшает читаемость.

Вот оно!!!! Причем в первом пункте! Дальше читать не стал, ибо, все правильно.

vada ★★★★★
()
Последнее исправление: vada (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Так от ситуации зависит же. Однозначно запрещать осмысленые имена итераторов - глупость.

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

Я и не говорил, что не угодил, но запрещать другие варианты - это глупость. В любом случае варианты там и почище есть. Которые вообще мозгом рака пахнут.

Dudraug ★★★★★
() автор топика

58. Следует избегать использования break и continue в циклах.

что, goto вместо них писать? или наделать переменных и проверять их все в for(;;)?

drBatty ★★
()

Следует избегать использования break и continue в циклах

Совет конечно спорный, но вообще да, break читаемости не добавляет т.к. в сложных случаях бывает неочевидно, к чему он относится:

while(something()) {
    ...
    switch(value) {
    case 1:
       if (ok) {
           ...
           break; // что брякнется? цикл или кейс?
       }
       ...
       break; // а здесь?
    }
}

Заставит джуниора гуглить - так делать нехорошо.

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

Нееее Первое правило это типо, если у вас есть другой вариант... А тут прямым текстом сказано «такой вариант говно».

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

Нет. Делать декомпозицию кода на функции.

в _любом_ случае? или только в случае вложенных в цикл switch'ей? вкладывать преключатель в цикл конечно неудобно, но и декомпозиция - тоже не панацея.

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

Разумеется оба выйдут из свича.

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

Подобные косяки всплывают при первом прогоне. Если не писать портянки на несколько экранов,то таких ошибок вообще не будет. Имхо, надуманная проблема с читабельностью.

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

ijk у меня лично ассоциируются с целочисленными счетчиками. Для итераторов я, например, чаще использую it.

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

Подробностей не помню, но вроде как для префиксного инкремента не создается дополнительного временного объекта => он быстрее.

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

Там есть ссылка на книжку и на обзор от человека (внизу список).

bhfq ★★★★★
()

Дочитал до этого:

  int getMaxIterations() // НЕЛЬЗЯ: MAX_ITERATIONS = 25
  {
    return 25;
  }
Всё настолько плохо? Константы вне закона?

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

constexpr

с константами своё ок, это какая-то НЁХ

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

Они имели ввиду что если константа используется только внутри класса ,то ее лучше ,прости господи, сделать членом. А если в стопятьсот тысяч классов, то лучше через дефайн, иначе искать, где эти «25» по коду разбросаны, жизни не хватит.

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

Я и не говорю, что магические числа — это хорошо. Но есть же препроцессор, дефайны и всяческие удобные штуки. А эта конструкция с return 25 — жуткая.

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

Например, класс обрабатывает сетевой пакет, если длину пакета забить define LEN_PACKET 25, то возможно другому программисту с другим пакетом такая же идея придёт и они подерутся. А так они эту длину в класс прячут.

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

Я не понимаю только зачем делать метод? К тому же, судя по другим советам, не инлайный. Чем константный член класса не угодил?

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

Видимо, чтобы был геттер, для единообразия API. Странное решение.

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

Чтобы скрыть детали реализации. Может это не константа, может максимальный размер пакета высчитывается сложным образом на основе положения зодиакальных созвездий и планет.

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

У метода больше возможностей,например подсчитать количество обращений, «битые» пакеты сформировать, просто длину вычислить и т.д.

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

fixed

Разфиксь и последуй совету со совей аватарки.:)
Нам бы ехать, а шашечки — дело десятое.
Этот LLVM позавчера только себя собирать научился, а ты его уже рекламируешь как компилятор.

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

для скалярных типов 4.2. для объектов - согласен.

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