Сегодня в Google Play наткнулся на интересную программу, конструктор, в котором были реализованы кубики (не знаю как они называются) как на картинке.
Вот мне стало интересно, а как такие вещи реализовывать?
Концепция. Каждое действие (цикл, условие, арифметика) - это отдельный класс, унаследованный от родительского класса ParentAction. У каждого класса есть своя реализация. Для каждого блока - у вас переопределен метод исполнения. Параметры передаются в конструктор класса.
abstrast class ParentAction() {
abstract fun execute(child: ParentAction)
}
Разберем простой пример: вывести в цикле 5 раз некоторую строчку. В UI части - пользователь собирает два блока, один вложенный в другой. Проходя его дерево блоков изнутри-наружу, мы собираем верную цепочку, последовательность исполнения блоков. В данном примере класс Printf - минимальное действие. Им нельзя ничего обернуть. Смотрите классы ниже:
сlass Foreach(private val count: Int, child: ParentAction): ParentAction {
override fun execute() {
for(i : 0..count) {
child.execute()
}
}
}
Класс Printf:
сlass Printf(private val str: String): ParentAction {
override fun execute() {
print(str)
}
}
Тогда, при обратном прохождении дерева пользователя, мы получаем:
Все. Шарманка закрутилась. Для реализации математики, вам придется организовать работу с "памятью", дабы разные классы могли последовательно читать из общего источника. В итоге, у вас получается простой компилятор, "надстройка". Конечно, все зависит от вашей задачи. Если вы хотите создать программу для обучения детей основам программирования, то данная реализация уместна. Если же вы хотите разработать графический язык программирования, то вам следует углубиться в разработку собственного компилятора, т.к. данная надстройка не будет отличать высокой эффективностью. Удачи!
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, как можно сделать вот такую полоску лесенкой с помощью css
У меня есть запросы в Fiddler`e там с десктоп программы отправляется