Стандарт оформления кода

2.27K
.
Добрый день.
Начал переработку моего стандарта оформления кода на языке PHP c целью сделать его более строгим и (если можно так сказать) научным, поставив на крепкий фундамент в ожидании критического отношения.
Так как я не успел реинженерить весь стандарт, прилагаю только его часть в формате pdf (сам же стандарт располагается в другом формате, более удобном для чтения и поиска). Хотелось бы обсудить основные критерии оценки и правила формата. С чем вы не согласны и почему.
Надеюсь кому то это будет полезно, так как, по сути, данный стандарт квинтэссенция моих знаний в PHP в области качественного кода.
Прикрепленные файлы:
.
Почитать бы это нашему преподу
.
))) Сочуствую
.
reaper
Критерии читабельностии эффективности в расчет не беруться


Что на счёт
($a == $b)? 'looooooooooooooooooooooooooooooooong' : 'loooooooooooooooooooooooooooo000000000000000000ooooooooooooong statement';



}
else {

Не понимаю чем оно лучше } else {
Как мне кажется это только пустая трата строк.
Хотя с другой стороны может быть так даже правильнее.
Если, например, все выражения принято записывать с новой строки.
А с другой стороны это же часть if, и можно допустить себе распологать на одной строке.
Спорный вопрос. Надеюсь, понятно выразился.


Ну и на счет пробелов тоже думаю, что это не критично и разницы
в if (true) {
и
if(true){
для меня особой нет. Предпочитаю первый вариант, так как более приятен глазу .

С остальным согласен и всегда стараюсь этого придерживаться.
Еще интересно, что насчет оступов. Табы, пробелы, если пробелы, то сколько?
.
Delphinum
reaper, Что на счёт
($a == $b)? 'looooooooooooooooooooooooooooooooong' : 'loooooooooooooooooooooooooooo000000000000000000ooooooooooooong statement';

___
В таких случаях, предпочитаю не использовать тернарный оператор вовьсе. Думаешь стоит включить это в правило?

}
else {

Не понимаю чем оно лучше } else {
Как мне кажется это только пустая трата строк.
Хотя с другой стороны может быть так даже правильнее.
Если, например, все выражения принято записывать с новой строки.
А с другой стороны это же часть if, и можно допустить себе распологать на одной строке.
Спорный вопрос. Надеюсь, понятно выразился.
___
Вполне! Я тоже долго думал над этим вопросом, и склоняюсь к тому, что это часть if и она должна быть отдельна от else, но все еще не решил точно.


Ну и на счет пробелов тоже думаю, что это не критично и разницы
в if (true) {
и
if(true){
для меня особой нет. Предпочитаю первый вариант, так как более приятен глазу .
___
Но там же критерии ;) Вообще когда смотрю на свой вариант, без проблем нахожу условие и выявляю конструкцию, потому считаю пробелы просто лишними

С остальным согласен и всегда стараюсь этого придерживаться.
Еще интересно, что насчет оступов. Табы, пробелы, если пробелы, то сколько?
___
Только пробелы, так как это более моноширно штоли. Я еще не смот сформулировать это правило точно, но сам пользуюсь пробелами.
Использую 2 пробела, считаю этого достаточным для визуального отбиения блока, 4 по моему лишне.
.
reaper
Delphinum,
В таких случаях, предпочитаю не использовать тернарный оператор вовьсе. Думаешь стоит включить это в правило?


Надо для начала хорошенько подумать.
У меня довольно часто выходят такие вот выражения. А еще учитывая вложенность, там вообще без переносов не обойтись, иначе очень сложно читать.
В итоге получается что-то вроде этого:

$value = is_numeric($value)
    ? (int) $value
    : (is_string($value)
        ? $this->db->real_escape_string($value)
        : (is_int($value)
            ? $value
            : null
        )
    );


Про пробелы можно долго спорить. От того, что я стану вводить на два пробела меньше для меня ничего не изменится. Экономия на спичках. ИМХО.

Для отступов использую 4 пробела. Вынужден согласиться, избыточно, но ничего менять не хочется, это опять перевыкать .
Кстати можно было бы и табы использовать, хотя бы потому что это даёт возможность каждому настроить отступы по своему усмотрению. А моноширинно или нет, я разницы не замечаю. Вообще, как понять, моноширинно?
.
reaper, Считаю что то, как ты используешь тернарный оператор, слишком малочитабельно, лучше уж использовать if...else в таких случаях. Всегда считал что тернарый оператор это такой же + или -, то есть мы же не пишем:
51234 +
2133423423
Так зачем писать такие сложные логические конструкции с помощью не подходящего инструмента.

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

Моноширность это и есть невозможность настроить под себя. Есть заданный размер, им и пользуемся. На счет числа пробелов, думаю оставлю пока как есть. На счет табуляции, были случае что при переходе между текстовыми редакторами, ширина менялась и приходилось лезть в настройки, что раздражает. Вообще не вижу смысла слишком расширять табуляцию, когда два пробела вполне себе формируют визуальные блоки.
.
Delphinum, Хорошо, про тенарный оператор понятно. Я его всегда воспринимал как нечто среднее между операторами и конструкциями. Мне и самому немного неприятно такое видеть. Исправлюсь.

Раз пробелы там лишние и читабельности не мешаю, то почему тогда ты решил, что обрамляющие пробелы у операторов сделают код читабельнее? Такое актуально разве что в более сложных конструкциях. А в выражениях, где всего лишь одно присваивание читабельность я думаю никак от этого не пострадает.

Про отступы у меня вопросов больше нет.
.
reaper, Вообще я делю все конструкции ЯП на два типа:
1. Групповые - это такая конструкция, из структуры которой сразу выделяется ее выражение. Как правило такая конструкция имеет единственное выражение. Это на пример if(условие). Увидев такое сразу понятно что это условие, и очень легко найти само условное выражение, потому отбивать такое пробелами if ( условие ) { я не вижу смысла;
2. Одиночные - это более мелкие, но при этом более многочисленные конструкции, такие как математические или логические выражения. Элементы таких конструкций часто столь малы, что их можно спутать с операторами, на пример как тут: $a=$b=52/8*(12+98)/$c. Я думаю, что в такой конструкции, состоящей из малых операторов (в отличии от if, for и т.д.), тажело выделить операторы и операнды, потому лучше использовать отбиение: $a = $b = 52 / 8 * (12 + 98) / $c. Стоит отметить, что отбиение от скобок я не использую, так как скобки и так довольно сильно выделяются на общем фоне.
.
Зачем писать $message = 'Hello world'."\n";
Если можно написать так:

$message = 'Hello world'. PHP_EOL; ?
Всего: 86