ГлавнаяУтилитыСофтСтатьиКаталогГостевая

Правильный стиль написания Java-скриптов

Введение

Если что-то делать — так делать максимально эффективно. Современные скриптовые языки (JavaScript, VBScript) достаточно просты и вполне доступны в освоении непрофессиональными пользователями. Эти языки, собственно, и были созданы с таким расчетом. Однако, зачастую, пользователи не владеют навыками правильного стиля написания скриптов.

Что подразумевается под «правильным стилем»:

  1. краткий код, оптимальный алгоритм (высокая скорость загрузки)
  2. понятный, читабельный код (легкость модификации)
  3. корректная обработка ошибок (недопустимо сообщение браузера об ошибке)

Поводом для написании статьи послужил скрипт, который я нашел в одной гостевой книге. Скрипт выводит на страницу текущую дату, при этом наименование дня недели определяется следующим образом:

 
                if(dow == 0){

                        dow = "Воскресенье";

                } else {

                        if(dow == 1){

                                dow = "Понедельник";

                        } else {

                                if(dow == 2){

                                        dow = "Вторник";

                                } else {

                                        if(dow == 3){

                                                dow = "Среда";

                                        } else {

                                                if(dow == 4){

                                                        dow = "Четверг";

                                                } else {

                                                        if(dow == 5){

                                                                dow = "Пятница";

                                                        } else {

                                                                dow = "Субота";

                                                        }}}}}}
              

Не знаю, как вы — а я был поражен. Я просто не думал, что в XXI веке еще кто-то пишет в таком стиле, хорошо, что дней недели всего семь. Простейшая задача выродилась в настоящего монстра и даже с орфографической ошибкой (суббота пишется с двумя "б"). Попробуем постепенно облагородить данный скрипт.

Switch

Вообще-то, в программировании для выбора значения из списка существует оператор выбора switch ( case ).

Синтаксис из справочника по JavaScript:

switch (expression) {
case label : statementlist
case label : statementlist
...
default : statementlist
}

В нашем случае:

switch (dow) {
case 0 : dow = "Воскресенье";
case 1 : dow = "Понедельник";
case 2 : dow = "Вторник";
case 3 : dow = "Среда";
case 4 : dow = "Четверг";
case 5 : dow = "Пятница";
default : dow = "Суббота";
}

Почему не написано хотя бы таким образом — загадка для меня. Возможно, автор не знал о существовании switch.

Функция

Скрипт стал значительно легче, но требует дальнейшей модификации. Сделаем массив из наименований дней недели и оформим все в виде функции:

function DowName( dow ) {
 var DowList = new Array("Воскресенье","Понедельник","Вторник","Среда", "Четверг","Пятница","Суббота");
 return DowList[dow];
}

Вот, в основном, и все. Но, для того, чтобы функция работала для любого числового dow, нужно написать следующее:

function DowName( dow ) {
 var DowList = new Array("Воскресенье","Понедельник","Вторник","Среда", "Четверг","Пятница","Суббота");
 return dow <0 || dow>=DowList.length ? "Ошибка!" : DowList[dow];
}

Напомню, что изначально днем ошибки служила «cуббота», так как являлась последним днем недели. В нашем случае при некорректном дне недели выдается более осмысленное значение.

Созданную функцию уже можно поместить в библиотеку для дальнейшего использования.

Модификация

Жизнь часто вносит свои коррективы, и, в один прекрасный день, нам понадобится многоязычная функция. Добавим новый параметр lang (язык). При этом позаботимся, чтобы функция в старом своем виде (с одним параметром dow) продолжала исправно работать. Для этого новый параметр lang по умолчанию задаем равным 0. Можно, конечно, поступить иначе и назвать функцию по-новому: например, DowName2. Но это обозначает, что у нас будет 2 функции для определения одного и того же, а товарищ Оккама завещал не плодить сущности ("бритва Оккама").

Наш массив стал двумерным, т.е. массивом массивов. Теперь входные параметры проверяются и для внешнего и для внутреннего массивов.

function DowName( dow, lang ) {
 if ( lang==undefined ) lang = 0;
 var DowList = new Array();
 DowList[0] = new Array("Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота");
 DowList[1] = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
 return dow <0 || lang <0 || lang>=DowList.length || dow>=DowList[lang].length ? "Ошибка!" : DowList[lang][dow];
}

Для внедрения нового языка достаточно описать DowList[2], DowList[3] и так далее. Аналогично, можно вносить коррективы и добавлять новые возможности (например, вывод краткого дня недели).

Заключение

Проверим, является ли наш скрипт «правильным» скриптом и найдем отличия от первоначального варианта.

  1. Код сократился в несколько раз при увеличении функциональности
  2. Скрипт стал более понятен и готов к дальнейшему развитию
  3. Корректно обрабатываются входные параметры

Если даже для такой простой задачи, как наша, преобразования дали вполне ощутимый эффект, то что говорить о сложных деловых приложениях, где эффект может быть измерен в денежном выражении.

 
Рейтинг@Mail.ru Rambler's Top100
Hosted by uCoz