Красивый скрипт или стили программирования. Эта глава тоже здесь написана не просто так. Скрипт должен быть красивым. И нужно это, как ни странно, не для красоты. Дело в том, что очень мало программ пишутся раз и на всегда, и чтобы сразу работала как надо. Скрипт, написанный красиво, вам самим гораздо проще отлаживать, модифицировать. Кроме того, по различным причинам работать с вашим творением может быть придется другому человеку. В красивом, правильно написанном коде разобраться гораздо проще. Давайте разбираться, как должен выглядеть красивый код. Вначале глянем на коды с недочетами, потом их разберем.
№1 <?PHP for($i=0;$i<5;$i++){if($i%2)echo $i;echo 'O<hr>';} ?> №2 <?PHP for( $i = 0 ; $i <5 ; $i++) { if ($i % 2)echo $i; echo 'О<hr>' ;} ?> №3 <?PHP $a = $b+$c * $d ?> №4 <?PHP for ($i = 0; $i < 5; $i++) { if ($i % 2) echo $i; echo '<hr>'; } ?> Все приведенные скрипты написаны синтаксически верно, это рабочие скрипты. Вот, рассмотрим код №1. Тут всё написано строчку. Ну-ка быстренько: в каких случаях код выводит большую букву О? Не удобно искать, да? А если бы код был на много листов? В чем недостатки кода №2, объяснять даже не надо. Попробуйте ответить на тот же вопрос, что и в предыдущем случае. Недостатком кода №3 является то, что если вы беглым взглядом пробежитесь по нему, может создастся обманчивое впечатление, будто сначала идет операция сложения, т.е. подобное расставление пробелов тоже затрудняет восприятие. В коде №4 из-за табуляции кажется, что тег '<hr>' выводится только при выполнении условия, однако если глянуть на фигурные скобки, мы увидим, что это не так. Особо упрямые личности по поводу двух последних примеров скажут, мол, ничего подобного, всё прекрасно видно: что и как. Зря так. В больших кодах подобное отношение к структурированности кода может вылезти боком через самые неожиданные места. Да и в маленьких тоже. Основные правила. Итак, что видно из первого и второго примера, думаю рассказывать не надо. Третий пример говорит нам о том, что расстановка пробелов должна быть постоянной. Не должно быть такого, что тут 2 пробела, тут 4, тут вообще ни одного. Еще тут стоит сказать, что в длинных выражениях CODE:$b = $a + $c +$z + $f * $r + $e * $f + $a + $o Операцию умножения, всё же стоит взять в скобки, хоть она и первой все равно выполняется. Это упростит читаемость кода. И еще о пробелах: Всегда отделяйте с двух сторон пробелами запятые и другие операторы. CODE:$b=$a+$c+$z+$f*$r+$e*$f+$a+$o Приятно читать такую кашу? Из 4го примера мы видим роль отступов. Отступы должны показывать нам вложенность структур программы. Это значит, что все операторы, вложенные ,например, в цикл, должны начинаться на какое-то одинаковое расстояние от левого края дальше, чем сам оператор цикла. То же и с условиями. Операторы одного уровня вложенности должны находиться на одном расстоянии от левого края. Расстановка фигурных скобок. Существует множество стилей: <?PHP if ($a > $b) { // операторы } ?>
<?PHP if ($a > $b) { // операторы } ?> <?PHP if ($a > $b) { // операторы } ?> <?PHP if ($a > $b) { // операторы } ?> Я пользуюсь первым способом в блоках if, for и т. д. и вторым при описании функций. Первый способ мне нравится тем, что закрывающая скобка находится на одной вертикали с тем, что она открывает (в данном случае с оператором if), а первая скобка не создает лишнего (мне так кажется, что лишнего) отступа после if. Для функций я использую второй способ, потому что... да даже не знаю почему; нравится мне так. Другие способы мне не нравятся из-за большого количества табуляции. В любом случае, закрывающая фигурная скобка должна располагаться одна на строке и должно сразу быть видно, что она закрывает. Имена переменных, функций и классов. Имена должны говорить программисту о назначении переменной, функции или пр.. Что вы можете сказать, увидев в середине кода $a = 'Table' ? Ничего по существу. А вот $product = 'Table' нам уже подсказывает о чем речь. То же и с функциями: $r = g($a, $b) и $sum = add($serv_1, $serv_2). Видна разница? Но не нужно давать функциям (точнее, ни чему не надо) имена типа add_first_service_and_one_more_s ervice_returning_their_summ_as_i nteger_value. Почему - объяснить? Комментарии. Что надо комментировать. Комментировать нужно: * Необычные решения. Потому, что потом не вспомните, что вы тут имели в виду. А другой человек - тем более, это не поймет. * Решения, над которыми пришлось подумать. На случай, если захотите что-то перелопатить. Возможно, вы уже пытались, и поняли почему надо сделать именно так. Это стоит написать в комментарии. * Назначение длинных блоков. * Длинные логические условия. На человеческом языке. Не "если а больше б и a меньше е". Это и так видно из кода. * То, что на самом деле нуждается в комментарии. Не надо комментировать это: CODE:ibase_connect($host, $user, $passwd); // соединяемся с базой данных на Интербейз Какие должны быть комментарии. Сравните: <?PHP $a = 1; // Присваиваем переменной А единицу $b = 6; // Присваиваем Б значение 6 // Цикл по $i от 1 до 6 for ($i = 1; $i <= $b; $i++ ) $ a = $a * $i; // Умножаем А на $i ?> <?PHP // Находим факториал числа $b $a = 1; $b = 6; for ($i = 1; $i <= $b; $i++ ) $a = $a * $i; ?>
Разница есть? Куча комментариев в первом коде абсолютно ничего нам не сказала, а три с половиной слова в втором случае, дали нам полностью понять что тут для чего. Комментировать прежде всего надо не то, что мы делаем, а зачем. Кстати, вот еще: <?PHP function factorial($b) $res = 1; for ($i = 1; $i <= $b; $i++ ) $res = $res * $i; ?> Здесь всё и без комментариев ясно. Это о том, как надо называть функции и переменные. Где располагаются комментарии. Обычно комментарий одной команды располагается после точки с запятой, а комментарий блока располагается в строке над первой его командой. Больше тут нечего написать, по-моему. И еще о комментариях. Не надо лениться комментировать. Многие программисты не любят комментировать свой код, но дико возмущаются, когда им приходится работать с чужим не комментированным кодом. О вложенности. Здесь скажу только то, что ситуации типа
<?PHP function any_func() { if ( условие ) { // вся функция } } ?> Их лучше описывать вот так: <?PHP function any_func() { if ( ! условие ) { exit; } // вся функция } ?> GOTO Этот оператор присутствует во многих языках программирования, и в PHP 5.3.0 он тоже появился. Но называется он там Jump. Использовать его можно, но только тогда, когда это необходимо; когда это облегчает чтение и реализацию кода; когда чтобы избежать GOTO приходится вводить множество дополнительных проверок и переменных. Однако, возникновение такой ситуации, может свидетельствовать и об ошибке проектирования. Но если уж надо, то ладно. Только не стоит злоупотреблять. Для выходов из цикла, кстати, в PHP есть break, для повторения - continue. У оператора break можно указать число из скольких уровней вложенности нужно произвести выход. Так, что избегать его возможности есть. Еще несколько полезных правил:
var container = document.getElementById('nativeroll_video_cont');
if (container) {
var parent = container.parentElement;
if (parent) {
const wrapper = document.createElement('div');
wrapper.classList.add('js-teasers-wrapper');
parent.insertBefore(wrapper, container.nextSibling);
}
}
|