Categories
Uncategorized

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 достаточно умен, чтобы об этом предупредить. Но от более старых фреймворков такой предусмотрительности ждать не стоит.