KOTLIN初體驗
andyang@AndroidTaipei
@2017 PKLOT CO., LTD
@2017 PKLOT CO., LTD
ABOUT ME
▸ Andy
▸ @ 停⾞車車⼤大聲公
▸ @ Android Developer 讀書會 (TADSG)
▸ @ Android Code Club (週三晚上)
@2017 PKLOT CO., LTD
有⼈人聽過 KOTLIN 嗎?
@2017 PKLOT CO., LTD
有⼈人⽤用過 KOTLIN 嗎?
@2017 PKLOT CO., LTD
HELLO KOTLIN
▸ JetBrains 開發的 JVM 語⾔言
▸ 包含很多 Effective Java 的思想在裡⾯面
▸ Java 開發者的夢幻語⾔言 ?!
@2017 PKLOT CO., LTD
WHY KOTLIN
▸ Short Code
▸ Null Safety
▸ Smart Cast
▸ Lambda (Functional Programing)
▸ Method Extension
▸ Hybrid with Java
▸ Default final
▸ Everything is Object
@2017 PKLOT CO., LTD
HOW KOTLIN
▸ Install Android Studio Plugin “Kotlin”
▸ cmd + shift + a -> Configure kotlin in Project
▸ classpth : “org.jetbrains.kotlin:lotlin-gradle-plugin:1.0.7”
▸ apply plugin: ‘kotlin-android’
▸ compile ‘org.jetbrains.kotlin:kotlin-stdlib:1.0.7’
@2017 PKLOT CO., LTD
JAVA TO KOTLIN
▸ 遇到不知道如何表達的 kotlin 語法可以先透過轉換觀察
▸ cmd + shift + a -> Convert Java File to Kotlin
▸ ⼀一鍵完成
@2017 PKLOT CO., LTD
KOTLIN FEATURE
▸ Multiple class in one file
▸ Data Class
▸ Properties val/var
▸ Null Safety
▸ Smart Cast
▸ Method Extension / infix
▸ Lambda
▸ Operator Overloading
▸ Companion object
▸ Delegate
▸ Dependency Injection
@2017 PKLOT CO., LTD
MULTIPLE CLASS IN ONE FILE
▸ Class 的整理理更更有彈性
▸ 同質性⾼高且簡易易的 Class 可以放到⼀一起
▸ 提⾼高閱讀,不易易中斷思考
@2017 PKLOT CO., LTD
DATA CLASS
▸ hashCode()
▸ toString()
▸ equals()
▸ with properties
@2017 PKLOT CO., LTD
PROPERTIES
▸ var(variable)
▸ var age (compile error)
▸ var age:Int (compile error)
▸ var age = 1 (ok)
▸ age = 2 (ok)
▸ age = null (ok)
▸ var myAge = age (ok)
@2017 PKLOT CO., LTD
PROPERTIES
▸ val(value)
▸ val age (compile error)
▸ val age:Int (compile error)
▸ val age = 18 (ok)
▸ age = 19 (compile error)
@2017 PKLOT CO., LTD
NULL SAFETY
▸ NullPointerException
▸ ? -> nullable, default non null
▸ var order : Order? = Order()
▸ order?.price (null safety if order is null)
▸ order.price (compile error)
@2017 PKLOT CO., LTD
SMART CASE
▸ ClassCastException
▸ Stupid Case
if(exception instanceOf HttpException) {
HttpException httpException = (HttpException) exception
int code = httpException.getStatusCode();
}
@2017 PKLOT CO., LTD
SMART CASE
▸ Smart Case
when(exception) {
is HttpException -> {
int code = exception.statusCode
}
default -> {
// do something else
}
}
@2017 PKLOT CO., LTD
METHOD EXTENSION / INFIX
▸ Method Extension
var name : String = null
val isNull = name.isNullOrEmpty()
▸ In Java
if(name == null || name.length == 0)
StringUtils.isNullOrEmpty(name)
@2017 PKLOT CO., LTD
METHOD EXTENSION / INFIX
▸ How
fun CharSequence?.isNullOrEmpty() : Boolean
= this == null || this.lenght == 0
@2017 PKLOT CO., LTD
METHOD EXTENSION / INFIX
▸ Infix
▸ val isLike = “ABC” like “123-ABC”
infix fun String.like(it: String) : Boolean =
this.toUpperCase.contains(it)
▸ “name” to “Andy”
mapOf(
Pair(“nickName”, “andyang”),
“name” to “Andy”
)
@2017 PKLOT CO., LTD
LAMBDA
▸ 不必再等 Java 8 到天荒地老
▸ 不⽤用 Retrolambda
▸ Kotlin 內建 lambda
@2017 PKLOT CO., LTD
LAMBDA
▸ setOnClickListener()
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
Toast.makeToast(…..).show()
}
})
@2017 PKLOT CO., LTD
LAMBDA
▸ setOnClickListener()
view.setOnClickListener({ view ->
Toast.makeToast(…..).show()
})
view.setOnClickListener({
Toast.makeToast(…..).show()
})
@2017 PKLOT CO., LTD
LAMBDA
▸ setOnClickListener()
view.setOnClickListener{ Toast.makeToast(…..).show()}
view.onClick{ Toast.makeToast(…..).show()}
@2017 PKLOT CO., LTD
LAMBDA
▸ Adapter OnItemClickListener
interface OnOrderItemClickListener{
onOrderItemClick(Order order);
}
OnOrderItemClickListener onOrderItemClickListener;
‣ interface, setter, init, invoke
@2017 PKLOT CO., LTD
LAMBDA
▸ Adapter OnItemClickListener in Kotlin
var onOrderItemClickListener : (order: Order) -> Unit
holder?.onClick{
onOrderItemClickListener.invoke(order)
}
holder?.onClick{
onOrderItemClickListener(order)
}
@2017 PKLOT CO., LTD
OPERATOR OVERLOADING
▸ a == b -> a.equals(b)
▸ a + b -> a.plus(b)
▸ a - b, a * b, a / b, a % b …..
▸ a..b -> a.rangeTo(b)
▸ a in b -> a.contains(b)
▸ a[i] -> a.get(i)
▸ a[i] = b -> a.set(i, b)
@2017 PKLOT CO., LTD
COMPANION OBJECT
class App : Application() {
companion object {
private var instance: Application? = null
fun instance() = instance
}
override fun onCreate() {
super.onCreate();
instance = this
}
}
@2017 PKLOT CO., LTD
PROPERTISE DELEGATE
class Delegate<T> : ReadWriteProperty<Any?, T> {
override fun getValue(thisRef: Any?, property : KPropety<*>) {
}
override fun setValue(thisRef: Any?, property : KPropety<*>, value: T) {
}
}
var name : String by Delegate()
@2017 PKLOT CO., LTD
PROPERTISE DELEGATE
‣ Demo Delegate SharedPreferences
@2017 PKLOT CO., LTD
DEPENDENCY INJECTION
‣ In MPV Pattern
‣ Presenter need inject Model
‣ Repository(NetworkService networkService, LocalData localData)
‣ LocalData(Content context)
‣ Presenter(View view, Repository repository)
@2017 PKLOT CO., LTD
DEPENDENCY INJECTION
‣ new Presenter
‣ In Java
Presenter presenter = new Presenter(new Repository(new
NetworkService(), new LocalData(context))); // so ugly
Presenter presenter = PresenterFactory.create();
@2017 PKLOT CO., LTD
DEPENDENCY INJECTION
‣ In kotlin
‣ Repository(networkService : NetworkService = NetworkService(),
localData : LocalData = LocalData())
‣ LocalData(context : Content = App.instance())
‣ Presenter(view : View, repository : Repository = Repository())
@2017 PKLOT CO., LTD
DEPENDENCY INJECTION
‣ In kotlin
‣ val presenter = Presenter(view)
‣ for testing
‣ val presenter = Presenter(view, mockRepository)
@2017 PKLOT CO., LTD
REFERENCE
▸ Kotlin official guide
▸ https://kotlinlang.org/docs/reference/
▸ Kotlin For Android Developer (e-book)
▸ https://antonioleiva.com/kotlin-android-developers-book/
@2017 PKLOT CO., LTD
學習⼀一⾨門語⾔言最快的⽅方式就是只能⽤用它!
@2017 PKLOT CO., LTD
Q&A
@2017 PKLOT CO., LTD
停車大聲公
總是給你更好的停車體驗

