DroidScript
DroidScript
инструменты для мобильной разработки

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

Базовый курс программирования на Thunkable X  
09.10.2019

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Блоки переменных app, stored и cloud относятся к “тяжелым” (ресурсозатратным) блокам, которые могут в несколько раз снизить скорость работы редактора блоков и сделать работу уже с 300 блоками на одном экране невозможной. При большом количестве экранов и блоков на экранах добавление даже одной глобальной переменной может вызвать резкое снижение производительности. По этой причине во время разработки все инициализирующие блоки этих переменных необходимо  располагать на отдельном пустом экране.

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

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

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

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

Для замены app-переменных подойдёт компонент локальной таблицы (Local DB). Для замены cloud-переменной – блоки компонента Realtime DB. Использовать компонент local DB  для замены stored-переменной я бы не стал из-за специфики его работы. При использовании компонента local DB не один раз возникало ощущение того, что он работает ненадёжно.

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

Базовый курс программирования на Thunkable X  
© 2016-2018 Александр Страшко