ТОП-7 преимуществ программирования мобильных приложений под 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
1 Nullsafe
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?) |
5 Extensions 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 == 1 fun 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 } |
6 Property 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 implementation return 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 и хотите работать над крутыми проектами, мы всегда рады новым людям в команде:)