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

Имена переменных и особенности использования переменных

23.05.2020

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

Имена переменных

В отличие от текстового программирования, где имена переменных должны соответствовать определённым правилам, имена переменных (а также функций, компонентов, полей, свойств) в Thunkable X могут начинаться практически с любого символа, и представлять собой произвольную строку, например, “123”, “?”, “стоимость заказа” и т.п. По этой причине переменную имеет смысл воспринимать как пару ”ключ-значение”, где в качестве ключа выступает имя.

Имена глобальных переменных нечувствительны к регистру:

  • аpp Name и app name имеют одинаковый тип и имя, но в разном регистре - это разные переменные
  • аpp Name и stored Name создать не получится

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

Имена глобальных переменных можно изменять во время выполнения приложения при помощи следующих блоков.

Блоки для изменения имени глобальных переменных

Вместо литерала “name” здесь можно использовать переменные, содержащие нужное имя переменной. Для чего требуется изменять имя переменной? Существуют случаи, когда имя переменной невозможно задать на этапе разработки приложения и можно определить только на этапе его выполнения. Если в базе данных Firebase в качестве имён узлов используются идентификаторы пользователей, то значения этих идентификаторов будут известны только после успешной регистрации пользователей. После входа в аккаунт Firebase мы получим идентификатор, который затем можно использовать в качестве имени переменной для прослушивания изменения её значения. Изменение имени переменной также можно использовать при работе со списками или компонентами, так как в текущей версии Thunkable X имена компонентов можно задавать при помощи строки с их именем - "Button1" и т.п.

Возможность изменения имён переменных пригодится и при отладке приложения. Предположим, в проекте используется 10 глобальных переменных и во время работы приложения нужно узнать значение той или иной переменной. Для этого в проект нужно добавить поле ввода имени переменной и кнопку,  при нажатии на которую на экран будет выведено значение введённой переменной.

Имена переменных из параметров функции нечувствительны к регистру. Если вы сначала создадите блок с именем age, а затем другой блок с именем Age, то будет создана только переменная с именем Age (последняя из созданных), а блок функции отобразит сообщение об ошибке – функция имеет повторяющиеся параметры.

Имена в блоках параметров функций обратного вызова (системных локальные переменные в блоках светло-зелёного цвета) изменить нельзя.

Имена переменным желательно давать в соответствии с тем, что в них хранится. Иначе может возникнуть путаница, если в переменной с именем buitton1 вы сохраните адрес электронной почты пользователя. Имена переменных желательно начинать со строчной буквы, выделяя все входящие в неё фрагменты или слова с заглавной буквы, например, listOfGoods, studentName и тому подобное.

Почему я пишу имена переменных слитно? Для удобства можно же писать их через пробел? Я пишу их слитно по той причине, что в текстовом программировании нельзя в именах переменных использовать символ пробела. Чтобы не путаться мне удобнее писать имена так, как это допустимо в текстовом программировании. Использование пробелов в именах может приводить к разным непонятным ситуациям, например, если звуковые файлы, в именах которых содержатся пробелы, не будут воспроизводиться на iOS. Если вы не хотите иметь дело с дополнительными проблемами, не используйте в именах пробелы и другие специфичные символы.

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

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

Не используйте в качестве имени переменной функции имя, которое имеют локальные блоки на экране. В показанном блоке переменная функции и локальная переменная имеют одинаковое имя - source.

Перезапись переменной функции

В этом случае оранжевый блок переменной функции за пределами секции do вернёт значение undefined, а не текст ссылки на звуковой файл. Это происходит по той причине, что переменная из параметра функции является ссылкой. При использовании глобальных переменных такой проблемы нет.

Особенности использования переменных в редакторе блоков

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

В последних обновлениях Thunkable X были устранены многие проблемы, связанные с использованием глобальных переменных, но это не решает других связанных с ними проблем - глобальная область видимости, работа с объектами по значению и некоторых других странностей, которые могут возникнуть.

Избегать использования глобальных переменных нужно ещё и по той причине, что они легко могут стать постоянным источником ошибок. Если в вашем проекте используется много глобальных переменных и много экранов, то со временем вы можете забыть, что на каком-то экране уже создали переменную для хранения какого-то значения и случайно перезаписать её значение на том же или другом экране. Например, вначале вы делали список исполнителей песен, и ввели глобальную переменную name, в которой хранится имя исполнителя. Через некоторое время вы решили дополнить базу перечнем любимых актёров и также выбрали переменную name для сохранения имени выбранного актёра.  Легко может получиться так, что вместо имени исполнителя песни переменная name вернёт имя актёра.

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

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

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

© 2016-2024 
actech