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
Tweet

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