Coding style...

Кто какой вариант кода предпочитает

Вариант 1
15
13%
Вариант 1
15
13%
Вариант 2
34
30%
Вариант 2
34
30%
Вариант 3
3
3%
Вариант 3
3
3%
Свой вариант
5
4%
Свой вариант
5
4%
 
Total votes: 114

User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Coding style...

Post by OBender »

Вот захотелось выяснить расстановку сил по такому очень простому вопросу. И так для упрощения пула приведу примеры кода:

Вариант 1.

Code: Select all

function f(){
        while(...){
          //line 1
        }

        if(...){
          //line 1
          //line 2
          ...
          //line N
        }
}


Вариант 2.

Code: Select all

function f()
{
        while(...)
        {
          //line 1
        }

        if(...)
        {
          //line 1
          //line 2
          ...
          //line N
        }
}


Вариант 3.

Code: Select all

function f()
{
        while(...){
          //line 1
        }

        if(...)
        {
          //line 1
          //line 2
          ...
          //line N
        }
}


Кто что предпочитает и по чему? Коментарии welcome
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
Mic
Уже с Приветом
Posts: 6906
Joined: 20 Apr 1999 09:01
Location: Seattle

Post by Mic »

Предпочитаю вариант 2. Почему? Читать удобнее, меньше напрягаешься - выше работособность, ниже раздражительность.
А вообще про стили можно много спорить. У кого-как, для меня главное, чтобы когда я открою свой код через год, мне было необходимо минимум времени чтобы вспомнить что к чему. Для других - уложить всю логику в три строки. Я не против трех строк, но почему потом я в этом дерьме должен разбираться, чтобы исправить ошибки "великоумных"?
Olegus
Уже с Приветом
Posts: 4642
Joined: 18 Jan 2001 10:01
Location: Kharkov,UA->MA->WA->CT

Post by Olegus »

2-й, только вместо {..} - begin .. end ;)
Надо радоваться, не надо напрягаться..
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

Я применяю вариант 2. Привык я так... А прагматичный ответ на вопрос по стилю обычно таков: Выберите один стиль и пусть все пользуются им на проекте.
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

Кстати, еще одно преимущество 2-го варианта: если контора -- мрак, и вашу производительность меряют килолоками (1000 uncommented lines of code), то в каждом блоке пару строчек кода добавляется за так. :wink:
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Кстати те кто голосуют за свой вариант приводите примеры плиз.
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
CTAC_P
Уже с Приветом
Posts: 6789
Joined: 01 Jun 2001 09:01

Post by CTAC_P »

Code: Select all

function f(){ 
        while(...)
          //line 1;

        if(...)
        {
          //line 1
          //line 2
          ...
          //line N
        }
}
[/quote]
Hamster
Уже с Приветом
Posts: 11475
Joined: 20 Nov 2000 10:01
Location: Escondido, CA

Post by Hamster »

Вариант 2, как самый читабельный.
Особый случай: если внутри оператора if/while/for только один оператор ( одна строчка ), фигурные скобки не ставятся.
То есть,

Code: Select all

for(x=0; x<100; x++)
    fun(x);

но

Code: Select all

for(x=0; x<100; x++)
{
    if(x & 1)
         fun(x);
    else
         fun2(x);
}
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

Я привык ставить фигурные скобки всегда, даже если они для одного statement-а. Автоматом избегается ошибка, когда добавляется statement, а скобки ставить забываются...
yocto
Уже с Приветом
Posts: 3640
Joined: 13 Sep 1999 09:01
Location: Canada

Post by yocto »

Veselchak U wrote:Кстати, еще одно преимущество 2-го варианта: если контора -- мрак, и вашу производительность меряют килолоками (1000 uncommented lines of code), то в каждом блоке пару строчек кода добавляется за так. :wink:


Тггда лучше так

Code: Select all

   while
   (
   1
   ==
   1
   {
   };
User avatar
DenisM
Уже с Приветом
Posts: 1976
Joined: 08 Jun 1999 09:01
Location: SPb -> SFBA -> Beaverton, OR

Post by DenisM »

Veselchak U wrote:Я привык ставить фигурные скобки всегда, даже если они для одного statement-а. Автоматом избегается ошибка, когда добавляется statement, а скобки ставить забываются...


Аналогично, коллега :)

У меня есть пара исключений из стиля 2):

Code: Select all

// 1. цепочка if'ов
if( condtion1 )
{
  // ...
}
else if( condition2 )
{
  // ...
}
else
{
  // ...
}

// 2. switch с большим количеством простых case
switch( expression )
{
  case case1: { X = 1; break; }
  case case2: { X = 2; break; }
  // a lot of cases here
  case caseN: { X = N; break; }
}


Еще несколько вопросов по стилю:
1) А кто какой tab/ident size использует? Я - 2 символа.
2) Ваше отношение к Hungarian Notation ( strMessage, nStep, chDelimiter ) ?
3) 'm_' или '_' или вообще без префикса перед class data members?
4) nVariableName vs variable_name
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

