Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Why Kotlin

Why Kotlin

An attempt to explain features of Kotlin to non-Android developers.

Avatar for Mukhamed Issa

Mukhamed Issa

December 04, 2018

More Decks by Mukhamed Issa

Other Decks in Technology

Transcript

  1. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ЧТО ТАКОЕ KOTLIN? ▸ JetBrains

    ▸ Разрабатывается с 2010 года ▸ Представлен в июле 2011 года ▸ В open source начиная с 2012 года ▸ Стабильный релиз в 2016 году ▸ Официальная поддержка Android c мая 2017 2
  2. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ЧТО ТАКОЕ KOTLIN? ▸ JetBrains

    ▸ Разрабатывается с 2010 года ▸ Представлен в июле 2011 года ▸ В open source начиная с 2012 года ▸ Стабильный релиз в 2016 году ▸ Официальная поддержка Android c мая 2017 3
  3. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ЧТО ТАКОЕ KOTLIN? ▸ JetBrains

    ▸ Разрабатывается с 2010 года ▸ Представлен в июле 2011 года ▸ В open source начиная с 2012 года ▸ Стабильный релиз в 2016 году ▸ Официальная поддержка Android c мая 2017 4
  4. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ЧТО ТАКОЕ KOTLIN? ▸ JetBrains

    ▸ Разрабатывается с 2010 года ▸ Представлен в июле 2011 года ▸ В open source начиная с 2012 года ▸ Стабильный релиз в 2016 году ▸ Официальная поддержка Android c мая 2017 5
  5. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ЧТО ТАКОЕ KOTLIN? ▸ JetBrains

    ▸ Разрабатывается с 2010 года ▸ Представлен в июле 2011 года ▸ В open source начиная с 2012 года ▸ Стабильный релиз в 2016 году ▸ Официальная поддержка Android c мая 2017 6
  6. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ЧТО ТАКОЕ KOTLIN? ▸ JetBrains

    ▸ Разрабатывается с 2010 года ▸ Представлен в июле 2011 года ▸ В open source начиная с 2012 года ▸ Стабильный релиз в 2016 году ▸ Официальная поддержка Android c мая 2017 года *HYPE* 7
  7. ПЕРВАЯ ПРИЧИНА ЭТО ТЫ JAVA INTEROPERABILITY ▸ Kotlin как и

    Java выполняется на Java Virtual Machine ▸ Java код может вызван Kotlin кодом ▸ Kotlin код может вызван Java кодом 9
  8. А ВТОРАЯ ВСЕ ТВОИ МЕЧТЫ НИЗКИЙ ПОРОГ ВХОЖДЕНИЯ ПОСЛЕ JAVA

    + KOTLIN SYNTAX 10 class AviaBookingProductsActivity : BaseUpActivity(), CombinationDataView, BookingProductsView { companion object { private const val RC_SELECT_SEATS = 0 private const val ARG_BOOKING_REQUEST = "booking_request" private const val ARG_BOOKING_PARAMS = "booking_params" fun start(context: Context, bookingRequest: AviaBookingRequest, bookingParams: BookingParams) { val intent = Intent(context, AviaBookingProductsActivity!::class.java) intent.putExtra(ARG_BOOKING_REQUEST, bookingRequest) intent.putExtra(ARG_BOOKING_PARAMS, bookingParams) context.startActivity(intent) } } private val combinationDataPresenter by lazy { CombinationDataPresenter(this) } private val bookingProductsPresenter by lazy { BookingProductsPresenter(this) } private val bookingRequest by lazy { intent.getParcelableExtra(ARG_BOOKING_REQUEST) as AviaBookingRequest } private val bookingParams by lazy { intent.getParcelableExtra(ARG_BOOKING_PARAMS) as BookingParams }
  9. ТРЕТЬЯ – ЭТО ВСЕ ТВОИ СЛОВА JAVA.LANG.NULLPOINTEREXCEPTION ▸ Главная головная

    боль Java if (user == null) return; if (user.getCitizenship() == null) return 11 null null “I CALL IT MY BILLION-DOLLAR MISTAKE. IT WAS THE INVENTION OF THE NULL REFERENCE IN 1965” — TONY HOARE ( INVENTOR OF THE NULL REFERENCE)
  10. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА NULL SAFETY var contacts: Contacts

    = Contacts() contacts = null !//compilation error var nullableContacts: Contacts? = Contacts() nullableContacts = null !//norm contacts.cleanPhoneCode !//variable is nonnull, works fine nullableContacts.cleanPhoneCode !//compilation error, nullable val description = bookingProductsResponse .getProduct(BookingProduct.SMS_NOTIFIER)!?.productInformation!?.description val product = bookingProductsResponse!?.getProduct(BookingProduct.SMS_NOTIFIER) val description = product!?.shortDescription !?: product!?.fullDescription !// !?: Elvis operator Safe calls
  11. ЧЕТВЕРТАЯ ПРИЧИНА ЭТО ЛОЖЬ EXTENSION FUNCTIONS ▸ Расширение класса без

    Inheritance. Привет, С# fun Context.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) { Toast.makeText(this, message, duration).show() } toast(getString(R.string.invalid_email_error)) fun ImageView.load(url: String) { Picasso.get().load(url).into(this) } logoBinding.logoView.load(logoUrl)
  12. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ПРОЧИЕ ПЛЮШКИ ▸ Lambdas ▸

    Singletons ▸ Smart casts ▸ Default and Named arguments val insuranceProducts = products.filter { it.getProductName().equals(Product.INSURANCE_DURING_FLIGHT) } object Singleton if (holder is FlightViewHolder) { val flightItem = resultItems[position] as AviaSearchResultFlightItem holder.bindFlight(flightItem.flightDataItem, flightListener, infoIconClickL } fun Context.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) { Toast.makeText(this, message, duration).show() } toast(message = getString(R.string.invalid_email_error), duration = LONG_TOAST_DURATION)
  13. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА KOTLIN COROUTINES ▸ Карутинс, карутинки

    ▸ Значительно упрощает асинхронное программирование ▸ async/await. Привет, ECMAScript, C# ▸ channels, select. Привет, Go ▸ generators/yield. Привет, Python, C#
  14. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА KOTLIN COROUTINES launch { try

    { val bestPriceResponse = ApiFactory.getAviaApi() .getBestPrices(params) .awaitResult().getOrThrow() withContext(UI) { bestPricesAdapter.setBestPriceData(bestPriceResponse.data) } } catch (exception: Exception) { withContext(UI) { toast(exception!?.message) } } }
  15. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ДРУГИЕ ПРИМЕНЕНИЯ ▸ Kotlin for

    Server-Side ▸ Kotlin for JavaScript ▸ Kotlin Native ▸ iOS, macOS, Windows, Linux, WebAssembly ▸ Swift/Obj-C interop
  16. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ДРУГИЕ ПРИМЕНЕНИЯ ▸ Kotlin for

    Server-Side ▸ Kotlin for JavaScript ▸ Kotlin Native ▸ iOS, macOS, Windows, Linux, WebAssembly ▸ Swift/Obj-C interop
  17. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ДРУГИЕ ПРИМЕНЕНИЯ ▸ Kotlin for

    Server-Side ▸ Kotlin for JavaScript ▸ Kotlin Native ▸ iOS, macOS, Windows, Linux, WebAssembly ▸ Swift/Obj-C interop
  18. ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА ССЫЛКИ ▸ https://kotlinlang.org ▸ https://kotlinlang.org/docs/reference/server-overview.html

    ▸ https://kotlinlang.org/docs/reference/android-overview.html ▸ https://kotlinlang.org/docs/reference/js-overview.html ▸ https://kotlinlang.org/docs/reference/native-overview.html