В программирование существуют правила, которые задают определенные нормы прописания исходного кода. Эти правила не обязательны, но они позволяют сделать код читаемым и понятным.
Когда вы работаете в крупной компании в которой по мимо вас есть еще несколько программистов, то вам приходится работать с чужим кодом. Для того чтобы чтение кода было удобным для всех, придумали «Правила прописания исходного кода».
В своих записях я не всегда придерживаюсь таких правил, по той причине, что мне не удобно это делать, так как я пишу записи в редакторе в котором нет возможности проставлять табуляции.
Правила переноса строки
Нужно стараться избегать строк длинной более 120 символов, так как многие компиляторы не переносят строки, и из-за этого многим приходится использовать ползунок, для чтения полной строки.
Если строка превышает этот размер, то нужно использовать правила переноса строки:
- переносить можно после запятой или перед оператором;
- переносимая строка должна быть сдвинута относительно верхней на один символ табуляции;
Пробелы и табуляция
Пробелы и табуляции несут разные функции. Для тех кто не знает, табуляция — это отступ, который выполняется нажатием на клавишу Tab и равен 8 пробелам. Табуляция, так же отличается тем, что в некоторых компиляторах она может регулироваться в настройках и вы можете указать нужную для вас длину отступов.
В каких случаях ставится табуляция:
- Используется при переносе строк (правило, выше)
- Используется для обозначения подчиненности.
В каких случаях ставится пробел:
- Один пробел используется в объявлении методов после запятой, но не перед скобками:
TestMethod($a, $b, $c);
Примеры неправильного использования:TestMethod($a,$b,$c);
TestMethod( $a, $b, $c );
- Так же одиночный пробел используют для выделения операторов:
$a = $b * $c / $d;
Пример неправильного использования:$a=$b*$c/$d;
- Также пробелы используются при форматировании циклов:
for ($i = 0; $i < 10; $i++)
.Пример неправильного использования:for($i=0;$i<10;$i++)
Правила расстановки фигурных скобок
Открывающая скобка должна ставиться под соответствующим оператором и на одном отступе с ним. Закрывающая скобка должна ставится под соответствующей открывающей.
Пример:
if ($condition)
{
...
}
Использование тернарного оператора «?:»
Условие следует заключать в скобки, тем самым отделяя его от остального кода. По возможности, действия, производимые по условию, должны быть простыми функциями. Если весь блок ветвления плохо читается, то стоит заменить его на if/else.
Пример: ((условие) ? funct1() : func2());
Выражения
Желательно, чтобы в каждой строчке присутствовало только одно выражение.
Пример. Неправильно писать так:
$a = $b; $b = $c; $c = $a;
Правильно писать так
$a = $b;
$b = $c;
$c = $a;
Инструкции «if», «else», «while» и т.п.
Допустимы два вида написания инструкций:
- если тела всех частей инструкции состоят не более чем из одного выражения, то инструкция может записываться в виде
if (условие) действие1; else действие2;
- если тело хотя бы одной из частей состоит более чем из одного выражения, то инструкция должна записываться в виде
if (условие) { действие1; } else
При написании инструкций должно строго применяться правило Форматирование подчиненности: тело инструкции должно быть сдвинуто на один символ табуляции вправо от самой инструкции. Фигурные скобки используются всегда, должны находиться на отдельных строках, на одном уровне с инструкцией.
Пример. Неправильно писать так:
if ($a == 0) $a = 10;
else{
$a = 5;
$b = 10;}
Правильно писать так:
if ($a == 0)
{
$a = 10;
}
else
{
$a = 5;
$b = 10;
}
Сложные инструкции
Сложные инструкции следует разбивать по строкам. Например,
if(COption::GetOptionString("main", "new_user_registration", "N")=="Y" && $_SERVER['REQUEST_METHOD']=='POST' &&
$TYPE=="REGISTRATION" && (!defined("ADMIN_SECTION") || ADMIN_SECTION!==true))
Можно записать как:
if (COption::GetOptionString("main", "new_user_registration", "N") == "Y"
&& $_SERVER['REQUEST_METHOD'] == 'POST' && $TYPE == "REGISTRATION"
&& (!defined("ADMIN_SECTION") || ADMIN_SECTION !== true))
{
}
Очень сложные инструкции рекомендуется разбивать на несколько более простых. Например,
if((!(defined("STATISTIC_ONLY") && STATISTIC_ONLY && substr($APPLICATION->GetCurPage(), 0,
strlen(BX_ROOT."/admin/"))!=BX_ROOT."/admin/")) && COption::GetOptionString("main", "include_charset", "Y")=="Y"
&& strlen(LANG_CHARSET)>0)
Можно записать так:
$publicStatisticOnly = False;
if (defined("STATISTIC_ONLY")
&& STATISTIC_ONLY
&& substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT."/admin/")) != BX_ROOT."/admin/")
{
$publicStatisticOnly = True;
}
if (!$publicStatisticOnly && strlen(LANG_CHARSET) > 0
&& COption::GetOptionString("main", "include_charset", "Y") == "Y")
{
}
или так:
if (!defined("STATISTIC_ONLY") || ! STATISTIC_ONLY
|| substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT."/admin/")) == BX_ROOT."/admin/")
{
if (strlen(LANG_CHARSET) > 0 && COption::GetOptionString("main", "include_charset", "Y") == "Y")
{
}
}
Форматирование массивов
Массивы, которые записываются в несколько строк, следует форматировать следующим образом:
$arFilter = array(
"key1" => "value1",
"key2" => array(
"key21" => "value21",
"key22" => "value22",
)
);
Пустые строки
Пустые строки помогают разбивать код приложения на логические сегменты. Несколькими строками могут отделяться секции в исходном файле. Одной пустой строкой отделяются друг от друга методы и логические секции внутри метода для более удобного чтения.
Именование переменных
- Не используйте подчеркивание для отделения слов внутри идентификаторов, это удлиняет идентификаторы и затрудняет чтение.
- Старайтесь давать переменным, методам и пр. «говорящие» названия. Предпочтительно использовать имена, которые ясно и четко описывают предназначение и/или смысл сущности.
- Старайтесь делать имена идентификаторов как можно короче (но не в ущерб читабельности).
- Если в имени содержится аббревиатура, лучше вместо всех заглавных оставить только первую букву заглавной, а остальные написать строчными. Т.е. лучше задать имя getHtmlStatistic, а не getHTMLStatistic.
- Первое логическое слово должно начинаться с маленькой буквы, остальные логические слова — с большой. Имена переменных могут иметь префиксы, если требуется явно указать тип переменной: ar — для массивов, db — для наборов данных из базы и т.п. Пример:
$testCounter
,$userPassword
. - При именование функций и методов, каждое логическое слово должно начинаться с заглавной буквы (стиль Паскаль). Например: CountVariable, ChangeUserPassword.
Комментарии
Для пояснения назначения класса или метода необходимо размещать комментарий перед объявлением этого класса или метода. Следует добавлять комментарий о назначении классов и методов к каждому публичному классу или методу. Перед логическими секциями кода желательно добавлять комментарии о том, что данная секция будет делать. Комментарии должны быть только на английском языке.
SQL запросы
Каждая операция SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING должна начинаться с новой строки. Правило переноса длинной строки такое же как в PHP — новая строка с табуляцией.
На этом всё!
Если у вас есть вопросы, пишите их в нашей группе — https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи — https://vk.com/prog_time
В ней мы делимся своим опытом с другими начинающими программистами, поэтому обязательно ответим на ваш вопрос.
Так же прокачивайте свои навыки на нашем канале — https://www.youtube.com/c/ProgTime
Рекомендованные
[pt_view id=»09e17e15kg»]
Вам также будет интересно
[pt_view id=»59d86e5bw7″]