Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
まだJavaで消耗してるの?Kotlinのすすめ
Search
kazakago
May 19, 2017
Programming
0
170
まだJavaで消耗してるの?Kotlinのすすめ
Cluex社主催 LT大会 発表資料
kazakago
May 19, 2017
Tweet
Share
More Decks by kazakago
See All by kazakago
with_Android版における今までのアーキテクチャとこれから.pdf
kazakago
2
290
OpenSTFによる検証端末管理とその先の一手
kazakago
0
250
中規模以上のアプリ開発におけるCIレシピとリリースフロー戦略
kazakago
6
8.2k
Androidアプリにおける複雑な画面と向き合うための設計戦略
kazakago
1
290
Annotation Processingを 駆使したコード生成で ボイラープレートコードを駆逐しよう!
kazakago
2
6.2k
お う ち ハ ッ ク
kazakago
0
190
モバイルアプリ開発におけるブランチ運用でこの先生きのこるには
kazakago
0
100
Androidでユーザーの大切なデータを預かる
kazakago
0
1k
Other Decks in Programming
See All in Programming
20年もののレガシープロダクトに 0からPHPStanを入れるまで / phpcon2024
hirobe1999
0
140
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
920
Full stack testing :: basic to basic
up1
1
930
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
270
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
4.1k
創造的活動から切り拓く新たなキャリア 好きから始めてみる夜勤オペレーターからSREへの転身
yjszk
1
130
快速入門可觀測性
blueswen
0
330
Haze - Real time background blurring
chrisbanes
1
510
たのしいparse.y
ydah
3
120
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
プロダクトの品質に コミットする / Commit to Product Quality
pekepek
2
770
命名をリントする
chiroruxx
1
390
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
328
21k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Optimising Largest Contentful Paint
csswizardry
33
3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
440
Why Our Code Smells
bkeepers
PRO
335
57k
A better future with KSS
kneath
238
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
YesSQL, Process and Tooling at Scale
rocio
169
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
Transcript
·ͩ+BWBͰফͯ͠Δͷʁ ɹɹɹɹɹͷ͢͢Ί
ࣗݾհ w ాଜݠհʢ!,B[B,BHPʣ w גࣜձࣾΠάχεॴଐ w ࿀Ѫɾࠗ׆ϚονϯάαʔϏε ʮXJUIʯ։ൃϝϯόʔ w "OESPJE։ൃྺɿ͍͍ͩͨ͘Β͍
ࣗݾհ
8IBU`Tɹɹɹɹɹ
ɹɹɹɹɹͬͯԿʁ w +FU#SBJOT͕ࣾ։ൃͨ͠+BWBશޓݴޠ w *OUFMMJK*%&"3VCZ.JOFɺ1IQ4UPSNͳͲͷ*%&ʢ౷߹։ൃ ڥʣΛ࡞ͬͯΔνΣίʹ͋Δձࣾ w ݱࡏͷόʔδϣϯ w Φʔϓϯιʔε
"QBDIFϥΠηϯε
"OESPJEͷୈҰݴޠʹʂ ࡢʢʂʣ(PPHMF*0ʹͯ "OESPJE։ൃͷୈҰڃݴޠʹͳΔͱൃද͞Ε·ͨ͠
ͷ ྑ͍ͱ͜Ζ
ಋೖͷෑډͷ͞ w (SBEMF.BWFOͳͲͷҰൠతͳϏϧυπʔϧΛಋ ೖ͍ͯ͠Ε͙͢ʹಋೖՄೳ w "OESPJEϓϩδΣΫτͳΒ΄΅ͯ͢ͷϓϩδΣΫτͰಋೖՄೳ w *OUFMMJK*%&"ͰϋΠϨϕϧͳαϙʔτ͕͞Ε͍ͯͯ +BWBˠ,PUMJOͷίϯόʔλʔଐ͞Ε͓ͯΓɺͦ Ε͕͔ͳΓ༏ल
w "OESPJE4UVEJP*OUFMMJK*%&"ޓͰ+FUCSBJOT͕ࣾ࡞͍ͬͯΔ
4QSJOH'SBNFXPSL
ܕਪ ม+BWBͱҧ͍WBSͱ͍͏҉తͳܕએݴΛߦ͏ɻ ίʔυͷ࠷ޙʹʮʯΛ͚Δඞཁͳ͍ɻ w +BWB String value = new String("JavaͩΑʔʂ");
w ,PUMJO var value = String("KotlinͩΑʔʂ")
ܕਪ KBWBʹ͓͚ΔpOBMम০ࢠ,PUMJOͰWBMͱ͍͏มએݴͰه ड़͢Δɻ WBMͰ͍͍ͱ͜ΖΛWBSͰهड़͢Δͱ*%&͔Βܯࠂදࣔ͞Ε ΔͨΊKBWBΑΓpOBM͕పఈͰ͖Δʢؾ͕͢Δʣ w +BWB final String value
= new String("JavaͩΑʔʂ"); w ,PUMJO val value = String("KotlinͩΑʔʂ")
ϥϜμࣜ ,PUMJOͰϥϜμ͕ࣜ͑Δɻ "OESPJEͷϘλϯΠϕϯτ+BWBͰҎԼͷΑ͏ʹ͜͏ ॻ͕͘ɺɺɺ w +BWB +BWB Button button
= new Button(this); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.print("Ϙλϯԡ͞Εͨʂ"); } });
ϥϜμࣜ ,PUMJOͰ͜͏ɻ w ,PUMJO val button = Button(this) button.setOnClickListener {
print("Ϙλϯԡ͞Εͨʂ") }
/VMM҆શ +BWBͩͱωετ͞Εͨਂ͍֊ͷมΛऔΓग़ͦ͏ ͱ͢ΔͱҎԼͷΑ͏ͳίʔυʹͳΔɻ ͜Μͳ࣌ʹى͜Γ͕ͪͳͷ͕ɺɺ w +BWB ObjectD getObjectD(ObjectA objectA) {
return objectA.getObjectB().getObjectC().getObjectD(); }
/VMM҆શ NullPointerException
/VMM҆શ w +BWB ObjectD getObjectD(ObjectA objectA) { if (objectA !=
null) { ObjectB objectB = objectA.getObjectB(); if (objectB != null) { ObjectC objectC = objectB.getObjectC(); if (objectC != null) { return objectC.getObjectD(); } } } return null; }
/VMM҆શ
/VMM҆શ ,PUMJOͰಉͷίʔυΛॻ͘߹ϫϯϥΠφʔͰॻ͚ Δ w ,PUMJO fun getObjectD(objectA: ObjectA?): ObjectD? {
return objectA?.objectB?.objectC?.objectD }
/VMM҆શ w Λ͚ͭΔͱ/VMMΛೖͰ͖Δ var value: String? = null w Λ͚ͭͳ͍ͱ/VMMΛೖͰ͖ͳ͍
var value: String = "hogehoge"
֦ுؔ w طଘͷΫϥεΠϯελϯεʹϝιουΛੜ͢͜ͱ ͕ग़དྷΔ fun Int.isEvenNumber(): Boolean { return (this
% 2 == 0) } ˣ val counter: Int = 1 val isEven = counter.isEvenNumber()
ͦͷଞʹʜ w ίϧʔνϯ w σϑΥϧτҾ w ετϦʔϜૢ࡞ؔ w σʔλΫϥε w
ඇݕࠪྫ֎ w KBWBTDSJQUͷτϥΠϯεύΠϧ w ,PUMJO/BUJWF w FUD
ͷ l·ͩzྑ͘ͳ͍ͱ͜Ζ
+BWBͷࣝඞཁ w +BWBˡˠ,PUMJOͰ૬ޓʹ͑Δ͕Ώ͑ʹݴޠΛ·ͨ ͙ࡍʹ֮͑ͯஔ͔ͳ͚ΕͳΒͳ͍͓࡞๏ଟ͍ɻ w ಛʹϑϨʔϜϫʔΫ͕+BWBͰॻ͔Ε͍ͯΔ߹͔ ͳΓҙ͢Δඞཁ͕͋Γɻ w +BWBͷ͕ࣝͳ͍ͱͳͥΤϥʔ͕ൃੜ͍ͯ͠Δͷ ͔அ͕͍͜͠ͱ͋Δ
Ұ෦ͷϥΠϒϥϦ ͏·͘ಈ࡞͠ͳ͍ࣄ͕͋Δ w ΄ͱΜͲͷϥΠϒϥϦͳ͘ಈ࡞͢Δ͕ɺίʔ υͷࣗಈੜΛߦ͏ϥΠϒϥϦҰ෦ಛघͳॻ͖ํ Λ͠ͳ͍ͱಈ࡞͠ͳ͍͜ͱ͕͋Δ w +BWBϥΠϒϥϦͩͱ,PUMJOతʹͳهड़Λͤ͟ ΔΛಘͳ͍͜ͱ͕͋Δ
ͷ ·ͱΊ
·ͱΊ w +BWBΑΓݴޠ্༷ʹ҆શ͔ͭ؆ܿʹॻ͚Δ w طଘͷ+BWBͱࠞࡏͰ͖ɺίϯόʔλʔ͋ΔͨΊ Ҡߦൺֱత༰қ w ॳֶऀ+BWB͔Βֶश͖͢ w ໊લ͕ͳΜͱͳ͔͘Θ͍͍ʢຊਓฒײʣ
͋Γ͕ͱ͏͍͟͝·ͨ͠