Kotlin vs Java: ТОП-7 преимуществ
20.02.2018программирования мобильных приложений под Android – Android-разработчику -
Несколько месяцев назад наш mobile-отдел перешел с Java на Kotlin для программирования мобильных приложений под Android. И мы уже успели оценить преимущества этого языка, которыми готовы поделиться.
В ответ на мой вопрос, о причинах перехода на Kotlin, разработчики рассказывают, что хотя язык и разрабатывается с 2010 года, первый стабильный релиз вышел в феврале 2016 года, а в мае 2017 Google включил Kotlin в Android Studio 3.0, а это означает, что язык юзабельным для большинства разработчиков.
История
В качестве аргументации создатели Kotlin говорят о том, что Java накопила целый багаж неудачных решений, которые уже никак не поменять, именно поэтому необходим язык с более приятным синтаксисом для разработчиков. Интересна история названия языка - создатели Kotlin решили пойти по пути нейминга Java (известный нам остров Ява или же Jawa) и “поплавали” по Финскому заливу, где нашли остров Kotlin.
Погуглив это название, разработчики узнали, что таким именем назывался миноносец Советского военно-морского флота:

NATO называют его Kotlin Class destroyer, а создатели языка в ответ шутят: Kotlin is not meant for class destruction but any means.
Топ 7 лучших преимуществ по мнению Artjoker
1Nullsafe
1
2
3
4
5
6
7
8
9 | fun foo(title: String?, number: Int) {
if (title != null) { // required! print(title.length)
}
title?.let { print(it.length) }
} |
Детальная информация здесь
2Удобные геттеры и сеттеры
1
2
3
4
5
6
7
8
9
10
11
12 | class Foo {
var field = "abc"var computable
get() = _computable
set(value) {
_computable = value.toUpperCase()
}
private var _computable = ""
} |
Детальнее
3Новые лямбды
1
2
3
4
5
6
7
8
9 | fun foo(list: List) {
list.filter({ title -> title.startsWith("abc") }) // Java style list.filter { it.startsWith("abc") } // Kotlin style
} |
Детальнее
4Конструкторы классов
1
2
3
4
5 | class User(
val id: String?,
val username: String,
val salary: Int,
val profileImageUrl: String?) |
Детальнее
5Extensions and Generics
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | val Int.odd get() = this % 2 == 1fun String.myOwnFunction(n: Int) =
when (n) {
0 -> firstOrNull().toString()
1 -> reversed()
else -> this }fun foo(title: String) {
title.myOwnFunction(22)
}
inline fun List.foo() =
when (T::class) {
String::class ->reversed()
else -> null } |
Детальнее
6Property Delegates
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | fun putToLocalStorage(key: String, o: Any?) {
// your implementation
}
fun readFromStorage(key: String): T? {
// your implementationreturn null
}
class StoragePropertyDelegate(private val defaultValue: T? = null) {
operator fun getValue(thisRef: Any, property: KProperty<*>): T =
readFromStorage(property.name) ?: defaultValue!!
operator fun setValue(thisRef: Any, property: KProperty<*>, value: T) {
putToLocalStorage(property.name, value)
}
}
class Model {
var property by StoragePropertyDelegate("abc")
fun doSomething(t: String) {
property = t.toLowerCase() + ' ' }
} |
Детальнее
7Делегирование реализации интерфейсов
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | interface Flying {
fun increaseHeight()
fun reduceHeight()
}
class FlyingDelegate : Flying {
override fun increaseHeight() {
println("increaseHeight()")
}
override fun reduceHeight() {
println("reduceHeight()")
}
}
class OldStyleUfo(private val delegate: FlyingDelegate) : Flying {
override fun increaseHeight() {
delegate.increaseHeight()
}
override fun reduceHeight() {
delegate.reduceHeight()
}
}
class NewStyleUfo(delegate: FlyingDelegate) : Flying by delegate |
Детальнее
Artjoker советует каждому Android-разработчику попробовать Kotlin и оценить преимущества. Мы видим в этом языке отличные перспективы роста, а если вы уже пишете на Kotlin и хотите работать над крутыми проектами, мы всегда рады новым людям в команде:)