26-06-2016 19:41 Kotlin и with

В Kotlin ввели очень полезный элемент with. Грубо говоря, это замена call chaining’у для тех Java API, которые его не поддерживают.

Вместо:

stmt.setInteger(++i, 1);
stmt.setString(++i, "Hello");
stmt.setString(++i, "World");
stmt.execute();

Можно писать:

with (stmt) {
     setInteger(++i, 1)
     setString(++i, "Hello")
     setString(++i, "World)
}

Работает так же и с методами, но тут уже нужно быть очень осторожным.
К примеру в Vert.x вызов router.route() каждый раз создает новый Route.
Так что

with (router.route()) {
     handler(CorsHandler.create())
     handler(StaticHandler.create())
}

Приведет к тому, что на одно Route’е повиснут два Handler’а.
К счастью, Vert.x достаточно умен, чтобы об этом предупредить. Но от более старых фреймворков такой предусмотрительности ждать не стоит.

Комментарии:
Администратор<br>Буржуин проклятый
не знаю, как в Kotlin, но в том же javascript я стараюсь избегать использования конструкций с with, так как код с ними перестает быть читаемым. в том же твоем примере пойди разберись, что такое handler - метод объекта, указанного в with, или что то внешнее.

27-06-2016 16:08
Alexvn
В JS этого действительно обычно не нужно, там chaining почти везде.

Ваш комментарий:
Гость []
[смайлики сайта]
Автоматическое распознавание URL
Не преобразовывать смайлики
Cкрыть комментарий
Закрыть