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

Kotlin != Java

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

Kotlin != Java

Kotlin is often is treated as a replacement for Java. But in fact, it also supports ctranspilation to JavaScript and compilation to native binaries.

Avatar for Oleg.Semen

Oleg.Semen

October 29, 2019

More Decks by Oleg.Semen

Other Decks in Programming

Transcript

  1. Who am I Oleg Semen • Android dev @ Hustro

    • Co-Organizer @ KLUG • android ~7y • kotlin ~4y 2
  2. Why Kotlin is better • null safe • 100% interoperability

    and backward compatibility • the best tooling support • pragmatic
  3. What exactly is better ? • null safety • data

    classes • extension functions • delegates • dsl • functional paradigm • sealed classes • inline classes • reified generic types (fixes type erasure) • named method arguments • default method values • more
  4. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block)
  5. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block)
  6. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block)
  7. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block)
  8. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block)
  9. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block)
  10. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block)
  11. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block)
  12. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block) fun main() { val p = person( { name = "Name" age = 10 }) }
  13. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block) fun main() { val p = person() { name = "Name" age = 10 } }
  14. dsl.kt data class Person (var name: String? = null, var

    age: Int = 0) fun person(block: Person.() -> Unit): Person = Person().apply(block) fun main() { val p = person { name = "Name" age = 10 } }
  15. decompiled dsl.kt public final class DslKt { @NotNull public static

    final Person person(@NotNull Function1 block) { Intrinsics.checkParameterIsNotNull(block, "block"); Person var1 = new Person((String)null, 0, 3, (DefaultConstructorMarker)null); boolean var2 = false; boolean var3 = false; block.invoke(var1); return var1; } }
  16. decompiled dsl.kt public final class DslKt { @NotNull public static

    final Person person(@NotNull Function1 block) { Intrinsics.checkParameterIsNotNull(block, "block"); Person var1 = new Person((String)null, 0, 3, (DefaultConstructorMarker)null); boolean var2 = false; boolean var3 = false; block.invoke(var1); return var1; } } WTF
  17. decompiled Main.java class Main { public static void main(String[] args)

    { Person p = DslKt.person(person -> { person.setName("Name"); person.setAge(10); return null; }); } }
  18. vs

  19. vs

  20. vs

  21. var ktNotJs = function (_, Kotlin) { //……. function person(block)

    { var $receiver = new Person(); block($receiver); return $receiver; } //…. _.Person = Person; _.person_nrnvvi$ = person; _.main = main; main(); Kotlin.defineModule('ktNotJs', _); return _; }
  22. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) sample_text.text = stringFromJNI() } external fun stringFromJNI(): String companion object { init { System.loadLibrary("native-lib") } } }
  23. Summary class Kotlin extends Java class Kotlin: Java by ByteCode(),

    JavaScript by Transpilation(), Native by Compilation()
  24. 53