More Related Content

PDF
COSCUP2017 工程師x小學生 十年碼農養成計畫
PDF
COSCUP 2020 Google 技術 x 公共參與 x 開源 口罩地圖技術開源
PPTX
Taking Jenkins Pipeline to the Extreme
PDF
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
PDF
Dev fest 2020 taiwan how to debug microservices on kubernetes as a pros (ht...
PPT
Groovy & Grails: Scripting for Modern Web Applications
PDF
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
PDF
Grailsx@ロンドンへ行ってきた報告。
COSCUP2017 工程師x小學生 十年碼農養成計畫
COSCUP 2020 Google 技術 x 公共參與 x 開源 口罩地圖技術開源
Taking Jenkins Pipeline to the Extreme
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
Dev fest 2020 taiwan how to debug microservices on kubernetes as a pros (ht...
Groovy & Grails: Scripting for Modern Web Applications
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
Grailsx@ロンドンへ行ってきた報告。

What's hot (11)

PDF
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
PDF
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
PDF
#MBLTdev: Разработка первоклассных SDK для Android (Twitter)
PDF
Using Monitoring & Configuration Management to restart services.
PDF
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
PDF
Gradle - time for a new build
PDF
Build microservice with gRPC in golang
PDF
Using the Groovy Ecosystem for Rapid JVM Development
PDF
用 Go 語言打造多台機器 Scale 架構
PDF
Gdg cloud taipei ddt meetup #53 buildpack
PDF
Reactive Programming by UniRx for Asynchronous & Event Processing
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
#MBLTdev: Разработка первоклассных SDK для Android (Twitter)
Using Monitoring & Configuration Management to restart services.
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
Gradle - time for a new build
Build microservice with gRPC in golang
Using the Groovy Ecosystem for Rapid JVM Development
用 Go 語言打造多台機器 Scale 架構
Gdg cloud taipei ddt meetup #53 buildpack
Reactive Programming by UniRx for Asynchronous & Event Processing
Ad

Similar to Kotlin初體驗 (20)

PDF
Kotlin 初體驗
PPTX
從零開始學 Android
PDF
Introduction to Kotlin for Java developer
PDF
Kotlin for Android Developers
PDF
Develop your next app with kotlin @ AndroidMakersFr 2017
PDF
Intro to Kotlin
PPTX
Intro to kotlin 2018
PDF
Kotlin a problem solver - gdd extended pune
PDF
Kotlin hands on - MorningTech ekito 2017
PPTX
Android & Kotlin - The code awakens #03
PDF
From java to kotlin beyond alt+shift+cmd+k
PPTX
Kotlin : Happy Development
PDF
Kotlin: maybe it's the right time
PDF
Meetup di GDG Italia - Leonardo Pirro - Codemotion Rome 2018
PDF
Kotlin, 어떻게 동작하나요
PDF
Having Fun with Kotlin Android - DILo Surabaya
PPTX
PDF
Kotlin @ Devoxx 2011
PDF
Kotlin Slides from Devoxx 2011
Kotlin 初體驗
從零開始學 Android
Introduction to Kotlin for Java developer
Kotlin for Android Developers
Develop your next app with kotlin @ AndroidMakersFr 2017
Intro to Kotlin
Intro to kotlin 2018
Kotlin a problem solver - gdd extended pune
Kotlin hands on - MorningTech ekito 2017
Android & Kotlin - The code awakens #03
From java to kotlin beyond alt+shift+cmd+k
Kotlin : Happy Development
Kotlin: maybe it's the right time
Meetup di GDG Italia - Leonardo Pirro - Codemotion Rome 2018
Kotlin, 어떻게 동작하나요
Having Fun with Kotlin Android - DILo Surabaya
Kotlin @ Devoxx 2011
Kotlin Slides from Devoxx 2011
Ad

More from 哲偉 楊 (16)

PDF
Specification unit test by Spek
PDF
Code kata 的自我修煉
PDF
Coding dojo
PDF
輕輕鬆鬆產生 changelog
PDF
Speed up add custom marker on google map
PDF
PDF
Jenkins for android developer at TWJUG
PDF
自己的 Jenkins 自己來 for Android developer
PDF
從開發到上線的華麗大冒險
PDF
Unit test and ui testing with cucumber
PDF
RxJava With retrolambda
PDF
ORMLite Android
PDF
設計師合作經驗分享
PPTX
Dog point
PPTX
PPTX
Hybrid design with bootstrap
Specification unit test by Spek
Code kata 的自我修煉
Coding dojo
輕輕鬆鬆產生 changelog
Speed up add custom marker on google map
Jenkins for android developer at TWJUG
自己的 Jenkins 自己來 for Android developer
從開發到上線的華麗大冒險
Unit test and ui testing with cucumber
RxJava With retrolambda
ORMLite Android
設計師合作經驗分享
Dog point
Hybrid design with bootstrap

Recently uploaded (20)

PPTX
gene cloning powerpoint for general biology 2
PPT
Animal tissues, epithelial, muscle, connective, nervous tissue
PPT
1. INTRODUCTION TO EPIDEMIOLOGY.pptx for community medicine
PPTX
limit test definition and all limit tests
PDF
Warm, water-depleted rocky exoplanets with surfaceionic liquids: A proposed c...
PPT
Presentation of a Romanian Institutee 2.
PDF
Is Earendel a Star Cluster?: Metal-poor Globular Cluster Progenitors at z ∼ 6
PDF
CHAPTER 3 Cell Structures and Their Functions Lecture Outline.pdf
PPTX
Presentation1 INTRODUCTION TO ENZYMES.pptx
PPTX
TORCH INFECTIONS in pregnancy with toxoplasma
PPTX
endocrine - management of adrenal incidentaloma.pptx
PPTX
ap-psych-ch-1-introduction-to-psychology-presentation.pptx
PDF
Wound infection.pdfWound infection.pdf123
PPT
Computional quantum chemistry study .ppt
PPTX
Introcution to Microbes Burton's Biology for the Health
PPT
Biochemestry- PPT ON Protein,Nitrogenous constituents of Urine, Blood, their ...
PPTX
perinatal infections 2-171220190027.pptx
PPTX
Substance Disorders- part different drugs change body
PDF
Assessment of environmental effects of quarrying in Kitengela subcountyof Kaj...
PDF
Looking into the jet cone of the neutrino-associated very high-energy blazar ...
gene cloning powerpoint for general biology 2
Animal tissues, epithelial, muscle, connective, nervous tissue
1. INTRODUCTION TO EPIDEMIOLOGY.pptx for community medicine
limit test definition and all limit tests
Warm, water-depleted rocky exoplanets with surfaceionic liquids: A proposed c...
Presentation of a Romanian Institutee 2.
Is Earendel a Star Cluster?: Metal-poor Globular Cluster Progenitors at z ∼ 6
CHAPTER 3 Cell Structures and Their Functions Lecture Outline.pdf
Presentation1 INTRODUCTION TO ENZYMES.pptx
TORCH INFECTIONS in pregnancy with toxoplasma
endocrine - management of adrenal incidentaloma.pptx
ap-psych-ch-1-introduction-to-psychology-presentation.pptx
Wound infection.pdfWound infection.pdf123
Computional quantum chemistry study .ppt
Introcution to Microbes Burton's Biology for the Health
Biochemestry- PPT ON Protein,Nitrogenous constituents of Urine, Blood, their ...
perinatal infections 2-171220190027.pptx
Substance Disorders- part different drugs change body
Assessment of environmental effects of quarrying in Kitengela subcountyof Kaj...
Looking into the jet cone of the neutrino-associated very high-energy blazar ...

Kotlin初體驗

  • 2. @2017 PKLOT CO., LTD ABOUT ME ▸ Andy ▸ @ 停⾞車車⼤大聲公 ▸ @ Android Developer 讀書會 (TADSG) ▸ @ Android Code Club (週三晚上)
  • 3. @2017 PKLOT CO., LTD 有⼈人聽過 KOTLIN 嗎?
  • 4. @2017 PKLOT CO., LTD 有⼈人⽤用過 KOTLIN 嗎?
  • 5. @2017 PKLOT CO., LTD HELLO KOTLIN ▸ JetBrains 開發的 JVM 語⾔言 ▸ 包含很多 Effective Java 的思想在裡⾯面 ▸ Java 開發者的夢幻語⾔言 ?!
  • 6. @2017 PKLOT CO., LTD WHY KOTLIN ▸ Short Code ▸ Null Safety ▸ Smart Cast ▸ Lambda (Functional Programing) ▸ Method Extension ▸ Hybrid with Java ▸ Default final ▸ Everything is Object
  • 7. @2017 PKLOT CO., LTD HOW KOTLIN ▸ Install Android Studio Plugin “Kotlin” ▸ cmd + shift + a -> Configure kotlin in Project ▸ classpth : “org.jetbrains.kotlin:lotlin-gradle-plugin:1.0.7” ▸ apply plugin: ‘kotlin-android’ ▸ compile ‘org.jetbrains.kotlin:kotlin-stdlib:1.0.7’
  • 8. @2017 PKLOT CO., LTD JAVA TO KOTLIN ▸ 遇到不知道如何表達的 kotlin 語法可以先透過轉換觀察 ▸ cmd + shift + a -> Convert Java File to Kotlin ▸ ⼀一鍵完成
  • 9. @2017 PKLOT CO., LTD KOTLIN FEATURE ▸ Multiple class in one file ▸ Data Class ▸ Properties val/var ▸ Null Safety ▸ Smart Cast ▸ Method Extension / infix ▸ Lambda ▸ Operator Overloading ▸ Companion object ▸ Delegate ▸ Dependency Injection
  • 10. @2017 PKLOT CO., LTD MULTIPLE CLASS IN ONE FILE ▸ Class 的整理理更更有彈性 ▸ 同質性⾼高且簡易易的 Class 可以放到⼀一起 ▸ 提⾼高閱讀,不易易中斷思考
  • 11. @2017 PKLOT CO., LTD DATA CLASS ▸ hashCode() ▸ toString() ▸ equals() ▸ with properties
  • 12. @2017 PKLOT CO., LTD PROPERTIES ▸ var(variable) ▸ var age (compile error) ▸ var age:Int (compile error) ▸ var age = 1 (ok) ▸ age = 2 (ok) ▸ age = null (ok) ▸ var myAge = age (ok)
  • 13. @2017 PKLOT CO., LTD PROPERTIES ▸ val(value) ▸ val age (compile error) ▸ val age:Int (compile error) ▸ val age = 18 (ok) ▸ age = 19 (compile error)
  • 14. @2017 PKLOT CO., LTD NULL SAFETY ▸ NullPointerException ▸ ? -> nullable, default non null ▸ var order : Order? = Order() ▸ order?.price (null safety if order is null) ▸ order.price (compile error)
  • 15. @2017 PKLOT CO., LTD SMART CASE ▸ ClassCastException ▸ Stupid Case if(exception instanceOf HttpException) { HttpException httpException = (HttpException) exception int code = httpException.getStatusCode(); }
  • 16. @2017 PKLOT CO., LTD SMART CASE ▸ Smart Case when(exception) { is HttpException -> { int code = exception.statusCode } default -> { // do something else } }
  • 17. @2017 PKLOT CO., LTD METHOD EXTENSION / INFIX ▸ Method Extension var name : String = null val isNull = name.isNullOrEmpty() ▸ In Java if(name == null || name.length == 0) StringUtils.isNullOrEmpty(name)
  • 18. @2017 PKLOT CO., LTD METHOD EXTENSION / INFIX ▸ How fun CharSequence?.isNullOrEmpty() : Boolean = this == null || this.lenght == 0
  • 19. @2017 PKLOT CO., LTD METHOD EXTENSION / INFIX ▸ Infix ▸ val isLike = “ABC” like “123-ABC” infix fun String.like(it: String) : Boolean = this.toUpperCase.contains(it) ▸ “name” to “Andy” mapOf( Pair(“nickName”, “andyang”), “name” to “Andy” )
  • 20. @2017 PKLOT CO., LTD LAMBDA ▸ 不必再等 Java 8 到天荒地老 ▸ 不⽤用 Retrolambda ▸ Kotlin 內建 lambda
  • 21. @2017 PKLOT CO., LTD LAMBDA ▸ setOnClickListener() view.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ Toast.makeToast(…..).show() } })
  • 22. @2017 PKLOT CO., LTD LAMBDA ▸ setOnClickListener() view.setOnClickListener({ view -> Toast.makeToast(…..).show() }) view.setOnClickListener({ Toast.makeToast(…..).show() })
  • 23. @2017 PKLOT CO., LTD LAMBDA ▸ setOnClickListener() view.setOnClickListener{ Toast.makeToast(…..).show()} view.onClick{ Toast.makeToast(…..).show()}
  • 24. @2017 PKLOT CO., LTD LAMBDA ▸ Adapter OnItemClickListener interface OnOrderItemClickListener{ onOrderItemClick(Order order); } OnOrderItemClickListener onOrderItemClickListener; ‣ interface, setter, init, invoke
  • 25. @2017 PKLOT CO., LTD LAMBDA ▸ Adapter OnItemClickListener in Kotlin var onOrderItemClickListener : (order: Order) -> Unit holder?.onClick{ onOrderItemClickListener.invoke(order) } holder?.onClick{ onOrderItemClickListener(order) }
  • 26. @2017 PKLOT CO., LTD OPERATOR OVERLOADING ▸ a == b -> a.equals(b) ▸ a + b -> a.plus(b) ▸ a - b, a * b, a / b, a % b ….. ▸ a..b -> a.rangeTo(b) ▸ a in b -> a.contains(b) ▸ a[i] -> a.get(i) ▸ a[i] = b -> a.set(i, b)
  • 27. @2017 PKLOT CO., LTD COMPANION OBJECT class App : Application() { companion object { private var instance: Application? = null fun instance() = instance } override fun onCreate() { super.onCreate(); instance = this } }
  • 28. @2017 PKLOT CO., LTD PROPERTISE DELEGATE class Delegate<T> : ReadWriteProperty<Any?, T> { override fun getValue(thisRef: Any?, property : KPropety<*>) { } override fun setValue(thisRef: Any?, property : KPropety<*>, value: T) { } } var name : String by Delegate()
  • 29. @2017 PKLOT CO., LTD PROPERTISE DELEGATE ‣ Demo Delegate SharedPreferences
  • 30. @2017 PKLOT CO., LTD DEPENDENCY INJECTION ‣ In MPV Pattern ‣ Presenter need inject Model ‣ Repository(NetworkService networkService, LocalData localData) ‣ LocalData(Content context) ‣ Presenter(View view, Repository repository)
  • 31. @2017 PKLOT CO., LTD DEPENDENCY INJECTION ‣ new Presenter ‣ In Java Presenter presenter = new Presenter(new Repository(new NetworkService(), new LocalData(context))); // so ugly Presenter presenter = PresenterFactory.create();
  • 32. @2017 PKLOT CO., LTD DEPENDENCY INJECTION ‣ In kotlin ‣ Repository(networkService : NetworkService = NetworkService(), localData : LocalData = LocalData()) ‣ LocalData(context : Content = App.instance()) ‣ Presenter(view : View, repository : Repository = Repository())
  • 33. @2017 PKLOT CO., LTD DEPENDENCY INJECTION ‣ In kotlin ‣ val presenter = Presenter(view) ‣ for testing ‣ val presenter = Presenter(view, mockRepository)
  • 34. @2017 PKLOT CO., LTD REFERENCE ▸ Kotlin official guide ▸ https://kotlinlang.org/docs/reference/ ▸ Kotlin For Android Developer (e-book) ▸ https://antonioleiva.com/kotlin-android-developers-book/
  • 35. @2017 PKLOT CO., LTD 學習⼀一⾨門語⾔言最快的⽅方式就是只能⽤用它!
  • 36. @2017 PKLOT CO., LTD Q&A @2017 PKLOT CO., LTD