Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JavaからみたKotlin
Search
Amane Nikaido
October 17, 2017
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaからみたKotlin
Amane Nikaido
October 17, 2017
More Decks by Amane Nikaido
See All by Amane Nikaido
HTTPSの基本から NetworkSecurityConfigまで
a2kaido
5
4.5k
React with Kotlin
a2kaido
2
1.3k
Use Kotlin for build.gradle.
a2kaido
0
520
Other Decks in Programming
See All in Programming
mrbgem 三角測量 開発
ogom
0
150
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
730
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
510
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
370
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3k
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
180
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
9.2k
Are APIs Still Relevant in the AI Era?
soyuka
0
370
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
How Software Deployment tools have changed in the past 20 years
geshan
2
34k
A Tale of Four Properties
chriscoyier
163
24k
Typedesign – Prime Four
hannesfritz
42
3.2k
Practical Orchestrator
shlominoach
192
12k
It's Worth the Effort
3n
188
29k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
430
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Product Roadmaps are Hard
iamctodd
55
13k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
720
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Transcript
+BWB͔Βݟͨ ,PUMJO ೋ֊ಊɹว
w ϓϩϑΟʔϧ w ,PUMJOָ͍͠ w +BWB͔Βݟͨ,PUMJO w ·ͱΊ ͘͡
ೋ֊ಊว ʹ͔͍Ͳ͏͋·Ͷ !BLBJEP!BOJLBJEP ,PUMJO͕͖Ͱ͢ ϓϩϑΟʔϧ ͨ·ʹ,PUMJOʹ13ૹͬͯ·͢
,PUMJOͷ͕͖͜͜ ϘΠϥʔϓϨʔτΛݮΒͤΔ /VMM4BGFUZ XIFO TXJUDI ͷCSFBLॻ͔ͳ͍͍ͯ͘ 4NBSU$BTU ηϛίϩϯॻ͔ͳ͍͍ͯ͘ είʔϓؔ ͔Θ͍͍
ॻָ͍͍͍ͯͯ͠ 4".ม σϑΥϧτҾ
,PUMJOͷ͕͖͜͜ ϘΠϥʔϓϨʔτΛݮΒͤΔ /VMM4BGFUZ XIFO TXJUDI ͷCSFBLॻ͔ͳ͍͍ͯ͘ 4NBSU$BTU ηϛίϩϯॻ͔ͳ͍͍ͯ͘ είʔϓؔ ͔Θ͍͍
ॻָ͍͍͍ͯͯ͠ 4".ม σϑΥϧτҾ
5IFGVOLFZXPSEJT VTFEUPEFDMBSFB GVODUJPO 1SPHSBNNJOHJO ,PUMJOJTMPUTPGGVO JOEFFE
,PUMJOָ͍͠ʂ
,PUMJOָ͍͠ʂ
͚Ͳɺ+BWBͷؾ࣋ͪ ߟ͑ͯ͋͛Αʁ
+BWB͔Βݟͨ ,PUMJO ೋ֊ಊɹว
w ,PUMJOͱ+BWBͷޓੑ w +BWB͔Β,PUMJOͷίʔυΛݺͼग़ͤΔ w ,PUMJO͔Β+BWBͷίʔυΛݺͼग़ͤΔ w ,PUMJOͱ+BWBͷݴޠ༷ࠩ w PCKFDU
w UPQMFWFMGVODUJPO w EFGBVMUQBSBNFUFS w FUD ,PUMJOͱ+BWB
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
ਐΊํ ୯ମςετॻ͘ ίʔυॻ͘
0CKFDU object KotlinObject { fun hello() : String { return
"Hello Kotlin!" } fun hello2() = "Hello Kotlin!" } ˞γϯάϧτϯͰ͢ ,PUMJOͷ0CKFDU ˞IFMMP ͱIFMMP CZUFDPEFʹ͢Δͱશ͘ಉ͡Ͱ͢
0CKFDU import jp.a2kaido.skfj.KotlinObject as KO class KotlinObjectFromKotlinTest { @Test fun
KotlinObject() { Assert.assertEquals("Hello Kotlin!", KO.hello()) Assert.assertEquals("Hello Kotlin!", KO.hello2()) } } ,PUMJO͔Βݟͨ߹
0CKFDU public class KotlinObjectFromJavaTest { @Test public void KotlinObject() {
Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello()); Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello2()); } } +BWB͔Βݟͨ߹
0CKFDU public class KotlinObjectFromJavaTest { @Test public void KotlinObject() {
Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello()); Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello2()); } } +BWB͔Βݟͨ߹ ˞*/45"/$&ʜ
0CKFDU ,PUMJOͷ0CKFDU object KotlinObject2 { @JvmStatic fun hello() : String
{ return "Hello Kotlin!" } @JvmStatic fun hello2() = "Hello Kotlin!" }
0CKFDU +BWB͔Βݟͨ߹ public class KotlinObjectFromJavaTest { @Test public void KotlinObject()
{ Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello()); Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello2()); } @Test public void KotlinObject2() { Assert.assertEquals("Hello Kotlin!", KotlinObject2.hello()); Assert.assertEquals("Hello Kotlin!", KotlinObject2.hello2()); } } ,PUMJO0CKFDUHFU*OTUBODF IFMMP ͱॻ͖͍ͨ
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
5PQMFWFMGVODUJPO ,PUMJOͷ5PQMFWFMGVODUJPO fun hello() : String { return "Hello Kotlin!"
} ,PUMJO'VODUJPOLU ˞Ϋϥεʹଐ͞ͳ͍ؔ
5PQMFWFMGVODUJPO ,PUMJO͔Βݟͨ߹ class KotlinFunctionFromKotlinTest { @Test fun KotlinFunction() { Assert.assertEquals("Hello
Kotlin!", hello()) } }
5PQMFWFMGVODUJPO +BWB͔Βݟͨ߹ public class KotlinFunctionFromJavaTest { @Test public void KotlinFunction()
{ Assert.assertEquals("Hello Kotlin!", KotlinFunctionKt.hello()); } } ,PUMJO'VODUJPO,Uͱ͍͏Ϋϥε͕Ͱ͖ͯΔ ͦͷΫϥεʹTUBUJDϝιου͕ੜ͑ͯΔ
5PQMFWFMGVODUJPO ,PUMJOͷ5PQMFWFMGVODUJPO fun hello() : String { return "Hello Kotlin!"
} ,PUMJO'VODUJPOLU ,PUMJO'VODUJPO,Uͱ͍͏໊લ͕ؾ࣋ͪѱ͍ͷͰɺ
5PQMFWFMGVODUJPO ,PUMJOͷ5PQMFWFMGVODUJPO @file:JvmName("KotlinFunctionRefine") package jp.a2kaido.skfj.function fun helloRefine() : String {
return "Hello Kotlin!" } ,PUMJO'VODUJPO3FpOFLU ໊લΛ͚ͭΔ
5PQMFWFMGVODUJPO +BWB͔Βݟͨ߹ public class KotlinFunctionFromJavaTest { @Test public void KotlinFunction()
{ Assert.assertEquals("Hello Kotlin!", KotlinFunctionKt.hello()); } @Test public void KotlinObjectRefine() { Assert.assertEquals("Hello Kotlin!", KotlinFunctionRefine.helloRefine()); } } ,Uͷ··ͩͱؾ࣋ͪѱ͍ͷͰΞϊςʔγϣϯͰ ໊લΛ͚ͭͯ͋͛·͠ΐ͏ +BWB͔ΒͰͳ͘ݺͼग़ͤΔʂ
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
&YUFOTJPO ,PUMJOͷ&YUFOTJPO fun String.hello() = "Hello Kotlin!" 4USJOH&YUFOTJPOLU @file:JvmName("String") package
jp.a2kaido.skfj.extension fun String.helloRefine() = "Hello Kotlin!" 4USJOH&YUFOTJPO3FpOFLU
&YUFOTJPO ,PUMJO͔Βݟͨ߹ class StringExtensionFromKotlinTest { @Test fun StringExtension() { Assert.assertEquals("Hello
Kotlin!", "hoge".hello()) } @Test fun StringExtensionRefine() { Assert.assertEquals("Hello Kotlin!", "hoge".helloRefine()) } }
&YUFOTJPO +BWB͔Βݟͨ߹ public class StringExtensionFromJavaTest { @Test public void StringExtension()
{ Assert.assertEquals("Hello Kotlin!", StringExtensionKt.hello("hoge")); } @Test public void StringExtensionRefile() { Assert.assertEquals("Hello Kotlin!", String.helloRefine("hoge")); } } 4USJOH&YUFOTJPO,Uͱ͍͏Ϋϥε͕Ͱ͖ͯΔ ϨγʔόʔΛҾͰड͚औΔ ݺͼग़ͤΔ͚Ͳʜ&YUFOTJPOͷ͝ར༻ܭըతʹ
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
%FGBVMU"SHVNFOU ,PUMJOͷ%FGBVMU"SHVNFOU class KotlinDefaultArgument { fun hello(s : String =
"Kotlin") = "Hello $s!" } class KotlinDefaultArgumentRefine { @JvmOverloads fun hello(s : String = "Kotlin") = "Hello $s!" }
%FGBVMU"SHVNFOU ,PUMJO͔Βݟͨ߹ class KotlinDefaultArgumentFromKotlinTest { @Test fun kotlinDefaultArgument() { val
target = KotlinDefaultArgument() Assert.assertEquals("Hello Kotlin!", target.hello()) Assert.assertEquals("Hello Java!", target.hello("Java")) } @Test fun kotlinDefaultArgumentRefine() { val target = KotlinDefaultArgumentRefine() Assert.assertEquals("Hello Kotlin!", target.hello()) Assert.assertEquals("Hello Java!", target.hello("Java")) } }
%FGBVMU"SHVNFOU +BWB͔Βݟͨ߹ public class KotlinDefaultArgumentFromJavaTest { @Test public void KotlinDefaultArgument()
{ KotlinDefaultArgument target = new KotlinDefaultArgument(); // cannot compile // Assert.assertEquals("Hello Kotlin!", target.hello()); Assert.assertEquals("Hello Java!", target.hello("Java")); } @Test public void KotlinDefaultArgumentRefine() { KotlinDefaultArgumentRefine target = new KotlinDefaultArgumentRefine(); Assert.assertEquals("Hello Kotlin!", target.hello()); Assert.assertEquals("Hello Java!", target.hello("Java")); } } @JvmOverloadsΛ͚ͭͳ͍ͱҾͳ͠ͷݺͼग़͕͠Ͱ͖ͳ͍
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
%FGBVMU*NQMFNFOUBUJPO interface DefaultInterface { fun hello() = "Hello Kotlin!" fun
hello2() : String } ,PUMJOͷ%FGBVMU*NQMFNFOUBUJPO
%FGBVMU*NQMFNFOUBUJPO class DefaultInterfaceKotlinImpl : DefaultInterface { override fun hello2() =
"Hello Kotlin!" } ,PUMJOͰ࣮
%FGBVMU*NQMFNFOUBUJPO public class DefaultInterfaceJavaImpl implements DefaultInterface { @NotNull @Override public
String hello() { // ࣮ඞਢ return DefaultImpls.hello(this); // DefaultImpls͕ੜ͑ͯΔ } @NotNull @Override public String hello2() { return "Hello Kotlin!"; } } +BWBͰ࣮ Βͳ͍ͱແཧήʔɻσϑΥϧτΛແࢹ࣮ͯͦ͠͠͏ɻ
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
w ,PUMJOָ͍͠ʂ w +BWB͔Βݺͼग़͞ΕΔॴগ͠ߟྀͯ͠ ͋͛ͯͶ w 'VMM,PUMJOͳΒ+BWBͷؾ࣋ͪߟ͑ͳͯ͘ ͍͍ ·ͱΊ
w αϯϓϧίʔυ w IUUQTHJUIVCDPNBLBJEPTFF LPUMJOGSPNKBWBQSFTFOUBUJPO ࢿྉ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