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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
500
Other Decks in Programming
See All in Programming
AIだと陥りがちなJakarta EE最新技術への移行時の落とし穴と解決策
tnagao7
0
110
さぁV100、メモリをお食べ・・・
nilpe
0
140
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
270
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
240
RTSPクライアントを自作してみた話
simotin13
0
610
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
140
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
640
Oxcを導入して開発体験が向上した話
yug1224
4
320
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
250
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
690
Oxlintのカスタムルールの現況
syumai
6
1.1k
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.6k
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
460
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
840
It's Worth the Effort
3n
188
29k
Site-Speed That Sticks
csswizardry
13
1.2k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
190
From π to Pie charts
rasagy
0
210
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
170
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
430
Crafting Experiences
bethany
1
180
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 ࢿྉ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