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

Имитация класса в App Inventor

30.05.2017

За основу можно взять один из вариантов работы с объектами в JavaScript, при котором  вся функциональность заключена внутри одной процедуры, что позволяет скрыть часть переменных от внешнего доступа. App Inventor не позволяет создавать вложенные процедуры, но их можно заменить условным оператором.

В качестве объекта мы будем использовать набор пар ключ-значение, с которыми удобно работать при помощи компонента TinyDB. Для реализации возможности работы со многими объектами в параметре tag этого компонента нужно указывать имя объекта вместе со свойством, например:

myObject.width

Формат данных для выполнения разных операций может быть таким:

  • Для записи свойства - название операции:имя объекта.имя свойства:значение
  • Для чтения свойства - название операции:имя объекта.имя свойства
  • Для выполнения групповых операций - название операции

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

Процедура для работы с объектами показана на рис. 1.

Процедура для работы с объектами

Рис. 1. Процедура для работы с объектами.

Вначале процедуры производится разбор полученного аргумента на параметры action, tag и value, а после при помощи условного оператора if переход к выполнению нужной операции. Локальные переменные определены в начале процедуры и видны во всех блоках операций. В данном примере это допустимо, так как операции работают с одним набором аргументов. Если для выполнения операций требуются разные аргументы, то в таком случае локальные переменные нужно определять в начале каждого блока операции для ограничения их области видимости этим блоком.

Созданную процедуру можно рассматривать как класс для работы с объектами в строковом виде и использовать для работы с ассоциативными массивами, небольшими базами данных и др.

Рассмотрим преимущества и недостатки данного шаблона проектирования в MIT App Inventor 2.

Преимущества:

  • Группировка всей требуемой функциональности в одном блоке. Работать с одним блоком в редакторе удобнее, чем с несколькими
  • Возможность динамического создания объектов и свойств

Недостатки:

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

Если  нужно в одной операции использовать результаты работы другой операции, то для этого используется рекурсия - вызов процедуры из самой себя.

© 2016-2024 
actech