ТОП-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 і хочете працювати над крутими проєктами, ми завжди раді новим людям у команді:)