Share
Embed
Kotlin
Drew Carlson
November 16, 2020
Transcript
155 slides
-
fun sum(a: Int, b: Int): Int = a + b
fun stringOrDefault( subject: String?, default: String = "Default" ): String { return subject "?: default } -
fun sum(a: Int, b: Int): Int = a + b
fun stringOrDefault( subject: String?, default: String = "Default" ): String { return subject "?: default } -
fun sum(a: Int, b: Int): Int = a + b
fun stringOrDefault( subject: String?, default: String = "Default" ): String { return subject "?: default } -
fun sum(a: Int, b: Int): Int = a + b
fun stringOrDefault( subject: String?, default: String = "Default" ): String { return subject "?: default } -
fun sum(a: Int, b: Int): Int = a + b
fun stringOrDefault( subject: String?, default: String = "Default" ): String { return subject "?: default } stringOrDefault(name) -
fun sum(a: Int, b: Int): Int = a + b
fun stringOrDefault( subject: String?, default: String = "Default" ): String { return subject "?: default } stringOrDefault(name) stringOrDefault(name, "missing") -
"// Java public class User { @NonNull public String getName()
{ "// ""... } public void setName(@NonNull String name) { "// ""... } } -
"// Kotlin val user = User() println("User: " + user.name)
"// Java public class User { @NonNull public String getName() { "// ""... } public void setName(@NonNull String name) { "// ""... } } -
"// Kotlin val user = User() println("User: " + user.name)
"// Java public class User { @NonNull public String getName() { "// ""... } public void setName(@NonNull String name) { "// ""... } } -
"// Kotlin val user = User() println("User: " + user.name)
user.name = "Not Drew" "// Java public class User { @NonNull public String getName() { "// ""... } public void setName(@NonNull String name) { "// ""... } } -
"// Kotlin val user = User() println("User: " + user.name)
user.name = "Not Drew" "// Java public class User { @NonNull public String getName() { "// ""... } public void setName(@NonNull String name) { "// ""... } } -
"// Kotlin val user = User() println("User: ${user.name}") user.name =
"Not Drew" "// Java public class User { @NonNull public String getName() { "// ""... } public void setName(@NonNull String name) { "// ""... } } -
"// Kotlin val user = User() println("User: $user") user.name =
"Not Drew" "// Java public class User { @NonNull public String getName() { "// ""... } public void setName(@NonNull String name) { "// ""... } } -
"// Kotlin val user = User() println("User: $user") user.name =
"Not Drew" "// Java public class User { @NonNull public String getName() { "// ""... } public void setName(@NonNull String name) { "// ""... } } -
"// Java final User user = new User(); System.out.println("User: "
+ user.getName()); "// Kotlin class User { var name = "Drew" } -
"// Java final User user = new User(); System.out.println("User: "
+ user.getName()); "// Kotlin class User { var name = "Drew" } -
"// Java final User user = new User(); System.out.println("User: "
+ user.getName()); user.setName("Not Drew"); "// Kotlin class User { var name = "Drew" } -
"// Java final User user = new User(); System.out.println("User: "
+ user.getName()); user.setName("Not Drew"); "// Kotlin class User { var name = "Drew" } -
var currentUser = User() currentUser = User() "// Kotlin val
user = User() user = User() -
"// Kotlin "// file: com/app/locale.kt fun Locale.isLanguageEnglish(): Boolean { return
language "== Locale.ENGLISH.language } -
"// Kotlin "// file: com/app/locale.kt fun Locale.isLanguageEnglish(): Boolean { return
language "== Locale.ENGLISH.language } -
"// Kotlin "// file: com/app/locale.kt fun Locale.isLanguageEnglish(): Boolean { return
language "== Locale.ENGLISH.language } -
"// Kotlin "// file: com/app/locale.kt fun Locale.isLanguageEnglish(): Boolean { return
language "== Locale.ENGLISH.language } val locale = Locale.GERMANY if (locale.isLanguageEnglish()) { println("The Locale's language is English.") } else { println("The Locale's language is not english") } -
"// Kotlin "// file: com/app/locale.kt fun Locale.isLanguageEnglish(): Boolean { return
language "== Locale.ENGLISH.language } val locale = Locale.GERMANY if (locale.isLanguageEnglish()) { println("The Locale's language is English.") } else { println("The Locale's language is not english") } -
"// Kotlin "// file: com/app/locale.kt fun Locale.isLanguageEnglish(): Boolean { return
language "== Locale.ENGLISH.language } import com.app.isLanguageEnglish val locale = Locale.GERMANY if (locale.isLanguageEnglish()) { println("The Locale's language is English.") } else { println("The Locale's language is not english") } -
"// Java LocaleKt.isLanguageEnglish(Locale.UK); val locale = Locale.GERMANY if (locale.isLanguageEnglish()) {
"//""... } "// Kotlin "// file: com/app/locale.kt fun Locale.isLanguageEnglish(): Boolean { return language "== Locale.ENGLISH.language } -
"// Kotlin "// file: com/app/locale.kt @file:JvmName("LocaleUtils") fun Locale.isLanguageEnglish(): Boolean {
return language "== Locale.ENGLISH.language } val locale = Locale.GERMANY if (locale.isLanguageEnglish()) { "//""... } "// Java LocaleKt.isLanguageEnglish(Locale.UK); -
"// Kotlin "// file: com/app/locale.kt @file:JvmName("LocaleUtils") fun Locale.isLanguageEnglish(): Boolean {
return language "== Locale.ENGLISH.language } val locale = Locale.GERMANY if (locale.isLanguageEnglish()) { "//""... } "// Java LocaleUtils.isLanguageEnglish(Locale.UK); -
val worker = Worker() val executor = Executors.newCachedThreadPool() executor.execute(worker"::doWork) class
Worker { fun doWork() { println("from the background") } } -
val worker = Worker() val executor = Executors.newCachedThreadPool() executor.execute(worker"::doWork) class
Worker { fun doWork() { println("from the background") } } -
val work = { println("from the background") } val executor
= Executors.newCachedThreadPool() executor.execute(work) -
val work = { println("from the background") } val executor
= Executors.newCachedThreadPool() executor.execute(work) -
fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""...
} val names = listOf("Drew", "Ahsan", "Shivangi") val drews = names.filter({ name !-> name "== "Drew" }) -
fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""...
} val drews = names.filter({ name !-> name "== "Drew" }) val names = listOf("Drew", "Ahsan", "Shivangi") -
fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""...
} val drews = names.filter({ it "== "Drew" }) val names = listOf("Drew", "Ahsan", "Shivangi") -
fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""...
} val drews = names.filter() { it "== "Drew" } val names = listOf("Drew", "Ahsan", "Shivangi") -
fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""...
} val drews = names.filter { it "== "Drew" } val names = listOf("Drew", "Ahsan", "Shivangi") -
fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""...
} val drews = names.filter { it "== "Drew" } val names = listOf("Drew", "Ahsan", "Shivangi") val ahsans = names.filterTo(mutableSetOf()) { it == "Ahsan" } -
fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""...
} val drews = names.filter { it "== "Drew" } val names = listOf("Drew", "Ahsan", "Shivangi") val ahsans = names.filterTo(mutableSetOf()) { it == "Ahsan" } -
fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""...
} val drews = names.filter { it "== "Drew" } val names = listOf("Drew", "Ahsan", "Shivangi") val ahsans = names.filterTo(mutableSetOf()) { it == "Ahsan" } -
val drews = names.filter { it "== "Drew" } val
names = listOf("Drew", "Ahsan", "Shivangi") fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""... } -
val drews = names.filter { it "== "Drew" } val
names = listOf("Drew", "Ahsan", "Shivangi") inline fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { "// ""... } -
inline fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { val
destination = mutableListOf<T>() for (item in this) { if (predicate(item)) destination.add(item) } return destination } val names = listOf("Drew", "Ahsan", "Shivangi") val drews = names.filter { it "== "Drew" } -
inline fun <T> List<T>.filter(predicate: (T) "-> Boolean): List<T> { val
destination = mutableListOf<T>() for (item in this) { if (predicate(item)) destination.add(item) } return destination } val destination = mutableListOf<String>() for (item in names) { if (item "== "Drew") destination.add(item) } val drews: List<String> = destination -
class User(val name: String) val drew = User("Drew") println("Hello, $drew")
Hello, User@8c64f2bc -
class User(val name: String) val drew = User("Drew") println("Hello, $drew")
Hello, User@8c64f2bc -
data class User(val name: String) val drew = User("Drew") println("Hello,
$drew") Hello, User@8c64f2bc -
data class User(val name: String) val drew = User("Drew") println("Hello,
$drew") Hello, User(name=Drew) -
data class User(val name: String) val drew = User("Drew") println("Hello,
$drew") Hello, User(name=Drew) -
data class User(val name: String, val age: Int) val drew
= User("Drew", 5) -
data class User(val name: String, val age: Int) val drew
= User("Drew", 5) -
data class User(val name: String, val age: Int) val drew
= User("Drew", 5) val updated = drew.copy(age = 6) -
data class User(val name: String, val age: Int) val drew
= User("Drew", 5) -
data class User(val name: String, val age: Int) val drew
= User("Drew", 5) val (name, age) = drew -
data class User(val name: String, val age: Int) val drew
= User("Drew", 5) val (name, age) = drew val (key, value) = Pair("session_id", "1") -
data class User(val name: String, val age: Int) val drew
= User("Drew", 5) val (name, age) = drew val (key, value) = Pair("session_id", "1") val (x, y, z) = Triple(0f, 0f, 1f) -
data class User(val name: String, val age: Int) val drew
= User("Drew", 5) val (name, age) = drew val (key, value) = Pair("session_id", "1") val (x, y, z) = Triple(0f, 0f, 1f) -
sealed class Result<T> { class Success<T> : Result<T>() class Error
: Result<Nothing>() } -
sealed class Result<T> { class Success<T> : Result<T>() class Error
: Result<Nothing>() } -
sealed class Result<T> { class Success<T> : Result<T>() class Error
: Result<Nothing>() } -
sealed class Result<T> { class Success<T> : Result<T>() class Error
: Result<Nothing>() } -
sealed class Result<T> { class Success<T> : Result<T>() class Error
: Result<Nothing>() } -
// otherfile.kt class ExternalResult<out T : Any> : Result<T>() sealed
class Result<T> { class Success<T> : Result<T>() class Error : Result<Nothing>() } -
sealed class Result<T> { data class Success<T>(val data: T) :
Result<T>() data class Error(val exception: Exception) : Result<Nothing>() } // otherfile.kt class ExternalResult<out T : Any> : Result<T>() -
sealed class Result<T> { data class Success<T>(val data: T) :
Result<T>() data class Error(val exception: Exception) : Result<Nothing>() } -
sealed class Result<T> { data class Success<T>(val data: T) :
Result<T>() data class Error(val exception: Exception) : Result<Nothing>() } fun handleResult(result: Result<String>) { when (result) { is Result.Success -> TODO("handle") is Result.Error -> TODO("handle") } } -
sealed class Result<T> { data class Success<T>(val data: T) :
Result<T>() data class Error(val exception: Exception) : Result<Nothing>() } fun handleResult(result: Result<String>) { when (result) { is Result.Success -> result.data is Result.Error -> result.exception.message } } -
sealed class Result<T> { data class Success<T>(val data: T) :
Result<T>() data class Error(val exception: Exception) : Result<Nothing>() } fun handleResult(result: Result<String>): String { return when (result) { is Result.Success -> result.data is Result.Error -> result.exception.message } } -
sealed class Result<T> { data class Success<T>(val data: T) :
Result<T>() data class Error(val exception: Exception) : Result<Nothing>() object Cancelled : Result<Nothing>() } fun handleResult(result: Result<String>): String { return when (result) { is Result.Success -> result.data is Result.Error -> result.exception.message } } -
fun handleResult(result: Result<String>): String { return when (result) { is
Result.Success -> result.data is Result.Error -> result.exception.message Result.Cancelled -> "cancelled" } } sealed class Result<T> { data class Success<T>(val data: T) : Result<T>() data class Error(val exception: Exception) : Result<Nothing>() object Cancelled : Result<Nothing>() } -
sealed class Result<T> { data class Success<T>(val data: T) :
Result<T>() data class Error(val exception: Exception) : Result<Nothing>() object Cancelled : Result<Nothing>() } fun handleResult(result: Result<String>): String { return when (result) { is Result.Success -> result.data is Result.Error -> result.exception.message Result.Cancelled -> "cancelled" } } -
sealed class Result<T> data class Success<T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>() object Cancelled : Result<Nothing>() fun handleResult(result: Result<String>): String { return when (result) { is Success -> result.data is Error -> result.exception.message Cancelled -> "cancelled" } } -
class Preferences(databaseName: String) { private val db = SqlDatabase(databaseName) fun
delete(name: String) { db.beginTransaction() try { db.execute("DELETE FROM user WHERE name = ?”) db.setTransactionSuccessful() } finally { db.endTransaction() } } } -
class Preferences(databaseName: String) { private val db = SqlDatabase(databaseName) fun
delete(name: String) { db.beginTransaction() try { db.execute("DELETE FROM user WHERE name = ?”) db.setTransactionSuccessful() } finally { db.endTransaction() } } } -
class Preferences(databaseName: String) { private val db by lazy {
SqlDatabase(databaseName) } fun delete(name: String) { db.beginTransaction() try { db.execute("DELETE FROM user WHERE name = ?”) db.setTransactionSuccessful() } finally { db.endTransaction() } } } -
private val db by lazy { SqlDatabase(databaseName) } var name
by Delegates.observable("Drew") { prop, old, new !-> println("Name changed from $old to $new") } -
private val db by lazy { SqlDatabase(databaseName) } var name
by Delegates.observable("Drew") { prop, old, new !-> println("Name changed from $old to $new") } var address by Delegates.notNull<String>() -
private val db by lazy { SqlDatabase(databaseName) } var name
by Delegates.observable("Drew") { prop, old, new !-> println("Name changed from $old to $new") } var address by Delegates.notNull<String>() val labelView by bindView<TextView>(R.id.label) -
class Preferences(databaseName: String) { private val db by lazy {
SqlDatabase(databaseName) } fun delete(name: String) { db.beginTransaction() try { db.execute("DELETE FROM user WHERE name = ?”) db.setTransactionSuccessful() } finally { db.endTransaction() } } } var name by Delegates.observable("Drew") { prop, old, new !-> println("Name changed from $old to $new") } var address by Delegates.notNull<String>() val labelView by bindView<TextView>(R.id.label) -
class Preferences(databaseName: String) { private val db by lazy {
SqlDatabase(databaseName) } fun delete(name: String) { db.beginTransaction() try { db.execute("DELETE FROM user WHERE name = ?”) db.setTransactionSuccessful() } finally { db.endTransaction() } } } val labelView by bindView<TextView>(R.id.label) -
fun delete(name: String) { db.beginTransaction() try { db.execute("DELETE FROM user
WHERE name = ?") db.setTransactionSuccessful() } finally { db.endTransaction() } } class Preferences(databaseName: String) { private val db by lazy { SplDatabase(databaseName) } } -
fun SqlDatabase.transaction(func: () "-> Unit) { beginTransaction() try { func()
setTransactionSuccessful() } finally { endTransaction() } } -
fun SqlDatabase.transaction(func: () "-> Unit) { beginTransaction() try { func()
setTransactionSuccessful() } finally { endTransaction() } } -
fun SqlDatabase.transaction(func: () "-> Unit) { beginTransaction() try { func()
setTransactionSuccessful() } finally { endTransaction() } } -
fun SqlDatabase.transaction(func: () "-> Unit) { beginTransaction() try { func()
setTransactionSuccessful() } finally { endTransaction() } } -
fun SqlDatabase.transaction(func: () "-> Unit) { beginTransaction() try { func()
setTransactionSuccessful() } finally { endTransaction() } } -
fun SqlDatabase.transaction(func: () "-> Unit) { beginTransaction() try { func()
setTransactionSuccessful() } finally { endTransaction() } } fun delete(name: String) { db.transaction { db.execute("DELETE FROM user WHERE name = ?") } } -
fun SqlDatabase.transaction(func: () "-> Unit) { beginTransaction() try { func()
setTransactionSuccessful() } finally { endTransaction() } } fun delete(name: String) { db.transaction { db.execute("DELETE FROM user WHERE name = ?") } } -
fun SqlDatabase.transaction(func: (SqlDatabase) "-> Unit) { beginTransaction() try { func()
setTransactionSuccessful() } finally { endTransaction() } } fun delete(name: String) { db.transaction { db.execute("DELETE FROM user WHERE name = ?") } } .execute("DELETE FROM user WHERE name = ?") -
fun SqlDatabase.transaction(func: (SqlDatabase) "-> Unit) { beginTransaction() try { func(this)
setTransactionSuccessful() } finally { endTransaction() } } fun delete(name: String) { db.transaction { db.execute("DELETE FROM user WHERE name = ?") } } .execute("DELETE FROM user WHERE name = ?") -
fun SqlDatabase.transaction(func: (SqlDatabase) "-> Unit) { beginTransaction() try { func(this)
setTransactionSuccessful() } finally { endTransaction() } } fun delete(name: String) { db.transaction { it.execute("DELETE FROM user WHERE name = ?") } } .execute("DELETE FROM user WHERE name = ?") -
fun SqlDatabase.transaction(func: (SqlDatabase) "-> Unit) { beginTransaction() try { func(this)
setTransactionSuccessful() } finally { endTransaction() } } fun delete(name: String) { db.transaction { it.execute("DELETE FROM user WHERE name = ?") } } .execute("DELETE FROM user WHERE name = ?") -
fun delete(name: String) { db.transaction { it.execute("DELETE FROM user WHERE
name = ?") } } fun SqlDatabase.transaction(func: SqlDatabase.() "-> Unit) { beginTransaction() try { func(this) setTransactionSuccessful() } finally { endTransaction() } } -
fun delete(name: String) { db.transaction { it.execute("DELETE FROM user WHERE
name = ?") } } fun SqlDatabase.transaction(func: SqlDatabase.() "-> Unit) { beginTransaction() try { this.func() setTransactionSuccessful() } finally { endTransaction() } } -
fun delete(name: String) { db.transaction { it.execute("DELETE FROM user WHERE
name = ?") } } fun SqlDatabase.transaction(func: SqlDatabase.() "-> Unit) { beginTransaction() try { func() setTransactionSuccessful() } finally { endTransaction() } } -
fun delete(name: String) { db.transaction { execute("DELETE FROM user WHERE
name = ?") } } fun SqlDatabase.transaction(func: SqlDatabase.() "-> Unit) { beginTransaction() try { func() setTransactionSuccessful() } finally { endTransaction() } } -
@Serializable data class User(val name: String, val age: Int) val
drew = User("Drew", 5) val jsonString = Json.encodeToString(drew) -
@Serializable data class User(val name: String, val age: Int) val
drew = User("Drew", 5) val jsonString = Json.encodeToString(drew) println(jsonString) "// {"name":"Drew","age":5} -
@Serializable data class User(val name: String, val age: Int) val
drew = User("Drew", 5) val jsonString = Json.encodeToString(drew) println(jsonString) "// {"name":"Drew","age":5} val drew = Json.decodeFromString<User>(jsonString) -
@Serializable data class User(val name: String, val age: Int) val
drew = User("Drew", 5) val jsonString = Json.encodeToString(drew) println(jsonString) "// {"name":"Drew","age":5} val drew = Json.decodeFromString<User>(jsonString) println(drew) "// User(name=Drew, age=5) -
@Serializable data class User(val name: String, val age: Int) val
drew = User("Drew", 5) val jsonString = Json.encodeToString(drew) println(jsonString) "// {"name":"Drew","age":5} val drew = Json.decodeFromString<User>(jsonString) println(drew) "// User(name=Drew, age=5) -
fun main() = runBlocking { repeat(100_000) { launch { delayAndPrint()
} } } suspend fun delayAndPrint() { delay(1.seconds) print(".") } -
fun main() = runBlocking { repeat(100_000) { launch { delayAndPrint()
} } } suspend fun delayAndPrint() { delay(1.seconds) print(".") } -
fun main() = runBlocking { repeat(100_000) { launch { delayAndPrint()
} } } suspend fun delayAndPrint() { delay(1.seconds) print(".") } -
suspend fun updateUserName() { Main { val user = Default
{ http.get("/api/user/1") } labelName.text = user.name } } -
suspend fun updateUserName() { Main { val user = Default
{ http.get("/api/user/1") } labelName.text = user.name } } -
suspend fun updateUserName() { Main { val user = Default
{ http.get("/api/user/1") } labelName.text = user.name } } -
suspend fun updateUserName() { Main { val user = Default
{ http.get("/api/user/1") } labelName.text = user.name } } -
suspend fun updateUserName() { Main { val user = Default
{ http.get("/api/user/1") } labelName.text = user.name } } -
suspend fun updateUserName() { Main { val user = Default
{ http.get("/api/user/1") } labelName.text = user.name } } -
suspend fun updateUserName() { Main { val user = try
{ Default { http.get("/api/user/1") } } catch (e: HttpResponseException) { e.printStacktrace() null } labelName.text = user"?.name } } -
suspend fun updateUserName() { Main { val user = try
{ Default { http.get("/api/user/1") } } catch (e: HttpResponseException) { e.printStacktrace() null } labelName.text = user"?.name } }