Все будет Kotlin

Ахой, ну вот пришло и мое время хайпить по поводу Kotlin. Регулярные подписчики и читатели блога знают, что я Java-пацан, ходивший в мир Groovy, который мне безумно нравится. Я писал о его применении для работы с SSH, и в UI тестировании.

Но, увы, многие игнорируют Groovy и отдают предпочтение старой кляче Java с аргументами: - Groovy тормозит (хотя в тестах это пофиг) - А где мы возьмем людей? (хотя его можно выучить за неделю).

Теперь настал мой черед сходить в мир Kotlin.

a52453729bd64cb3b5ca8a4892e45cc1

Вокруг языка ходит много хайпа, особенно после того, как Google официально начал поддерживать Kotlin, о чем было объявлено на Google IO 2017.

Скажу честно, я уже подустал от Java. Именно поэтому в какой-то момент меня понесло в Python. Но там мне не особо понравилось, поэтому я все еще пишу на Java 8, иногда даже с лямбдами балуюсь =).

На Kotlin я смотрел еще до релиза 1.0 и тогда многое для меня в нем было не понятным. Сейчас же решил основательно в нем разобраться, чтобы понять, можно ли на нем делать что-то внятное или нафиг-нафиг и Java 8 + Lombok - наше все.

Окончательным толчком послужил выход Gradle 4.0, в котором стали нормально поддерживать Kotlin Gradle DSL.

Я, значит, как реальные Early adopters, сел и начал смотреть, что да как. Спустя пару часов смог сделать проект на Gradle 4, сконфигурированный с помощью Kotlin Gradle DSL + Selenide + Allure 2. Правда, я бы не справился, если бы не сходил в Kotlin Slack чатик и не спросил у пацанвы, как там этот Gradle DSL писать. Документации пока что нет.

Но разобраться с языком, не пописав на нем что-то внятное, практически нереально. Именно поэтому я начал писать Kirk. Пока что это все находится на начальном этапе, но мне нравится то, что с помощью Kotlin можно создавать очень классный DSL c минимальными затратами по времени.

@Test fun testCanDeactivateTask() {
        Browser.drive {
            to(::TodoPage) {
                addTasks("A", "B", "C")
                deactivateTask("A")
                counter.should(have.text("2"))
                goToCompletedTab()
                taskList.should(have.exactText("A"))
            }
        }
    }

В целом я пока очень доволен языком и его возможностями. Реально писать намного приятнее и удобнее, чем на Java, особенно лямбды:

list.stream()
    .filter(e -> e.isDisplayed())
    .collect(toList())

и в Котлине:

list.filter{it.isDisplayed()}

Погружаюсь в мир Котлин и мне нравится. Теперь заметок о применении Котлин вместо Java станет больше =)

BTW:

Больше о Котлин + Gradle можно найти в видосиках с недавнего Gradle Summit 2017. Ну и, конечно же, самые отборные материалы я размещаю в группе в Facebook. Присоединяйтесь!