[Perl]Пишем читабельно
Автор: NopGod 20.03.2017 16:16
"Каждый дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, понятный людям." (с) Мартин Фаулер
Abstract
И без того нечитабельный код на перле без каких то стандартов оформления можно превратить в write-only, что и делают начинающие. Не исключение и лютые программисты, которые в спешке могут такое написать, что сами то без пол-литра не разберут. Для того чтобы это избежать, нужно придерживаться некоторых советов по оформлению кода, примеры которых постараюсь описать ниже.
0.1 Half-Tab
Новый блок кода нужно визуально выделить. Для этого используют табуляцию в 4 пробела:
if (time() > $time) { open (FILE, "file.txt"); my @strings=; close(FILE); }
или
{ open (FILE, "file.txt"); my @strings=; close(FILE); }
При чем пробелы лучше ставить вручную, а не настраивать редактор. Так как другой пользователь с другими настройками не оценить ваши старания.
0.2 Пробелы перед фигурной скобкой
Перед открывающей фигурной скобкой нужно сделать пробел
if ($foo == $bar) { ... }
0.3 Открывающая фигурная скобка на той же строке
Открывающая фигурная скобка должна стоять через пробел после ключевого слова и условий, после нее следует перенос строки. Исключение допускается в случае короткого выражение внутри блока:
if ($foo == $bar) { $x = $bar; }
При этом лучше всего пользоваться постфиксным построением:
$x = $bar if $foo == $bar;
0.4 Закрывающая фигурная скобка
Закрывающая фигурная скобка должна стоять на новой строке вертикально совпадающая с ключевым словом.
0.5 else и elsif
Выражения else или elsif следует всегда ставить на новой строке:
if ($foo == $bar) { ... } else { ... }
0.6 Пробелы вокруг знаков операций
$foo = $a + $b; # Зачет $foo=$a+$b; # Незачет
Так же приветствуются пробелы в сложный выражениях в индексe:
$array[ $foo + func( $a, $b ) + $bar ]; # Зачет $array[$foo+func($a, $b)+$bar]; # Незачет
Сюда же можно отнести и пробелы в вызове функции:
function( $a + $b * func( $a ) ); # Зачет function($a+$b*func($a)); # Незачет
0.7 Комментарии
После знака комментария "#" следует пробел.
Комментарий начинается всегда с Заглавной буквы.
Строчка комментария должна следовать тем же правилам что и строчка кода:
if ($foo == $bar) { # Так НАДО делать } if ($foo == $bar) { # Так НЕ НАДО делать }
0.8 Слишком длинные строки
Длинные строки лучше разбить переводом строки:
if ($bla_bla_bla_scalar && $very_long_scalar ) { $foo = $bar; }
0.9 Точка с запятой и запятая
В перле можно опускать точку с запятой за последним выражением в блоке, но это делать не следует. Это в первую очередь мешает при добавлении строчек в будущем, можно легко не заметить отсутствие точки с запятой и сделать ошибку.
По этим же причинам следует ставить запятую после последнего элемента списка:
%color = ( 'top' => 'green', 'body' => 'red', 'footer' => 'black', );
1.0 Выравнивание по вертикали
Похожий код следует выравнивать по вертикали для лучшей читабельности:
$foo = $bar; $foo = $bar ? $penis : $not; $foo = $penis ? $bar : $not;
1.1 Переменные
Переменным принято давать осмысленные названия.
Названия переменным даются всегда(!) в нижнем регистре:
$debug, @debug, %debug # Зачет $Debug, @Debug, %Debug # Незачет
Исключение здесь это константы которым даются названия только в верхнем регистре ( $DEBUG ).
Несколько слов в название разделяются подчеркиванием:
$var_name_test # Зачет $VarNameTest # Незачет
Массивы принято называть во множественном числе, т.к. работают с ним обычно как со списком ( @names, @dirs ), а скаляры и хеши в единственном ( $name, %config ).
1.2 Именованные итераторы в циклах
Их стоит использовать только если тело цикла короткое:
foreach (@strings) { print $_; }
или короче
print foreach @strings;
В остальных случаях лучше использовать явно указанную локальную переменную:
foreach my $string (@strings) { # 200 строк кода }
############################################
Это далеко не все советы, но самый главный выглядит так:
Попробуйте отключить подсветку синтаксиса и прочитать свой код еще раз.
Лучше всего это использовать с методом "Self_view". Отключить подсветку, сходить попить кофе/чай/пиво, отдахнуть и повторить попытку прочтения кода.