За основу можно взять один из вариантов работы с объектами в JavaScript, при котором вся функциональность заключена внутри одной процедуры, что позволяет скрыть часть переменных от внешнего доступа. App Inventor не позволяет создавать вложенные процедуры, но их можно заменить условным оператором.
В качестве объекта мы будем использовать набор пар ключ-значение, с которыми удобно работать при помощи компонента TinyDB. Для реализации возможности работы со многими объектами в параметре tag этого компонента нужно указывать имя объекта вместе со свойством, например:
myObject.width
Формат данных для выполнения разных операций может быть таким:
В качестве разделителя полей желательно выбрать символ, который не будет встречаться в их названиях и значениях.
Процедура для работы с объектами показана на рис. 1.
Рис. 1. Процедура для работы с объектами.
Вначале процедуры производится разбор полученного аргумента на параметры action, tag и value, а после при помощи условного оператора if переход к выполнению нужной операции. Локальные переменные определены в начале процедуры и видны во всех блоках операций. В данном примере это допустимо, так как операции работают с одним набором аргументов. Если для выполнения операций требуются разные аргументы, то в таком случае локальные переменные нужно определять в начале каждого блока операции для ограничения их области видимости этим блоком.
Созданную процедуру можно рассматривать как класс для работы с объектами в строковом виде и использовать для работы с ассоциативными массивами, небольшими базами данных и др.
Рассмотрим преимущества и недостатки данного шаблона проектирования в MIT App Inventor 2.
Преимущества:
Недостатки:
Если нужно в одной операции использовать результаты работы другой операции, то для этого используется рекурсия - вызов процедуры из самой себя.