Неділя, 21.04.2019, 23:35
Гость

Мішатронік

Автор - Кренцін Михайло

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Багато схем ви спаяли за останній рік?
Всього відповідей: 5
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0




Красивый скрипт или стили программирования.

Эта глава тоже здесь написана не просто так. Скрипт должен быть красивым. И нужно это, как ни странно, не для красоты.
Дело в том, что очень мало программ пишутся раз и на всегда, и чтобы сразу работала как надо. Скрипт, написанный красиво, вам самим гораздо проще отлаживать, модифицировать. Кроме того, по различным причинам работать с вашим творением может быть придется другому человеку. В красивом, правильно написанном коде разобраться гораздо проще.
Давайте разбираться, как должен выглядеть красивый код. Вначале глянем на коды с недочетами, потом их разберем.

 

№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 $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 можно указать число из скольких уровней вложенности нужно произвести выход. Так, что избегать его возможности есть. 

Еще несколько полезных правил:

  • Хороший код комментирует себя сам
  • Никогда не используйте goto, строго никогда. Нет и не придумают таких конструкций, в которых бы нельзя было без него обойтись.Если у Вас в коде один участок встречается более 1 раза, стоит подумать о том, чтобы сделать его функцией. Это, правда, стоит относить к логически законченному фрагменту, то есть к такому участку, который можно объединить в логическую форму.
  • Хорошо написанный скрипт сэкономит время программиста - одного пишущего и десяти читающих.
  • Я рекомендую писать комментарии только на английском языке, чтобы в любой кодировке они были прочитаны как надо. Я рекомендую писать не транслитом, а на литературном английском.
  • Не стоит тратить время на придумывание супер-хитрых алгоритмов, которые сэкономят 0,1 секунды при бенчмарке 10000. Время программиста стоит куда дороже времени этих бездушных железок. И, к тому же, процессорное время дешевеет, а время программистов - дорожает. Это правило стоит применять, если приросты в производительности явно малы по сравнению с затратами по разработке.
  • При именовании функций и переменных придерживайтесь определенного - но - одинакового стиля. Не стоит писать, скажем

    <?PHP 
    $user_password
    ="";
    $userPassword="";
    ?>

  • Вы наверняка забудете, как и в каком случае называли эту переменную. Придерживайтесь одного стиля и Вам не придется тратить время на поиск того, как же именно Вы именовали эту самую переменную.
  • Для облегчения чтения в PHP я рекомендую указывать приставку типа данных впереди имени переменных (так называемая "венгерская нотация"). Связано это с тем, что в PHP нет явного определения типа, и такое именование помогает сразу понять, к какому типу все-таки относится переменная:

     

    <?PHP 
    $sUsername
    ="user123";
    $iUserage=20;
    $bUserdeleted=false;
    ?>
     

  • Пишите скрипт так, как будто завтра Вам придется его дорабатывать. Старайтесь продумывать его так, чтобы его было легко масштабировать.

 

Форма входа
Пошук
Календар
«  Квітень 2019  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930
Друзі сайту
Погода у Вінниці


Єдина Країна! Единая Страна!