kotlin 1.0! - ruslan.ibragimov.by · kotlin nope! pointer exceptions // elvis fun main(args: array)...

52

Upload: others

Post on 27-May-2020

36 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)
Page 2: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Kotlin 1.0!Kotlin 1.0!

Page 3: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

WHAT?WHAT?

Page 4: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Pragmatic LanguagePragmatic Languagefor JVM and Androidfor JVM and Android

Page 5: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Why?Why?interoperabilitysafetyclaritytooling

Page 6: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

interoperabilityinteroperability

Page 7: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Data ClassData Class

Page 8: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// KotlinFile.kt data class Niceeee(val such: String, val so: String) fun main(args: Array<String>) { val nice1 = Niceeee("nice", "cool") val nice2 = Niceeee(such = "nice", so = "cool") println(nice1) println(nice2) println(nice1 == nice2) } // Niceeee(such=nice, so=cool) // Niceeee(such=nice, so=cool) // true

KotlinKotlin Data ClassData Class

Page 9: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// KotlinFile.kt data class Niceeee(val such: String, val so: String) fun main(args: Array<String>) { val nice1 = Niceeee("nice", "cool") val nice2 = Niceeee(such = "nice", so = "cool") println(nice1) println(nice2) println(nice1 == nice2) } // Niceeee(such=nice, so=cool) // Niceeee(such=nice, so=cool) // true

KotlinKotlin

// JavaClass.java public class JavaClass { public static void main(String[] args) { Niceeee niceeee1 = new Niceeee("nice", "cool"); Niceeee niceeee2 = new Niceeee("nice", "cool"); System.out.println(niceeee1); System.out.println(niceeee2); System.out.println(niceeee1.equals(niceeee2)); } } // Niceeee(such=nice, so=cool) // Niceeee(such=nice, so=cool) // true

JavaJava

Data ClassData Class

Page 10: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Extension FunctionsExtension Functions

Page 11: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// KotlinFile.kt fun main(args: Array<String>) { println("Hello, World".allBetterWithBang()) } fun String.allBetterWithBang(): String { return "${this}!" } // Hello, World!

KotlinKotlinExtension FunctionsExtension Functions

Page 12: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// KotlinFile.kt fun main(args: Array<String>) { println("Hello, World".allBetterWithBang()) } fun String.allBetterWithBang(): String { return "${this}!" } // Hello, World!

KotlinKotlin

// JavaClass.java public class JavaClass { public static void main(String[] args) { System.out.println(KotlinFileKt.allBetterWithBang("Hello, World")); } } // Hello, World!

JavaJava

Extension FunctionsExtension Functions

Page 13: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

SingletonSingleton

Page 14: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// KotlinFile.kt object Lonely { var state = "I hold state!" }

KotlinKotlinSingletonSingleton

Page 15: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// KotlinFile.kt object Lonely { var state = "I hold state!" }

KotlinKotlin

// JavaClass.java public class JavaClass { public static void main(String[] args) { Lonely.INSTANCE.getState(); Lonely.INSTANCE.setState("No! Java with you!"); } }

JavaJava

SingletonSingleton

Page 16: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

safetysafety

Page 17: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Nope! Pointer ExceptionsNope! Pointer Exceptions

Page 18: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// JavaClass.java public class JavaClass { public static void main(String[] args) { String str = null; str.length(); } } // Java: Ok!

JavaJavaNope! Pointer ExceptionsNope! Pointer Exceptions

Page 19: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// KotlinFile.kt fun main(args: Array<String>) { val str: String = null } // Kotlin: Null can not be a value of a non-null type kotlin.String

KotlinKotlin

// JavaClass.java public class JavaClass { public static void main(String[] args) { String str = null; str.length(); } } // Java: Ok!

JavaJavaNope! Pointer ExceptionsNope! Pointer Exceptions

Page 20: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Nope! Pointer ExceptionsNope! Pointer Exceptions

Page 21: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlin

Nope! Pointer ExceptionsNope! Pointer Exceptions

Page 22: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// KotlinFile.kt fun main(args: Array<String>) { val str: String? = null // Kotlin: Ok! }

KotlinKotlin

Nope! Pointer ExceptionsNope! Pointer Exceptions

