Pull to refresh

Comments 6

Главное при разработке DSL помнить меру. А то некоторые понапишут своих языков поверх Скалы, и новому разработчику вообще не ясно, что тут происходит, а почитать особо и не где про это (за исключением исходников, конечно).

Статья хорошая, легко читается, но билдер не рабочий:


Тут объявляются дефолтные значения для имутабельных свойств


data class Person(var name: String? = null,
                  var age: Int? = null,
                  var address: Address? = null)

Тут создается объект (inline добавить бы) без передачи значений — все свойства == null


data class Person(var name: String? = null,
                  var age: Int? = null,
                  var address: Address? = null)

А тут compile error так как автор сетит неизменяемые свойства


val person = person {
    name = "John" // ERR: val cannot be reassigned 
    age = 25
}

Мутабельные свойства должны быть (но это не по Котлински), или передавать значения в качестве параметров функции, ну еще может как-то можно извратиться с методом copy()

Не вижу большой разницы по сравнению с таким кодом:


var person = Person(
    name = "John",
    age = 25,
    address  = Address(
        street = "Main Street",
        number = 42,
        city = "London",
    )
)

Просто вызываем конструктор с именованными аргументами. Плюс, можно объявить поля константами (val), и избежать задания дефолтного null для полей

Это ж не по-хипстерски… А вообще, в официальной документации есть нормальный пример билдера.

Осмелюсь предложить парочку предложений к следующим статьям цикла:
1) Явно указывать, в чём проявляется доменная специфичность предлагаемого языка.
2) Явно указывать преимущества предлагаемого языка по сравнению с традиционным подходом (напрямую программировать нп Kotlin).
3) Дать информацию о каком домене вы ведете речь. Судя по началу это могут быть кадровые вопросы, зарплата, клиеты, студенты и т.д. Это разные домены и у них разные специфики.
Sign up to leave a comment.

Articles