[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Правила форматирования PHP - кода
waldicom
Оффтоп

Цитата
Не нужно (!!!) писать фигурные скобки. Хуже не будет, но это излишество. Скобки нужны для формирования блока, если в блоке более одного оператора или вызова функции.
Очень сильно не согласен. Без скобок довольно легко поиметь проблему, особенно если форматирование кривое... Хотя конечно дел вкуса.




Спустя 7 часов, 58 секунд (29.04.2009 - 07:46) sergeiss написал(а):
Цитата (waldicom @ 29.04.2009 - 00:45)
...особенно если форматирование кривое...

При этом условии - да. Но с таким условием могут быть проблемы не только со скобками. Так что можно не рассматривать этот вариант.

Спустя 5 часов, 5 минут, 22 секунды (29.04.2009 - 12:51) twin написал(а):
При таком условии проблемы вылезут именно из за скобок. Особенно когда они в одной строке с операторами.

Спустя 28 минут, 9 секунд (29.04.2009 - 13:19) waldicom написал(а):
Цитата (twin @ 29.04.2009 - 10:51)
При таком условии проблемы вылезут именно из за скобок. Особенно когда они в одной строке с операторами.

поясни плиз...

Вопрос, что легче понять в чужом коде:
PHP
if (a==a) {
    
set_blablu_mjaso();
}
    
delete_all();


или

PHP
if (a==a)
    
set_blablu_mjaso();
    
delete_all();



Спустя 41 минута, 2 секунды (29.04.2009 - 14:00) twin написал(а):
Лично меня крайне бесит, когда открывающая скобка в одной строке с оператором. А когда еще и закрывающая - ваще труба. Концовку видно, а если блоков вложенных много - ищи свищи где начало. Второй код намного читабельней, тут видно сразу что к чему относится. Есть выражение, нет скобки, значит работает пара. А если есть скобка - блок. А когда лишняя скобка открыта, да не там где надо, то и закрыть её немудрено где попало. А логические ошибки это не синтаксис и оооочень трудно диагностируются.

Спустя 10 минут, 19 секунд (29.04.2009 - 14:10) waldicom написал(а):
Цитата
Второй код намного читабельней, тут видно сразу что к чему относится.

Ты серьезно?

Спустя 6 минут, 43 секунды (29.04.2009 - 14:17) Viking написал(а):
Всегда считал очевидным, что скобки улучшают читабельность кода и помогают избежать логических ошибок, а вот оно как оказывается "на самом деле..."

Спустя 9 минут, 1 секунда (29.04.2009 - 14:26) jetistyum написал(а):
может вынести это в отдельную тему, Вам не кажется что мы ушли от обсуждения первоначального вопроса smile.gif
а писать или не писать скобки - личное дело каждого

я например не пишу..


но блок
PHP
if (a==a)
    
set_blablu_mjaso();
    
delete_all();

не читаемый, потому что неправильно расставлена табуляция, а не по причине нехваток скобок.


А так уже вполне читаемый...
PHP
if (a==a)
    
set_blablu_mjaso();
delete_all();

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


Спустя 3 минуты, 6 секунд (29.04.2009 - 14:29) waldicom написал(а):
Цитата
может вынести это в отдельную тему,

я бы даже сказал нужно, но у меня не получилось почему-то...

Спустя 18 минут, 35 секунд (29.04.2009 - 14:48) Viking написал(а):
Цитата
я например не пишу..

И я не пишу! и теперь меня за это совесть перестанет мучить...

Спустя 1 час, 9 минут, 34 секунды (29.04.2009 - 15:57) sergeiss написал(а):
twin - когда я сказал "при этом условии", то подразумевал, что если форматирование кривое, то это говорит об отсутствии четкости мышления у человека.

Я для себя, еще с давних времен, когда на Си писал, определил систему форматирования текста и ей следую всегда.
PHP
// если блоки состоит из одной строки
if( .... )
   XXXXXXXX;
// если блок на несколько строк
if(....)
{
  XXXXX;
  XXXXXXXXX;
  XXX;
}
// либо, если блок из нескольких операторов, но в одной строке
if( ..... ) { XXXXX; XX; XXX; }


В ПХП очень полезен "альтернативный" синтаксис. Типа такого
PHP
if(.....) : // FIRST IF - тут ставлю коммент заглавными буквами
XXXXXX;
XXX;
endif;
 // FIRST IF - этот же коммент повторяю в конце блока


При вложенных блоках делаю отступы... И редко-редко запутываюсь в этой структуре, потому что всё четко и понятно!

Но это я про себя написал. Если кому-то удобнее по-другому - то это его дело smile.gif Главное, чтобы система четкая была.

Спустя 2 часа, 19 минут, 50 секунд (29.04.2009 - 18:17) twin написал(а):
waldicom
Вполне серьёзно. Тут дело привычки конечно, но вот к примеру сравнить это:
PHP
foreach ($available_folder as $default_folder){
    
        if (!isset(
$num_messages[$default_folder])){
        
            
$num_messages[$default_folder] = 0;
        }

        if (!isset(
$num_unread[$default_folder])){
        
            
$num_unread[$default_folder] = 0;
        }
    }


с этим:

PHP
foreach ($available_folder as $default_folder)
    {
    
        if (!isset(
$num_messages[$default_folder]))        
        
$num_messages[$default_folder] = 0;
        

        if (!isset(
$num_unread[$default_folder]))
        
$num_unread[$default_folder] = 0;
        
    }

неужели не очевидно?

Спустя 8 минут, 9 секунд (29.04.2009 - 18:25) jetistyum написал(а):
если сделать табуляцию под if - как полложено.. то отлично будет читаться и то и то ..

Спустя 27 минут, 59 секунд (29.04.2009 - 18:53) twin написал(а):
Ну тут разногласие не на счет табуляции, а на счет скобок. Вот торчат хвосты, скобки закрывающие всмысле. И приходится искать, где начало. Хорошо тут код еще ровный, длина операторов одинаковая. А когда елочка получается и чешешь репу - что за скобка, откуда взялась... А это всего навсего одну строчку обрамили. Зачем...

Спустя 1 минута, 58 секунд (29.04.2009 - 18:55) Joker написал(а):
Одну строчку вроде пустяк... а глазам приятно.

Спустя 11 минут, 34 секунды (29.04.2009 - 19:07) waldicom написал(а):
Цитата
Вполне серьёзно. Тут дело привычки конечно, но вот к примеру сравнить это:

По мне очевидно, что первый вариант гораздо лучше. Хотя конечно дело привычки.

Цитата
если сделать табуляцию под if - как полложено.. то отлично будет читаться и то и то ..

Если... А никогда не приходилось работать с чужим кодом, где ни скобок нет, ни форматирования? И думай потом, где что...

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


пысы. IDE... Надо бы открыть флеймовую ветку, кто каким редактором пользуется.

Спустя 1 час, 21 минута, 13 секунд (29.04.2009 - 20:28) kirik написал(а):
Вот я никак не могу понять, зачем сдвигать скобки вот так:
PHP
foreach ($available_folder as $default_folder){
        
// ......
____}

?

Вопрос к sergeiss. Чем удобно использовать if(): .... endif; ? Просто скобки-то полезны тем, что, как сказал waldicom, они помогают найти начало и конец оператора/цикла (при условии нормального редактора).

У меня похоже форматирование, как sergeiss показал:
PHP
// если блоки состоит из одной строки
if( .... )
   
XXXXXXXX;
// если блок на несколько строк
if(....)
{
  
XXXXX;
  
XXXXXXXXX;
  
XXX;
}


Но такой вариант:
PHP
// либо, если блок из нескольких операторов, но в одной строке
if( ..... ) { XXXXXXXXXX; }

никогда не использую.

Цитата (waldicom @ 29.04.2009 - 11:07)
пысы. IDE... Надо бы открыть флеймовую ветку, кто каким редактором пользуется.

Открывай! smile.gif Правда на сколько я помню была такая темка уже smile.gif

Спустя 3 минуты, 48 секунд (29.04.2009 - 20:32) twin написал(а):
Да ради бога, хотите, пишите скобки, какие проблемы... Только почему в одной строке то? Ну так хотя бы:
PHP
foreach ($available_folder as $default_folder)
{   
        if (!isset(
$num_messages[$default_folder]))
        {        
            
$num_messages[$default_folder] = 0;
        }

        if (!isset(
$num_unread[$default_folder]))
        {        
            
$num_unread[$default_folder] = 0;
        }
}

Хотя я лично не вижу удобства, лишний скрол только.

Спустя 4 минуты, 9 секунд (29.04.2009 - 20:36) twin написал(а):
Цитата
Вот я никак не могу понять, зачем сдвигать скобки вот так

Я не знаю, я так не делаю ващето. Это код из PHPBB. smile.gif

Спустя 53 секунды (29.04.2009 - 20:37) bvn написал(а):
Когда-то писал по этому поводу рабочую статью...

Стиль оформления

Что касается стиля оформления, то я рекомендую все же ознакомиться со стандартами PEAR (возможно, вы знаете другие – предложите). В целом я поддерживаю те концепции, которые там изложены и строгое придерживание этому стилю не будет мною порицаемо (а в моих проектах, я буду требовать строго соблюдения стиля). Однако, же сам я не совсем придерживаюсь тех концепций, что изложены в их стандарте и очень поощряю других заражаться моим дурным примером wink.gif
Итак, основные моменты.
1. Отступы, как и в PEAR, только пробелами – никаких символов табуляции (9), однако не 4, а 2 – очень экономит ширину экрана, чтобы по-меньше приходилось скроллить в редакторах без переноса.

2. Я всегда ставлю открывающую фигурную скобку в той же строке, что и основной оператор:
PHP
if (!$db) {
else {
}
while (!feof($f)) do {
}
class Myclass extends Alienclass {
  fucntion __costruct() {
  }
}

3. Я избегаю использования фигурных скобок в простых условиях:
PHP
if (!$res) trigger_error('ERROR!', E_USER_ERROR);


4. Чем городить такое
PHP
if ($a > $b)
{
    $res = $a;
}
else
{
    $res = $b;
}


где на одни только фигурные скобки уходит 4 строчки, я всегда использую этот синтаксис:
PHP
$res = ($a > $b)? $a : $b;


И не надо рассказывать, что это менее наглядно, чем в предыдущем примере wink.gif

5. Я не брезгую так же и такой экономией строк при инициализации переменных (не при расчетах):
PHP
$a = 0; $b = 5; $d = ''; $mas = array();
  $x = $y = $z = 5;

...
С тех пор изменилось только одно - перестал пользоваться mcedit при редактировании программ, перестал экономить ширину экрана и, как следствие, использую стандартный отступ в 4 пробела. А в остальном остался при своем мнении все вполне наглядно смотрится...
Ну и, пожалуй, 4-ым пунктом все реже и реже пользуюсь, хотя и не брезгую...

Спустя 4 минуты, 51 секунда (29.04.2009 - 20:42) kirik написал(а):
Цитата (twin @ 29.04.2009 - 12:32)
Хотя я лично не вижу удобства

Удобство только в том, что видно и открытую и закрытую скобки smile.gif Если выражение внутри оператора будет слишком большое, то открытая скобка потеряется.

Цитата (twin @ 29.04.2009 - 12:32)
Только почему в одной строке то?

Кроха сын к отцу пришел
И сказала кроха:
- "Код форматить - хорошо";
- "Кодить в строчку - плохо".
smile.gif

Спустя 2 минуты, 3 секунды (29.04.2009 - 20:44) kirik написал(а):
Цитата (bvn @ 29.04.2009 - 12:37)
Отступы, как и в PEAR, только пробелами – никаких символов табуляции

Если использовать пробелы, то прога будет больше весить cool.gif

Спустя 19 минут, 58 секунд (29.04.2009 - 21:04) twin написал(а):
Цитата
Удобство только в том, что видно и открытую и закрытую скобки

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

Спустя 2 часа, 6 минут, 20 секунд (29.04.2009 - 23:10) sergeiss написал(а):
Цитата (kirik @ 29.04.2009 - 20:28)
Вопрос к sergeiss. Чем удобно использовать if(): .... endif; ? Просто скобки-то полезны тем, что, как сказал waldicom, они помогают найти начало и конец оператора/цикла (при условии нормального редактора).

Чем удобно, говоришь? Нагляднее. В большом тексте найти (просто просматривая глазами) endif с комментарием легче, чем фигурную скобку. Даже если она будет также с комментарием.
К тому же, есть еще endwhile и endfor smile.gif А фигурная скобка сама по себе не показывает, конец какого именно блока тут находится. А это также облегчает восприятие.
Например, сравни такие конструкции:
PHP
if( .... )
{
  ...
  for( .... )
  {
    ...
    
// тут много-много строчек с данными
    
...
    ...
    if( ... )
    {
      ...
      ...
      ...
    } 
// end of if
    
...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    if(....)
    {
      while(.... )
      {
        .....
        .....
        .....
      }  
// end of while
    
// end of if
  
// end of for

// и вот это
if( .... ):
  ...
  for( .... ) :
    ...
    
// тут много-много строчек с данными
    
...
    ...
    if( ... ) :
      ...
      ...
      ...
    endif; 
// end of if
    
...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    if(....) :
      while(.... ) :
        .....
        .....
        .....
      endwhile;  
// end of while
    
endif; // end of if
  
endfor; // end of for
endif;

При большой вложенности конструкций мне больше нравится второй вариант. И если добавить комменты, то все равно второй вариант лучше.

Спустя 23 минуты, 31 секунда (29.04.2009 - 23:34) kirik написал(а):
Цитата (sergeiss @ 29.04.2009 - 15:10)
При большой вложенности конструкций мне больше нравится второй вариант.

Понял, спасибо! smile.gif

Спустя 5 минут, 35 секунд (29.04.2009 - 23:39) jetistyum написал(а):
Холивар прям какойта smile.gif
а я тоже за скобочки, а не альтернативный синтаксис...
только открывающую оставляю на одной строке с оператором ... а не
но и
PHP
$id = isset($POST['id'])&&$_POST['id']!=''?$_POST['id']:null;

применяю, т.к. реально экономит место и вполне читаемо и понимаемо.. чай не первую неделю пишм-с...

А вообще не имеет смысла кого-то переучивать или переубеждать. если человеку удобнее так - пусть пишет, если он пишет именно и только для себя. Ну а в комманде достигаются договоренности.

Спустя 6 часов, 52 минуты (30.04.2009 - 06:31) Sylex написал(а):
Я бы использовал так:
PHP
if (a==aset_blablu_mjaso();
delete_all();


Но в основном, конечно, стараюсь использовать фигурные скобки:

PHP
if (a==a) {
    
set_blablu_mjaso();
}
delete_all();

Спустя 5 часов, 39 минут, 56 секунд (30.04.2009 - 12:11) bvn написал(а):
Цитата (kirik @ 29.04.2009 - 19:44)
Цитата (bvn @ 29.04.2009 - 12:37)
Отступы, как и в PEAR, только пробелами – никаких символов табуляции

Если использовать пробелы, то прога будет больше весить cool.gif

Вы просто ниразу не сталкивались с тем, как рвут форматирование с табуляцией некоторые редакторы... А если экономить пробелы, то тогда нафиг вообще форматирование - писать все в 1 строчку smile.gif

Спустя 4 минуты, 20 секунд (30.04.2009 - 12:16) waldicom написал(а):
Цитата (bvn @ 30.04.2009 - 10:11)
Цитата (kirik @ 29.04.2009 - 19:44)
Цитата (bvn @ 29.04.2009 - 12:37)
Отступы, как и в PEAR, только пробелами – никаких символов табуляции

Если использовать пробелы, то прога будет больше весить cool.gif

Вы просто ниразу не сталкивались с тем, как рвут форматирование с табуляцией некоторые редакторы... А если экономить пробелы, то тогда нафиг вообще форматирование - писать все в 1 строчку smile.gif

Я пользуюсь табом, но в настройках редактора стоит что-то типа "заменять таб на пробелы". Довольно удобно

Спустя 4 часа, 57 минут, 19 секунд (30.04.2009 - 17:13) Sylex написал(а):
waldicom
+10!

Таб - на 4 пробела smile.gif

Спустя 1 день, 54 минуты, 37 секунд (1.05.2009 - 18:07) bvn написал(а):
Так а я ж о чем? smile.gif Я против символа с кодом 0x09h, а не против клавиши ТАВ smile.gif)


_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.