Page 23: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

// KotlinFile.kt fun main(args: Array<String>) { val str: String? = null // Kotlin: Ok! }

KotlinKotlin

Nope! Pointer ExceptionsNope! Pointer Exceptions

// KotlinFile.kt fun main(args: Array<String>) { val str: String? = null str.length } // Kotlin: Only safe (?.) or non-null asserted (!!.) calls are allowed on // a nullable receiver of type kotlin.String?

Page 24: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Nope! Pointer ExceptionsNope! Pointer Exceptions

Page 25: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlin

Nope! Pointer ExceptionsNope! Pointer Exceptions

Page 26: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlin

Nope! Pointer ExceptionsNope! Pointer Exceptions

// Safe-call fun main(args: Array<String>) { val str: String? = null println(str?.length) } // null

Page 27: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlin

Nope! Pointer ExceptionsNope! Pointer Exceptions

// Safe-call fun main(args: Array<String>) { val str: String? = null println(str?.length) } // null

// Extension function fun main(args: Array<String>) { val str: String? = null str?.let { println(str.length) } } // nothing

Page 28: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlin

Nope! Pointer ExceptionsNope! Pointer Exceptions

// Elvis fun main(args: Array<String>) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull) } // 0

// Safe-call fun main(args: Array<String>) { val str: String? = null println(str?.length) } // null

// Extension function fun main(args: Array<String>) { val str: String? = null str?.let { println(str.length) } } // nothing

Page 29: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Cast?Cast?

Page 30: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

JavaJavaCast?Cast?

public class JavaClass { public static void main(String[] args) { Object master = "Yoda"; if (master instanceof String) { System.out.println(((String) master).length()); } } } // 4

Page 31: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

JavaJavaCast?Cast?

public class JavaClass { public static void main(String[] args) { Object master = "Yoda"; if (master instanceof String) { System.out.println(((String) master).length()); } } } // 4

KotlinKotlinfun main(args: Array<String>) { val master: Any = "Yoda" if (master is String) { println(master.length) } } // 4

Page 32: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

clarityclarity

Page 33: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)
Page 34: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlin

Page 35: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlindata class User(val name: String, val age: Int)

Page 36: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlindata class User(val name: String, val age: Int)

val (name, age) = person

Page 37: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlindata class User(val name: String, val age: Int)

val (name, age) = person

for ((name, age) in persons) { // ... }

Page 38: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlindata class User(val name: String, val age: Int)

val (name, age) = person

for ((name, age) in persons) { // ... }

fun function(...): Person { // computations return person } // Now, to use this function: val (name, age) = function(...)

Page 39: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

KotlinKotlindata class User(val name: String, val age: Int)

val (name, age) = person

for ((name, age) in persons) { // ... }

fun function(...): Person { // computations return person } // Now, to use this function: val (name, age) = function(...)

And more, and more...

Page 40: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

toolingtooling

Page 41: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Idea (Ultimate and Community)Android StudioEclipseGradle, Maven, Ant and Kobalt

Page 42: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Try it!Try it!try.kotl.intry.kotl.in

Page 43: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)
Page 44: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

11K+ people were using Kotlin last monthHundreds of ;Two books: and

;About 1700 people on ;Over 500K lines of Kotlin code in projects such asIntelliJ IDEA and Rider.

StackOverflow answersKotlin in Action Kotlin for Android

DevelopersSlack

Page 45: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)
Page 46: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

Awesome KotlinAwesome Kotlinhttp://kotlin.linkhttp://kotlin.link

Page 47: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

QuizQuiz

Page 48: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)
Page 49: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)
Page 50: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

In which Class PSVM?In which Class PSVM?

// File.kt package foo.bar.test fun main(args: Array<String>) { println("Hello, World!") }

Page 51: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)

In which Class PSVM?In which Class PSVM?

// File.kt package foo.bar.test fun main(args: Array<String>) { println("Hello, World!") }

foo.bar.test.FileKt.main(...);

Page 52: Kotlin 1.0! - ruslan.ibragimov.by · Kotlin Nope! Pointer Exceptions // Elvis fun main(args: Array) { val str: String? = null val nonNull = str?.length ?: 0 println(nonNull)