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

Текстовые блоки или блок со строкой CSV?

25.05.2017

Рассмотрим простой пример создания списка строк, что можно реализовать при помощи блоков make a list или list from csv row. CSV row - это текстовая строка значений, которые разделены запятыми.

Создание списка строк

Рис. 1. Создание списка строк.

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

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

Можно сказать, что верхний вариант работает со списком блоков, тогда как нижний - со списком значений. Список значений удобно использовать при составлении цвета из компонент ( рис. 2).

Составление цвета из компонент

Рис. 2. Составление цвета из компонент.

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

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

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

Пользовательский диалог

Рис. 3. Пользовательский диалог.

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

Из показанных примеров видно, что одну и туже задачу можно выполнить двумя основными способами: “в лоб” c использованием большого количества блоков, или путём некоторой автоматизации.

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

Рассматрим сначала решенеи "в лоб" с использованием списка блоков.

Решение с использованием алгоритма “в лоб”

Рис. 4. Решение с использованием списка блоков.

”Преимущество” этого решения состоит в простоте и скорости создания, но расширение его потребует очень много усилий. Предположим, нужно сделать список из 100 книг. Сколько блоков и времени придётся затратить на его создание?

Более интересным (но и более сложным) является решение с использованием списка пар (рис. 5).

Решение с использованием списка пар.

Рис. 5. Решение с использованием списка пар.

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

В качестве значений строки CSV могут выступать не только информационные данные, но и команды (инструкции). Например,  для настройки внешнего вида виджетов можно использовать такой формат данных:

“btnOpen:w-100,h-50,fs-20”

, где цифры являются значениями, а поля расшифровываются так:

  • btnOpen - имя виджета
  • w - width (ширина),
  • h - height (высота),
  • fs  - fontSize (размер шрифта)

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

Итак, использование CSV вместо блоков позволяет работать с текстовыми данными проще и быстрее. Более того, при помощи CSV можно расширить функциональность блоков и реализовать, например, ассоциативный список с возможностью записи данных.

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

© 2016-2024 
actech