Есть тысяча и одна мелочь, за которые Котлин можно любить (одно только отсутствие ;
в конце строки чего стоит!).
Я напишу о трёх с половиной, которые меня особенно зацепили.
Переменные и коллекции
Переменные по-умолчанию final, а коллекции по-умолчанию immutable. Если ты помнишь, в Java всё ровно наоборот - final нужно явно указывать, а коллекции - modifiable. Что это меняет? Оказывается, это сильно меняет стиль написания кода. Каждый раз, когда тебе нужно изменить какое-то значение, приходится вводить новую переменную (и думать над её именованием!). То же самое с коллекциями - нельзя просто взять и напихать в один массив, Котлин как бы подталкивает тебя больше работать со стримами, синтаксис которых, кстати, очень приятный. В целом могу сказать, что я стал чуть больше думать и чуть меньше писать и мне это нравится. Можно ли практиковать такой стиль в Java? Конечно, но потребуется писать чуть больше кода (каждый раз объявлять final) и следить чтобы коллекции тоже объявлялись immutable.
Data классы
Дата-классы, это абстракция для объектов бизнес-логики. Главная их особенность - они не могут быть наследованы. Никак.
Это обеспечивает консистентность таких объектов на протяжении жизни приложения. Помимо этого, Котлин сгенерирует для
полей такого класса геттеры, сеттеры, equals
, hashCode
и toString
для полной совместимости с существующими
библиотеками сериализации/десериализации данных. Ты наверняка слышал или используешь в своём Java-коде библиотеку
Lombok, которая делает примерно то же самое. Теперь сравни:
Java + Lombok
@ToString
@AllArgsConstructor
@EqualsAndHashCode
@Getter
@Setter
public class Person
{
private String lastName;
private String firstName;
}
Kotlin:
data class Person(val lastName: String, val firstName: String)
Если быть до конца честным, в Lombok есть аннотация @Data
, которой можно заменить несколько дефолтных аннотаций.
Но лично мне приятней иметь нативную поддержку дата-классов, которым, кстати, посвященно целых несколько глав в
нетленке “Effective Java”.
Совместимость с java
Да, можно спокойно жить с Java и Kotlin кодом одновременно. При этом можно как вызывать Java из Kotlin, так и наоборот. А это значит, что не нужно ждать “удобного случая” попробовать новый язык на новом проекте. Можно просто брать и начинать писать. Вперёд! ;)
comments powered by Disqus