Главная | Форум | Статьи | Фaйлы| Картинки WoW | Профиль | Регистрация | Вход

[ Новые сообщения · Правила форума · Поиск · RSS ]

WoW-Info — информационный World of Warcraft портал

[Урок]№ 13 - Красивый скрипт или стили программирования. - Форум

  • Сторінка 1 з 1
  • 1
[Урок]№ 13 - Красивый скрипт или стили программирования.
pro[100]DeadlyДата: Понеділок, 03.01.2011, 12:12 | Сообщение # 1



pro[100]Deadly
Группа: Видалені

Замечания:






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

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

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

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

Хороший код комментирует себя сам
Никогда не используйте goto, строго никогда. Нет и не придумают таких конструкций, в которых бы нельзя было без него обойтись.Если у Вас в коде один участок встречается более 1 раза, стоит подумать о том, чтобы сделать его функцией. Это, правда, стоит относить к логически законченному фрагменту, то есть к такому участку, который можно объединить в логическую форму.
Хорошо написанный скрипт сэкономит время программиста - одного пишущего и десяти читающих.
Я рекомендую писать комментарии только на английском языке, чтобы в любой кодировке они были прочитаны как надо. Я рекомендую писать не транслитом, а на литературном английском.
Не стоит тратить время на придумывание супер-хитрых алгоритмов, которые сэкономят 0,1 секунды при бенчмарке 10000. Время программиста стоит куда дороже времени этих бездушных железок. И, к тому же, процессорное время дешевеет, а время программистов - дорожает. Это правило стоит применять, если приросты в производительности явно малы по сравнению с затратами по разработке.
При именовании функций и переменных придерживайтесь определенного - но - одинакового стиля. Не стоит писать, скажем
<?PHP
$user_password="";
$userPassword="";
?>
Вы наверняка забудете, как и в каком случае называли эту переменную. Придерживайтесь одного стиля и Вам не придется тратить время на поиск того, как же именно Вы именовали эту самую переменную.
Для облегчения чтения в PHP я рекомендую указывать приставку типа данных впереди имени переменных (так называемая "венгерская нотация"). Связано это с тем, что в PHP нет явного определения типа, и такое именование помогает сразу понять, к какому типу все-таки относится переменная:
<?PHP
$sUsername="user123";
$iUserage=20;
$bUserdeleted=false;
?>
Пишите скрипт так, как будто завтра Вам придется его дорабатывать. Старайтесь продумывать его так, чтобы его было легко масштабировать.



Сообщение отредактировал pro[100]Deadly - Понеділок, 03.01.2011, 12:20
 
  • Сторінка 1 з 1
  • 1
Пошук:

Новые сообщения в темах
Сдам в аренду сервер и хостинг · (Хост Предложения)
Автор: redlaine
Последнее сообщение в 23:53
хаха :D · (Приколы)
Автор: [N1ke]Medved
Последнее сообщение в 18:40
Autobattle - новый боевой бот ... · (Боты для WoW)
Автор: terrikon
Последнее сообщение в 18:39
PvE руководство для Чернокнижн... · (Чернокнижник)
Автор: Darkensand
Последнее сообщение в 18:38
Пустой свиток (Часть 11) · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:37
Друиды в Катаклизме: Официальн... · (Друид)
Автор: Darkensand
Последнее сообщение в 18:37
[Баг 3.3.5] Фарм ледяных бадже... · (Читы для WoW)
Автор: Darkensand
Последнее сообщение в 18:35
FarmBot (Бот для фарма руды и ... · (Боты для WoW)
Автор: homma
Последнее сообщение в 18:34
Почему мы сражаемся: ролевая и... · (Воин)
Автор: Darkensand
Последнее сообщение в 18:34
Книги по Wold of Warcraft · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:33
Маг огня в Cataclysm · (Маг)
Автор: Darkensand
Последнее сообщение в 18:33
Как начать играть в World of W... · (Полезно знать)
Автор: Belkmondesh
Последнее сообщение в 18:32
Характеризация профессий · (Профессии)
Автор: Darkensand
Последнее сообщение в 18:31
Что значит для арканов бета те... · (Маг)
Автор: Darkensand
Последнее сообщение в 18:31

Контакты Контакты Copyright WoW-Info — World of Warcraft портал © 2025 | Условия и правила использования ресурса | Реклама / Услуги
WoW-Info портал.World of Warcraft портал — готовые сервера, сайты, картинки, аддоны, патчи, читы, баги, mangos, ArcEmu, TrinityCore, Warcraft 3, новости, Cataclysm...
Яндекс.Метрика Хостинг від uCoz