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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
510
Other Decks in Programming
See All in Programming
AIエージェントで 変わるAndroid開発環境
takahirom
1
180
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
340
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
230
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
130
Contextとはなにか
chiroruxx
1
390
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
9
3.9k
1B+ /day規模のログを管理する技術
broadleaf
0
120
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.7k
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
630
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
970
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
110
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
WCS-LA-2024
lcolladotor
0
670
Odyssey Design
rkendrick25
PRO
2
720
Un-Boring Meetings
codingconduct
0
330
Mobile First: as difficult as doing things right
swwweet
225
10k
For a Future-Friendly Web
brad_frost
183
10k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
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 ࢿྉ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