1. ã¯ããã«
çŸä»£ã®ãœãããŠã§ã¢éçºã®çŸå Žã§å¢ãç¶ããŠããèšèªã®äžã€ã«KotlinããããŸãããããªKotlinã«ã€ããŠçŽè§£ããŠãããããšæããŸãã
1.1 Kotlinãšã¯?
Kotlinã¯ã2011幎ã«JetBrains瀟ã«ãã£ãŠéçºãå§ãŸã£ãããã°ã©ãã³ã°èšèªã§ãã圌ã®åºæã®ç念ã¯ããã°ã©ã ã®æ éãæžããããšããããŠã³ãŒãã®ã·ã³ãã«ããšæŽçãããè¡šçŸã«ãããŸãããã®ãããKotlinã¯Nullå®å šãåæšè«ãªã©ã®æ©èœãæã£ãŠããŸãã
Kotlinã¯ãŸããJavaãš100%äºææ§ããããŸããã§ã¯ããªãJavaã䜿çšãããKotlinãæ°ããåŠã¶ã®ã§ãããããããã¯Kotlinã«ã¯ãJavaã«ã¯ãªãç¬ç¹ã®ç¹æ§ãšå©ç¹ãããããã§ãã
1.2 Kotlinã®ç¹åŸŽãšå©ç¹
ããã§ã¯ãKotlinãJavaã«æ¯ã¹ãŠã©ã®ãããªå©ç¹ãæã£ãŠããã®ãèŠãŠã¿ãŸãããããŸãäžã€ç®ã¯ãKotlinã¯Nullå®å šã§ããKotlinã§ã¯ããã©ã«ãã§ã¯å€æ°ã¯Nullã«ãªãããšããããŸãããããã«ãããNull Pointer Exceptionãšããéçºè ã®é ãæ©ãŸãããšã©ãŒãå€§å¹ ã«åæžããããšãã§ããŸãã
ãããŠäºã€ç®ã¯ãKotlinã¯Extensioné¢æ°ã®ååšã§ããããã¯æ¢åã®ã¯ã©ã¹ã«æ°ããæ©èœãè¿œå ããããšãå¯èœã«ããŸãã
äžã€ç®ã«ã¯ãKotlinã¯Javaãšã®çžäºéçšæ§ã確ä¿ããŠããŸããJavaãšåãJVMäžã§çšŒåããJavaã®æ¢åã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãšäžç·ã«äœ¿çšããããšãã§ããŸãã
ãããã®ç¹åŸŽãçµã¿åãããããšã§ãKotlinã¯çãè¡æ°ã§ã³ãŒããæžãäžããããå¹ççã§ã·ã³ãã«ãªã³ãŒããæžãããšãå¯èœã«ãªãã®ã§ãã
2. å¿ èŠãªããŒã«ã®ã€ã³ã¹ããŒã«
Kotlinã§éçºãå§ããããã«ã¯ãããã€ãã®ããŒã«ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã以äžã§ã¯ãããããã®æé ã詳ãã説æããŸãã
2.1 Javaã®ã€ã³ã¹ããŒã«
Kotlinã¯JVM(Java Virtual Machine)äžã§åäœããèšèªã§ãããããåãã«Javaãã€ã³ã¹ããŒã«ããå¿ èŠããããŸããJavaã¯Oracleã®å ¬åŒãµã€ãããç¡åã§ããŠã³ããŒãå¯èœã§ãã
ããŠã³ããŒãããããã€ã³ã¹ããŒã©ã«åŸã£ãŠJavaãã€ã³ã¹ããŒã«ããŸããã€ã³ã¹ããŒã«ãå®äºããããã³ãã³ãããã³ãããã¿ãŒããã«ãéãã”java -version”ãå ¥åããŠãæ£ããã€ã³ã¹ããŒã«ãããããšã確èªããŸãã
2.2 Kotlinã³ã³ãã€ã©ã®ã€ã³ã¹ããŒã«
次ã«Kotlinã³ã³ãã€ã©ãã€ã³ã¹ããŒã«ããŸããããã«ãããKotlinã®ãœãŒã¹ã³ãŒããJavaã®ãã€ãã³ãŒãã«å€æããJVMäžã§å®è¡å¯èœãªåœ¢åŒã«ããããšãã§ããŸããKotlinã³ã³ãã€ã©ã¯ãKotlinã®å ¬åŒãµã€ãããããŠã³ããŒãã§ããŸãã
ããŠã³ããŒãããããKotlinã³ã³ãã€ã©ãOSã«å¿ããŠé©åãªå Žæãžç§»åãããŸãã移åãå®äºããããç°å¢å€æ°PATHã«Kotlinã³ã³ãã€ã©ã®ãã¹ãè¿œå ããŸãã
æåŸã«ã”kotlinc -version”ãšå ¥åããŠãã³ã³ãã€ã©ãæ£ããã€ã³ã¹ããŒã«ãããããšã確èªããŸãã
2.3 IntelliJ IDEAã®ã€ã³ã¹ããŒã«
IntelliJ IDEAã¯ãJavaãKotlinã®éçºã«æé©ãªçµ±åéçºç°å¢(IDE)ã®äžã€ã§ããIntelliJ IDEAã«ã¯ãã³ãŒããšãã£ã¿ããã«ãããŒã«ããããã¬ãªã©ã䟿å©ãªæ©èœãäžã€ã«ãªã£ãããã±ãŒãžãšãªã£ãŠãããããŠã³ããŒãã¯JetBrainsã®å ¬åŒãµã€ãããå¯èœã§ããäžéšæ©èœãå¶éãããŠããŸãããç¡æçã®Community Editionã§ãKotlinã®éçºã¯ååå¯èœã§ãã
ããŠã³ããŒãããããç»é¢ã«åŸã£ãŠã€ã³ã¹ããŒã«ãé²ããŠãããŸããã€ã³ã¹ããŒã«ãå®äºããããIntelliJ IDEAãèµ·åããã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããããšã確èªããŸãã
3. ãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãª
ããã°ã©ã ã®èšèšãšå®è£ ãå¹çããé²ããããã«ããã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã®æŽ»çšã¯å¿ èŠäžå¯æ¬ ã§ããKotlinã§ãå€ãã®äººæ°ãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªãååšããŸããããã§ã¯ãäž»ã«Webã¢ããªã±ãŒã·ã§ã³éçºã§ãã䜿çšãããSpring BootãšKtorã®å°å ¥æ¹æ³ã«ã€ããŠè§£èª¬ããŸãã
3.1 Spring Bootã®å°å ¥
Spring Bootã¯Spring FrameworkãããŒã¹ã«ãããJavaãKotlinã§ã®Webã¢ããªã±ãŒã·ã§ã³éçºã容æã«ãããã¬ãŒã ã¯ãŒã¯ã§ããSpring Bootã䜿çšããããšã§ãèšå®ã®èªååãçµã¿ç«ãŠãç°¡æåããããšãã§ããŸãããã®ã»ãã«ããããŒã¿ããŒã¹ã®æäœãã»ãã¥ãªãã£å¯Ÿçãªã©ãå¿ èŠãªæ©èœãè¿ éãã€å®¹æã«å°å ¥ããããšãå¯èœã§ãã
ãŸãã¯ãSpring Bootãå°å ¥ããããã«Spring InitializrãšããããŒã«ã䜿çšããŸããããã¯ãããžã§ã¯ãã®é圢ãçæããããŒã«ã§ãWebãµã€ãäžã§æäœã§ããŸãããããžã§ã¯ãã®èšèªã«Kotlinããã¬ãŒã ã¯ãŒã¯ã«Spring Bootãéžæãããã®ä»ã®èšå®ãè¡ã£ãåŸããããžã§ã¯ããçæããŸããçæããããããžã§ã¯ããIntelliJ IDEAã§ã€ã³ããŒãããããšã§ãSpring Bootãå°å ¥ãããç°å¢ãæã«å ¥ããŸãã
3.2 Ktorã®å°å ¥
Ktorã¯ãKotlinå°çšã«éçºãããã軜éã§æè»ãªWebã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã§ããKotlinèšèªã®ç¹æ§ã掻ãããäœãã«ãªã£ãŠãããéçºå¹çã®åäžãå質ä¿èšŒããŸãKotlinãšJavaã®äž¡ç«ãªã©ãå€æ°ã®ç¹åŸŽãæã£ãŠããŸãã
Ktorã®å°å ¥ã¯ãIntelliJ IDEAããçŽæ¥æ°èŠãããžã§ã¯ããäœæãããã®éã«Ktorãéžæããããšã§å¯èœã§ããæ°èŠãããžã§ã¯ãäœæãŠã£ã¶ãŒãã«åŸã£ãŠå¿ èŠãªæ å ±ãå ¥åããæåŸã«ãããžã§ã¯ãã®ãã³ãã¬ãŒããšããŠKtorãéžæããŸããããã§ãKtorã®ç°å¢æ§ç¯ãå®äºããŸãã
以äžããKotlinã§Webã¢ããªã±ãŒã·ã§ã³éçºãè¡ãããã®ãã¬ãŒã ã¯ãŒã¯ãSpring BootãšKtorã®å°å ¥æ¹æ³ã§ããéçºãé²ããäžã§ãã©ã¡ãã®ãã¬ãŒã ã¯ãŒã¯ãèªåã®ãããžã§ã¯ãã«é©ããŠããããèŠæ¥µããŠãããŸãããã
4. IntelliJ IDEAã®èšå®
ãããŠãæãéèŠãªéšåã«ãªããŸããããã¯IntelliJ IDEAã®èšå®ã§ãã圹ã«ç«ã€æ©èœããã£ããè©°ãŸã£ããã®åŒ·åãªIDEãæ倧éã«æŽ»çšããããã«ãããã©ã«ãã®èšå®ãã詳现ãªé ç®ã«è³ããŸã§ããã£ãããšèšå®ãè¡ã£ãŠãããŸãããã
4.1 IntelliJ IDEAã®åºæ¬æäœ
IntelliJ IDEAã¯æšæºã®æ§æã ãã§ãéåžžã«åŒ·åã§ããããã®åãæ倧éã«åŒãåºãããã«ã¯ãããã€ãã®åºæ¬æäœããã¹ã¿ãŒããããšãå¿ èŠã§ãã
ãŸãã¯ãããžã§ã¯ããŠã£ã³ããŠã§ãããã®ãŠã£ã³ããŠã¯å·ŠåŽã®ããã«ã«ããããã¡ã€ã«æ§é ã衚瀺ããããã®äž»èŠãªã€ã³ã¿ãŒãã§ãŒã¹ã§ããããã§ç¹å®ã®ãã¡ã€ã«ããã£ã¬ã¯ããªã«ç¬æã«ã¢ã¯ã»ã¹ããããšãã§ããŸãã
ãŸãããšãã£ã¿ãŠã£ã³ããŠã¯ããœãŒã¹ã³ãŒãã®å®éã®èšè¿°ãç·šéãè¡ãå Žæã§ããããã§ã¯ãã·ã³ã¿ãã¯ã¹ãã€ã©ã€ããèªåè£å®ãªã©ã®åŒ·åãªæ©èœãå©çšã§ããŸãã
ãããŠæåŸã«ããã«ããå®è¡ããããã°ãªã©ã®äž»èŠãªæäœãè¡ãããŒã«ããŒã§ãããããã®åºæ¬æäœãèŠããŠãããšãIntelliJ IDEAãæµéºã«æäœããããšãå¯èœã§ãã
4.2 Kotlinãããžã§ã¯ãã®äœæ
ããã§ã¯ãå ·äœçã«Kotlinã®ãããžã§ã¯ããäœæããŠãããŸããããããã§ã¯ãæ°ãããããžã§ã¯ããäœæããããã§Kotlinã䜿çšããæé ã説æããŸãã
ãŸããIntelliJ IDEAãèµ·åãã”Create New Project”ãã¯ãªãã¯ããŸããæ°ãããããžã§ã¯ããŠã£ã³ããŠã衚瀺ãããããå·ŠåŽã®ããã«ã§”Kotlin”ãéžæããŠãã ããããããŠãå³åŽã®ããã«ã§”Kotlin/JVM”ãéžæããŸããããã«ãããJava Virtual Machineäžã§åäœããKotlinã¢ããªã±ãŒã·ã§ã³ãäœæããããšãã§ããŸãã
次ã«ããããžã§ã¯ãåãšä¿åå ã®ãã£ã¬ã¯ããªãæå®ããŸãããããŠãâFinishâãã¿ã³ãã¯ãªãã¯ããã°ãæ°ããKotlinãããžã§ã¯ããäœæãããèªåçã«éããŸããããã§ãKotlinã®ã³ãŒãã£ã³ã°ãå§ããæºåãæŽããŸããã
以äžããIntelliJ IDEAã®åºæ¬èšå®ãšKotlinãããžã§ã¯ãã®äœææ¹æ³ã§ãããããã®èšå®ããã¹ã¿ãŒããã°ãKotlinã®éçºç°å¢ãæŽã£ããšèšããŸãã次ã®ç« ã§ã¯ãKotlinã®åºæ¬çãªææ³ã«ã€ããŠè§£èª¬ããŸãã
5. Kotlinã®åºæ¬çãªææ³
段éãè¿œã£ãŠå®è·µçãªéçºãžãšé²ãã§ããåã«ããŸãã¯Kotlinã®åºæ¬çãªææ³ã«ã€ããŠè§ŠããŠãããŸãããã以äžã®ã»ã¯ã·ã§ã³ã§ã¯ãå€æ°ã®å®£èšãšä»£å ¥ãæŒç®åã®äœ¿çšæ¹æ³ãå¶åŸ¡æã®äœ¿ãæ¹ã«ã€ããŠè©³ããèŠãŠãããŸãã
5.1 å€æ°ã®å®£èšãšä»£å ¥
Kotlinã§ã¯ãå€æ°ã宣èšããããã«ã¯ãvalããŸãã¯ãvarãã䜿çšããŸãããvalãã¯å®æ°ïŒå€ãå€ãããªãå€æ°ïŒãè¡šãããvarãã¯å¯å€æ°ïŒå€ãå€ããå€æ°ïŒãè¡šããŸãã
val name = "John" // å®æ°ã®å®£èš var counter = 0 // å¯å€å€æ°ã®å®£èš
äžèšã®ããã«å®£èšãããšãšãã«å€ãä»£å ¥ããããšãã§ããŸãããŸããå宣èšãå¯èœã§ãããKotlinã¯åæšè«ãããã®ã§çç¥å¯èœã§ãã
val name: String = "John" // åãæå®ããŠå®æ°ãå®£èš var counter: Int = 0 // åãæå®ããŠå¯å€å€æ°ã宣èš
5.2 æŒç®åã®äœ¿çšæ¹æ³
次ã«ãKotlinã§æäŸãããŠããæŒç®åã®äœ¿ãæ¹ã«ã€ããŠèŠãŠãããŸããåºæ¬çãªç®è¡æŒç®åã+ãïŒè¶³ãç®ïŒã ã-ãïŒåŒãç®ïŒãã*ãïŒæãç®ïŒããããŠã/ãïŒããç®ïŒã¯ãä»ã®ããã°ã©ãã³ã°èšèªãšåãããã«äœ¿çšããããšãã§ããŸãã
var num = 10 num = num + 5 // 15 num = num - 3 // 12 num = num * 2 // 24 num = num / 3 // 8
5.3 å¶åŸ¡æã®äœ¿ãæ¹
Kotlinã§ã¯ããifãããwhenãããforãããwhileããªã©ã®ããå©çšãããå¶åŸ¡æãçšããããšãã§ããŸãããifãã¯æ¡ä»¶åå²ã®æšæºçãªåœ¢åŒã§ã以äžã®ãããªåœ¢ã§äœ¿ããŸãã
val score = 85 if (score >= 90) { println("Excellent!") } else if (score >= 80) { println("Good job!") } else { println("Keep trying!") }
ãwhenãã¯ä»ã®èšèªã§ã®ãswitchãã«çžåœããç¹å®ã®å€ã«ããããããããªç¶æ³ãæ±ããŸãã
val number = 3 when (number) { 1 -> println("One") 2 -> println("Two") 3 -> println("Three") else -> println("Unknown") }
ã«ãŒãåŠçã«ã¯ãforãããwhileãã䜿ããŸããããã§ã¯ãforãã®äŸã瀺ããŸãã
for (i in 1..5) { println(i) }
以äžãKotlinã®åºæ¬çãªææ³ã«ã€ããŠã§ããããããã®åºæ¬ãç解ããç©æ¥µçã«ã³ãŒããæžããŠã¿ãŸãããã次ã®ã»ã¯ã·ã§ã³ã§ã¯ãKotlinã§ã®ã¯ã©ã¹ãšãªããžã§ã¯ãã«ã€ããŠèŠãŠãããŸãã
6. Kotlinã§ã®ã¯ã©ã¹ãšãªããžã§ã¯ã
ã¯ã©ã¹ãšãªããžã§ã¯ãã¯Kotlinã§ã¯çµ¶å¯Ÿã«æ¬ ããŠã¯ãªããªãæŠå¿µã§ããã¯ã©ã¹ã¯ããåã®å šãŠã®ãªããžã§ã¯ããæã€å±æ§ãšåäœãå®çŸ©ãããã®ã§ããªããžã§ã¯ãã¯ç¹å®ã®ã¯ã©ã¹ã«å±ããå®äœã瀺ããŸããããã§ã¯å ·äœçãªã¯ã©ã¹ã®å®çŸ©ãã€ã³ã¹ã¿ã³ã¹åæ¹æ³ããããŠã¡ãœããã®äœãæ¹ãšåŒã³åºãæ¹ã«ã€ããŠè§£èª¬ããŸãã
6.1 ã¯ã©ã¹ã®å®çŸ©ãšã€ã³ã¹ã¿ã³ã¹å
ãŸãå§ãã«ãKotlinã§ã®ã¯ã©ã¹ã®å®çŸ©æ¹æ³ã«ã€ããŠèŠãŠã¿ãŸããããã¯ã©ã¹ãå®çŸ©ããããã«ã¯ãclassãããŒã¯ãŒãã䜿ããŸããäŸãã°ã次ã®ã³ãŒãã¯ãAnimalããšããã¯ã©ã¹ãå®çŸ©ããŸãã
class Animal{
}
ã¯ã©ã¹ã¯ã€ã³ã¹ã¿ã³ã¹åãããããšã§ãªããžã§ã¯ããšããŠå©çšã§ããŸããKotlinã§ã¯ãnewãããŒã¯ãŒãã¯äœ¿çšããã«ãã¯ã©ã¹åçŽåŸã«æ¬åŒ§ãã€ããããšã§ã€ã³ã¹ã¿ã³ã¹åããŸãã
val animal = Animal()
ãã®ãanimalãããAnimalãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ïŒãªããžã§ã¯ãïŒãšãªããŸãã
6.2 ã¡ãœããã®å®£èšãšåŒã³åºã
ã¯ã©ã¹ã«ã¯ã¡ãœãããå®çŸ©ããããšãã§ããŸããã¡ãœãããšã¯ã¯ã©ã¹ã«å±ããé¢æ°ã®ããšã§ããªããžã§ã¯ãã®æ¯ãèããè¡šããŸããã¡ãœããã¯ãfunãããŒã¯ãŒãã䜿ã£ãŠå®çŸ©ããŸãã
class Animal{
fun makeSound(){
}
}
äžèšã®äŸã§ã¯ãAnimalãã¯ã©ã¹ã«ãmakeSoundããšããã¡ãœãããå®çŸ©ããŠããŸãããã®ã¡ãœããã¯ããAnimalãã¯ã©ã¹ã®ãªããžã§ã¯ãããçŽæ¥åŒã³åºãããšãã§ããŸãã
val animal = Animal()
animal.makeSound()
ã¡ãœãããåŒã³åºãéã«ã¯ããªããžã§ã¯ãã®åŸã«ããã(.)ã眮ããŠã¡ãœããåãèšè¿°ããŸãããã®ããã«ã¯ã©ã¹ãšãªããžã§ã¯ããã¡ãœããã¯Kotlinãç解ããããã§éèŠã§ãããããã䜿ãããªãããšã§ããŸããŸãªã³ãŒããå¹ççã«äœæããããšãå¯èœãšãªããŸãã
7. å®éã«ã¢ããªãäœã£ãŠã¿ãã
KotlinãåŠã¶äžã§æãéèŠãªããšã¯ãå®éã«äœãããã®ã¢ããªã±ãŒã·ã§ã³ãäœã£ãŠã¿ãããšã§ãããªããªããæ¬çªç°å¢ã§äœ¿çšããããã«ã¯å®éã®åé¡ã解決ããããã«Kotlinã䜿çšããçµéšãå¿ èŠãšãªãããã§ããããã§ã¯ãå ·äœçãªäœæ¥ãèŠãŠãããŸãããã
7.1 ã¢ããªã®ã¢ã€ãã¢ãšèšèš
ã¢ããªãäœãæããŸãã¯ã¢ã€ãã¢ãåºãããšããå§ããŸããã¢ã€ãã¢ãåºãŸã£ããã次ã«èšèšãè¡ããŸããèšèšãšã¯ãã¢ããªãã©ã®ããã«åäœããã©ã®ãããªæ©èœãæã€ã¹ããã詳现ã«æ±ºå®ããå·¥çšã§ããå ·äœçã«ã¯ãå¿ èŠãªããŒã¿ã®åãã¯ã©ã¹ãé¢æ°ãã¢ããªã±ãŒã·ã§ã³ã®ãããŒãªã©ã決å®ããŸãããã®èšèšæ®µéãéèŠã§ãããã§ãã£ãããšãã©ã³ãã³ã°ãè¡ããªããšåŸã®ã³ãŒãã£ã³ã°äœæ¥ã§æéãç¡é§ã«ããå¯èœæ§ããããŸãã
7.2 ã³ãŒãã£ã³ã°ãšãããã°
èšèšãçµãã£ããå®éã®ããã°ã©ãã³ã°ãããªãã¡ã³ãŒãã£ã³ã°ã«åãçµã¿ãŸããKotlinã®åºæ¬çãªææ³ãèŠããŠããã¯ããªã®ã§ããããå ã«ã¢ããªãäœæããŠãããŸãããããã®åŸãåºæ¥äžãã£ãã³ãŒãã«ãã°ãç¡ãã確èªãããããã°ã®äœæ¥ã«ç§»ããŸãããããã°ã¯ã³ãŒãã£ã³ã°ãšäžŠè¡ããŠè¡ãããšããããŸãããã°ãæ©æã«çºèŠãä¿®æ£ããããšã§ãåŸã§å€§ããªåé¡ãèµ·ããã®ãé²ããŸãã
7.3 ãã¹ããšãããã€
ãããã°ãçµãã£ããã次ã«ããã³ããšã³ããããã¯ãšã³ãã®åäœããã§ãã¯ãããã¹ããè¡ããŸãããã¹ãã«ã¯æ§ã ãªçš®é¡ããããŸãããæäœéãåäœãã¹ããšçµåãã¹ãã¯è¡ãããã«ããŸãããããããã®ãã¹ãã¯ã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ã確èªããã®ã«å¿ èŠäžå¯æ¬ ã§ãããã¹ããç¡äºã«å®äºããããæåŸã«ã¢ããªã±ãŒã·ã§ã³ããµãŒããŒã«ãããã€ããŸããKotlinã䜿ã£ãŠéçºããã¢ããªã±ãŒã·ã§ã³ããããã€ãããšãå®éã®ãŠãŒã¶ãŒã䜿ããããã«ãªããŸãããããã€ã®æ¹æ³ã¯ã䜿çšãããã¬ãŒã ã¯ãŒã¯ãç°å¢ã«ãã£ãŠç°ãªããŸãã
8. Kotlinã䜿çšãããããžã§ã¯ãã®äŸãšè§£èª¬
Kotlinã¯ãå€æ§ãªãã©ãããã©ãŒã ã§å©çšãããå€ãã®æå¹ãªæ¡ä»¶ããããä»åã¯ãã®äžãããWebã¢ããªã±ãŒã·ã§ã³ãšAndroidã¢ããªã±ãŒã·ã§ã³ãåãæ±ããããããã®ãããžã§ã¯ãäŸã«ã€ããŠæ·±ã解説ããã
8.1 Webã¢ããªã±ãŒã·ã§ã³ã®äŸ
Kotlinã§äœããã掻çºãªWebã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ãã®äžã€ã«ãKtorãã¬ãŒã ã¯ãŒã¯ã䜿çšããRESTful APIãããããŠãŒã¶ãŒã®æ å ±ã管çããã·ã³ãã«ãªãã®ãããè€éãªããŒã¿ã®äº€æãèªèšŒãã»ãã·ã§ã³ç®¡çãèŠãããã®ãŸã§ãæ§ã ãªããŒãºã«å¯Ÿå¿ã§ããã
以äžã¯KotlinãšKtorã§å®è£ ããRESTful APIãšã³ããã€ã³ãã®äžéšã§ããã ```kotlin fun Application.module() { install(ContentNegotiation) { jackson { enable(SerializationFeature.INDENT_OUTPUT) } } routing { route("/users") { post { val user = call.receive() call.respond(HttpStatusCode.Created, userService.addUser(user)) } get { call.respond(userService.getAllUsers()) } } } } ``` ããã¯ãŠãŒã¶ãŒæ å ±ã管çããAPIãµãŒããŒã®äžéšã§ãHTTP POSTãªã¯ãšã¹ããšGETãªã¯ãšã¹ããåãåãããšãã§ããã
KotlinãšKtorã䜿çšããŠAPIãæ§ç¯ããããšã¯ãã³ãŒãéãå°ãªããèªã¿ãããã³ãŒããæžãããšãã§ããç¹ã«å€§ããªå©ç¹ãããã
8.2 Androidã¢ããªã±ãŒã·ã§ã³ã®äŸ
Googleã¯Kotlinãå ¬åŒã«Androidéçºã®èšèªãšããŠãµããŒãããŠãããå€ãã®Androidã¢ããªã±ãŒã·ã§ã³ãKotlinã§æžãããŠãããäžäŸãšããŠã次ã®ãããªã·ã³ãã«ãªç»é¢é·ç§»ã®ããžãã¯ãèããŠã¿ããã
以äžã®Kotlinã³ãŒãã¯ããã¿ã³ã®ã¯ãªãã¯æã«æ°ããç»é¢(Activity)ã«é·ç§»ããåŠçã§ããã ```kotlin button.setOnClickListener { val intent = Intent(this, SecondActivity::class.java) intent.putExtra("EXTRA_MESSAGE", message) startActivity(intent) } ``` äžèšã®åŠçã«ããããã¿ã³ãã¯ãªãã¯ãããšSecondActivityãšåä»ããããæ°ããç»é¢ã«ç§»åãããããã«ãç»é¢é·ç§»æã«ã¯è¿œå ã®ã¡ãã»ãŒãžãæž¡ãããšãã§ããã
Androidã¢ããªã±ãŒã·ã§ã³ãKotlinã§éçºããããšã®é åã¯ãNullå®å šãªèšèšãæ¡åŒµé¢æ°ãã©ã ãåŒãšãã£ããKotlinç¬èªã®è¡šçŸåããã«ã«æŽ»çšã§ããç¹ã«ãããŸãã
9. Kotlinã§ã®ãã¹ããã©ã¯ãã£ã¹
ããã°ã©ãã³ã°èšèªã«ã¯ãããããç¬èªã®ã³ãŒãã£ã³ã°èŠçŽãæé©ãªå®è£ æ¹æ³ãååšããŸããKotlinãäŸå€ã§ã¯ãããŸãããããã§ã¯ãKotlinã³ãŒããããèªã¿ããããå¹ççã«ããããã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠèª¬æããŸãã
9.1 ã³ãŒãã®èšè¿°ã¹ã¿ã€ã«
äžè²«ããã³ãŒãã¹ã¿ã€ã«ã¯ãã³ãŒãã®å¯èªæ§ãé«ããã¡ã³ããã³ã¹ã容æã«ããŸããKotlinã§ã¯ãåœåèŠåã空çœã®äœ¿çšãã€ã³ãã³ãã®çµ±äžãªã©ãæšæºã®ã³ãŒãã£ã³ã°èŠçŽãæäŸãããŠããŸãã
äŸãã°ãé¢æ°ãããããã£ã¯å°æåã®ãã£ã¡ã«ã±ãŒã¹ã§èšè¿°ããŸãã fun myFunction() {} val myProperty: Int
ãŸããKotlinã§ã¯ãè¡šçŸãç°¡æœã«ãªããããªã³ãŒãã¹ã¿ã€ã«ãæšå¥šãããŠããŸããã€ãŸããç¡é§ãªã³ãŒããæé€ããã·ã³ãã«ã§ã³ã³ãã¯ããªè¡šçŸãç®æãããšãéèŠã§ãã
äŸãã°ãæ¡ä»¶åŒã¯ä»¥äžã®ããã«ç°¡æœã«æžãããšãã§ããŸãã val max = if (a > b) a else b
ããããKotlinç¬èªã®ã³ãŒãã£ã³ã°èŠçŽãèšè¿°ã¹ã¿ã€ã«ãç解ããå®è·µããããšã§ã³ãŒãã®å質ãé«ããããšãã§ããŸãã
9.2 ããã©ãŒãã³ã¹ã®åäž
Kotlinã§ã¯ãããã©ãŒãã³ã¹åäžã®ããã«èæ ®ãã¹ãããã€ãã®èŠçŽ ããããŸãã
ãŸãã¯ãnullå®å šã®ç¹æ§ãæ倧éã«æŽ»çšããŸããããKotlinã¯ãnullå€ãåå ã§èµ·ããåŸããã°ãé²ãããã«nullã蚱容ããªãåãå°å ¥ããŸãããããã«ãããã©ã³ã¿ã€ã ãšã©ãŒãå€§å¹ ã«åæžããããã©ãŒãã³ã¹ãåäžãããããšãå¯èœã§ãã
äŸãã°ã以äžã®ããã«nullã蚱容ããªãåã宣èšãããšããã®å€æ°ã«nullãä»£å ¥ããããšãããšã³ã³ãã€ã«ãšã©ãŒã«ãªããŸãã val nonNullString: String // nullã蚱容ããªã
次ã«ãã€ãã¥ãŒã¿ãã«ãªããŒã¿ãç©æ¥µçã«å©çšããŸããããKotlinã§ã¯ãvalã§å®£èšãããããããã£ã¯å€æŽäžå¯èœã§ããããã«ãããå¯äœçšãé²ããã³ãŒãã®å®å šæ§ãé«ããããšãåºæ¥ãŸãã
äŸãã°ä»¥äžã®ããã«valã§å€æ°ã宣èšãããšãå€ã®å€æŽãåºæ¥ãªããªããŸãã val immutableList = listOf(1, 2, 3) // å€æŽäžå¯èœãªãªã¹ã
æåŸã«ãæé©ãªã³ã¬ã¯ã·ã§ã³ã®éžæãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããŸããKotlinã§ã¯ãªã¹ããã»ãããããããªã©å€çš®å€æ§ãªã³ã¬ã¯ã·ã§ã³ãçšæãããŠããŸãã䜿çšããããŒã¿ã®ç¹æ§ã«ãã£ãŠé©åãªã³ã¬ã¯ã·ã§ã³ãéžã¶ããšããã¡ã¢ãªäœ¿çšéã®åæžãåŠçé床ã®åäžã«ã€ãªãããŸãã
äŸãã°ãèŠçŽ ã®éè€ãèš±ããªãã³ã¬ã¯ã·ã§ã³ãå¿ èŠãªããsetOf()é¢æ°ãå©çšããŸãã val uniqueValues = setOf("a", "b", "c") // éè€ãèš±ããªãã»ãã
ãããã®ãã¹ããã©ã¯ãã£ã¹ãé©çšããããšã§ãKotlinã䜿çšããããã©ãŒãã³ã¹ã®è¯ãã¢ããªã±ãŒã·ã§ã³ã®å®è£ ãå¯èœãšãªããŸãã
10. ãŸãšã: Kotlinãå§ããããã®ã¹ããã
æ¬èšäºã§ã¯ãKotlinã®ç°å¢æ§ç¯ããåºæ¬çãªææ³ããããŠã¢ããªäœæãŸã§ãå ·äœçã«è§£èª¬ããŠããŸãããç°¡åãªãããKotlinãå§ããããã®æé ãšãªãã§ãããã
ãŸãã¯ãå¿ èŠãªããŒã«ã®ã€ã³ã¹ããŒã«ããå§ããŸããJavaãšKotlinã³ã³ãã€ã©ããããŠIntelliJ IDEAãçšæããããšã¯ãKotlinéçºãè¡ãããã§å¿ é ãšãªããŸãã
次ã«ã䜿çšãããã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªãå°å ¥ããŸããããã§ã¯ãSpring BootãšKtorã®äŸãåãäžããŸããããå¿ èŠã«å¿ããŠä»ã®ã©ã€ãã©ãªãæ¢ãããšãå¿ããªãããã«ããŸãããã
ãããŠãIntelliJ IDEAã®èšå®ãšåºæ¬æäœãèŠããKotlinã®ãããžã§ã¯ãäœæã«ææŠããŸããKotlinã®åºæ¬çãªææ³ããã£ãããšç解ããããšã§ãã¹ã ãŒãºã«ããã°ã©ãã³ã°ãé²ããããšãã§ããŸãã
ããã«ãKotlinã§ã®ã¯ã©ã¹ãšãªããžã§ã¯ãã®æ±ããåŠã¶ããšã§ãããå¹ççã«ã³ãŒããèšè¿°ã§ããããã«ãªããŸãã
å®éã«ã¢ããªãäœã£ãŠã¿ãããšã§ããããŸã§åŠãã ããšã確èªããŸãããããŸããå®éã®ãããžã§ã¯ãäŸãéããŠãKotlinã掻çšããéçºã®ãã€ã³ããææ¡ããããšãéèŠã§ãã
æåŸã«ãKotlinã§ã®ãã¹ããã©ã¯ãã£ã¹ãåŠã³ãè¯ãã³ãŒããæžãããã®ã³ããã€ãã¿ãŸããããããããã®ã³ãŒãã¯æå³ãæã¡ãå¹ççãªããã°ã©ã ãäœãããã®éèŠãªèŠçŽ ãšãªããŸãã
Kotlinã¯æ§ã ãªå Žé¢ã§é«ãããã©ãŒãã³ã¹ãçºæ®ããŸããæ¯éãæ¬èšäºãåèã«Kotlinã®äžçãžäžæ©èžã¿åºããŠã¿ãŠãã ããã