DroidScript
DroidScript
учимся и разрабатываем

"Плохой код" и его исправление

14.12.2017

Если вы знакомы с JavaScript, то, наверно, обратили внимание на некорректное объявление переменных без ключевого слова var в примерах DroidScript, документации, на Wiki, набросках сообщества на официальном форуме.

На форуме разработчикам был задан вопрос по этому поводу, так как "некорректный" код примеров наносит вред обучающимся, демонстрируя стиль написания "плохого кода". В своём ответе разработчики согласились с этим, но заметили, что, во-первых, единых требований к оформлению кода нет и быть не может, во-вторых, стиль программирования на разных языках и в разное время менялся и продолжает меняться, в-третьих, данное упрощение сделано в целях более простой подачи материала, а программисты могут познакомиться с правилами написания "хорошего" кода из известных источников.

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

Выполнить

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

Для явного указания того, что переменные являются локальными, перед их названиями в JavaScript принято ставить символ подчеркивания "_". Это упрощает отладку и сокращает количество ошибок. Если внутри функции находится переменная без префикса _, то это либо не локально объявленная переменная (глобальная, параметр функции), либо имя локальной переменной задано с ошибкой.

В DroidScript большая часть работы происходит с объектами и можно легко забыть, какая переменная ссылается на компоновщик, кнопку, текстовое поле и т.д. Поэтому в префикс мы добавили аббревиатуру названия типа объекта, принятую в DroidScript: lay - Layout, txt - Text. Теперь понятно без проверки типа, что_layMain ссылается на компоновщик, а _txtMsg на текстовой объект.

Для создания объекта используется анонимная самовызывающаяся функция без параметров вида (function(){})(), где (function(){}) - функциональное выражение, а скобки за ним - вызов данной функции. Такая конструкция часто используется в JavaScript. Если функция не вызыватся из других частей кода, то для чего её задавать имя?

© 2016-2024 
actech