yocto wrote:
Veselchak U wrote:Кстати, еще одно преимущество 2-го варианта: если контора -- мрак, и вашу производительность меряют килолоками (1000 uncommented lines of code), то в каждом блоке пару строчек кода добавляется за так. :wink:


Тггда лучше так

Code: Select all

   while
   (
   1
   ==
   1
   {
   };

yocto, мне платят деньги за код, который можно откомпилировать... :umnik1: Вот вам и главный недостаток Вашего (пусть шутейного) варианта -- Вы допустили элементарную ошибку, которую не сделали бы, если бы выбрали Вариант 2. А ведь Вы -- стреляный воробей, yocto. :wink: Мой (вариант 2) стиль -- принимается другими программерами как нормальный. Добавление пары линий кода -- это не главная его цель, а побочный эффект. Впрочем, я уверен, что Вы пошутили. :gen1:
User avatar
Gennadiy
Уже с Приветом
Posts: 11332
Joined: 30 Mar 2000 10:01
Location: Ice Storm Town

Post by Gennadiy »

DenisM wrote:У меня есть пара исключений из стиля 2):

Аналогично.
Еще несколько вопросов по стилю:
1) А кто какой tab/ident size использует? Я - 2 символа.

4 символа
2) Ваше отношение к Hungarian Notation ( strMessage, nStep, chDelimiter ) ?

В большинстве случаев отрицательное. Затрудняют восприятие текста.
3) 'm_' или '_' или вообще без префикса перед class data members?

_ : но это личное прдпочтение. Ничем не обоснованое
4) nVariableName vs variable_name

variabaleName - пора забывать про ДОС :mrgreen:
User avatar
CTAC_P
Уже с Приветом
Posts: 6789
Joined: 01 Jun 2001 09:01

Post by CTAC_P »

DenisM wrote:1) А кто какой tab/ident size использует?

:х
Tab = Tab! :umnik1:
В редакторе поставьте, насколько вам двигать.
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

DenisM wrote:
Veselchak U wrote:Я привык ставить фигурные скобки всегда, даже если они для одного statement-а. Автоматом избегается ошибка, когда добавляется statement, а скобки ставить забываются...


Аналогично, коллега :)

У меня есть пара исключений из стиля 2):

Code: Select all

// 1. цепочка if'ов
if( condtion1 )
{
  // ...
}
else if( condition2 )
{
  // ...
}
else
{
  // ...
}

// 2. switch с большим количеством простых case
switch( expression )
{
  case case1: { X = 1; break; }
  case case2: { X = 2; break; }
  // a lot of cases here
  case caseN: { X = N; break; }
}


Еще несколько вопросов по стилю:
1) А кто какой tab/ident size использует? Я - 2 символа.
2) Ваше отношение к Hungarian Notation ( strMessage, nStep, chDelimiter ) ?
3) 'm_' или '_' или вообще без префикса перед class data members?
4) nVariableName vs variable_name


Спасибо за поддержку, Денис! В общем, многие конторы имеют стандарты написания кода, и тогда подобными вопросами обычно не задаешься. Например, на нынешнем проекте я вынужден использовать индент в 4 символа, хотя предпочитаю 3. Венгерскую нотацию -- не люблю!!! Я использую так называемую Верблюжью нотацию (nVariableName) в C++, а variable_name - в C. Префиксы совсем не ставлю, хотя это может и неплохая идея.

В книге <a href = "http://www.amazon.com/exec/obidos/ASIN/1556154844/qid=1064524411/sr=2-1/ref=sr_2_1/002-2264148-6406412">Code Complete</a> много внимания уделено вопросу стиля. Если есть время и желание, прочтите, не пожалеете.
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

CTAC_P wrote:
DenisM wrote:1) А кто какой tab/ident size использует?

:х
Tab = Tab! :umnik1:
В редакторе поставьте, насколько вам двигать.


Только если это делаете в Visual Studio, не забудьте выбрать опцию, чтобы вместо таба редактор поставил пропуски. А то другие редакторы, типа vi, фигово воспринимают табы, и код читать невозможно; приходится переформатировать. :umnik1:
User avatar
Mic
Уже с Приветом
Posts: 6906
Joined: 20 Apr 1999 09:01
Location: Seattle

Post by Mic »

Veselchak U wrote:Только если это делаете в Visual Studio, не забудьте выбрать опцию, чтобы вместо таба редактор поставил пропуски. А то другие редакторы, типа vi, фигово воспринимают табы, и код читать невозможно; приходится переформатировать. :umnik1:

Правильными тулзами надо пользоваться!
VS rules, остальноe - сакс! :mrgreen:
yocto
Уже с Приветом
Posts: 3640
Joined: 13 Sep 1999 09:01
Location: Canada

Post by yocto »

Veselchak U wrote:yocto, мне платят деньги за код, который можно откомпилировать... :umnik1: Вот вам и главный недостаток Вашего (пусть шутейного) варианта -- Вы допустили элементарную ошибку, которую не сделали бы, если бы выбрали Вариант 2. А ведь Вы -- стреляный воробей, yocto. :wink: Мой (вариант 2) стиль -- принимается другими программерами как нормальный. Добавление пары линий кода -- это не главная его цель, а побочный эффект. Впрочем, я уверен, что Вы пошутили. :gen1:


