Архив категории: scala

c sharp groovy java programming scala

Типобезопасный биндинг данных для UI компонентов

Хныканье про UI биндинги

Мне по долгу службы приходится иметь дело с UI компонентами и их API. Я постоянно разрабатываю их, расширяю и интегрирую существующие, пишу к ним тесты и документацию. За 5 лет я видел много разных подходов и хотел бы обсудить одну существенную деталь из мира UI разработки.

Связь с данными — довольно болезненный вопрос при работе с различными полями ввода. Мы постоянно используем различные сложные абстракции — Property, DataSet, DataSource, Binding,  Adapter и ещё в довесок кучу костылей вроде ручной реализации реакции на изменение данных в модели и в компоненте. При этом основных подходов для подключения источника данных к UI компоненту всего два:

  1. Реализация интерфейса Property { get; set; }
  2. Подключение свойства объекта при помощи рефлексии по имени

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

suspension_bridge

Давайте помечтаем. Ах вот если бы у нас был такой волшебный оператор, который бы в статически типизированной форме вернул нам по члену класса его имя.

Читать далее »

programming scala

Сортировка вставками

Сегодня мы рассмотрим реализацию алгоритма сортировки вставками на Scala. Это очень интересный алгоритм сортировки, не быстрый (сложность O(n^2)), но обладающий парой особенностей:

  1. Не сортирует уже упорядоченные данные
  2. Позволяет выполнять сортировку динамически выбираемых данных

Для начала случай с сортировкой массива:

Читать далее »

build DSL groovy programming scala

Собираем проект на Scala при помощи Gradle

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

Для проекта требуется:

  1. Скрипт сборки для работы без IDE
  2. Возможность запускать тесты при помощи скрипта сборки
  3. Маленький скрипт сборки, лучше без XML
  4. Возможность генерации проектных файлов IDE с настроенным окружением для работы
  5. Интеграция с IDE на уровне зависимостей

Читать далее »