Вот те на!
Действительно, при copy-n-paste энтропия сожрала скобочку. :lol:

Конечно же, это была шутка. Как иллюстрация моего непонимания, как можно оценивать исходный код в строках. Ведь можно взять исходный текст и заменить все разделители лексем на '\r\n' и за секунду упятерить свою производительность. Это если не вспоминать про перенос литералов.

А я вот равно пользуюсь двумя первыми вариантами. Зависит от среды разработки, выбранного фонта и пр. И я не думаю, что данный выбор может меня как-либо характеризовать.
User avatar
DenisM
Уже с Приветом
Posts: 1976
Joined: 08 Jun 1999 09:01
Location: SPb -> SFBA -> Beaverton, OR

Post by DenisM »

Veselchak U wrote:
CTAC_P wrote:
DenisM wrote:1) А кто какой tab/ident size использует?

:х
Tab = Tab! :umnik1:
В редакторе поставьте, насколько вам двигать.


Только если это делаете в Visual Studio, не забудьте выбрать опцию, чтобы вместо таба редактор поставил пропуски. А то другие редакторы, типа vi, фигово воспринимают табы, и код читать невозможно; приходится переформатировать. :umnik1:


Да я, собственно, всегда так и делаю, :gen1:
User avatar
DenisM
Уже с Приветом
Posts: 1976
Joined: 08 Jun 1999 09:01
Location: SPb -> SFBA -> Beaverton, OR

Post by DenisM »

Veselchak U wrote:...
В книге <a href = "http://www.amazon.com/exec/obidos/ASIN/1556154844/qid=1064524411/sr=2-1/ref=sr_2_1/002-2264148-6406412">Code Complete</a> много внимания уделено вопросу стиля. Если есть время и желание, прочтите, не пожалеете.


Мне в свое время понравилась больше вот эта книжка ( там не только про стиль кодирования ):
[url=http://www.amazon.com/exec/obidos/tg/detail/-/0070296898/104-5268519-1455952?v=glance]Enough Rope to Shoot Yourself in the Foot: Rules for C and C++ Programming
by Allen I. Holub[/url]
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

:gen1:
yocto, я тоже не понимаю этого, но такие методы оценки живут в нашей индустрии. :pain1: Вот UFO Passenger вам расскажет как нас надо оценивать. :x

У меня вроде компания с инженерным духом, и меня не оценивают строго по килолокам. Так пару лет назад начали активно пропихивать 6-сигма методологию, и одним из параметров моей оценки стало количество дефектов на один килолок. Босс сказал, чтобы получилась 6-сигма, нужно иметь дефектов меньше одного на туеву хучу линий кода, не помню точно, но я столько за год не напишу :roll: . В общем, ошибок делать просто нельзя. Когда я попробовал заикнуться о том, что даже в НАСА, 8O где СММ Level 5 8O , оценивают, что у них меньше 5 дефектов на 1000 линий кода. Не помогло. Так народ уцепился за условие, что считается количество дефектов, которые дошли до конечного пользователя. А их пока подсчитают, год заканчивается, и бонус уже выдан. :gen1: Так что мы круче чем в НАСЕ, ой вей...
AN2001
Ник закрыт.
Posts: 572
Joined: 17 Aug 2001 09:01

Post by AN2001 »

В VC++ есть встроенный форматор. В VC++ 6.0 Edit->Advanced->Format Selection.
а в голосовании интересная фигура из 4 пальцев получилась :mrgreen:
User avatar
mikeG
Уже с Приветом
Posts: 8485
Joined: 02 Aug 2003 01:32
Location: SPb->SFBA

Post by mikeG »

Проголосовал за свой вариант: в соответствии с corporate standards.
А тех, кто пишет в соответствии со своими эстетическими
вкусами нужно отстреливать!
У нас для этого (отстреливания) специальный скрипт запускается. :)
User avatar
Gennadiy
Уже с Приветом
Posts: 11332
Joined: 30 Mar 2000 10:01
Location: Ice Storm Town

Post by Gennadiy »

mikeG wrote:Проголосовал за свой вариант: в соответствии с corporate standards.
А тех, кто пишет в соответствии со своими эстетическими
вкусами нужно отстреливать!
У нас для этого (отстреливания) специальный скрипт запускается. :)

А если именно вы вырабатываете этот стандарт? У меня это уже второй раз происходит.
User avatar
theukrainian
Уже с Приветом
Posts: 2506
Joined: 13 Jan 2003 22:34
Location: Kiev :: Los Angeles, CA

Post by theukrainian »

DenisM wrote:
3) 'm_' или '_' или вообще без префикса перед class data members?

_ : но это личное прдпочтение. Ничем не обоснованое

В C++, как и в C '_' перед началом identifier зарезервировано для internal use of implementation.

Под рукой нету стандарта, но вот что я нашел в comp.lang.c++:

each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace


Думается это может также означать что implementation имеет право декларировать macro с таким же именем как и member.

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

денис

Return to “Вопросы и новости IT”