1. Kotlinãšã¯äœã
Kotlinãšã¯ãããã°ã©ãã³ã°ã®äžçã§ããèãååã§ãããããã¯äœãªã®ã§ãããããKotlinã¯JetBrains瀟ã«ãã£ãŠéçºãããéçåä»ãã®ããã°ã©ãã³ã°èšèªã§ãããŸãããã®èšèªã¯ãªãŒãã³ãœãŒã¹ã®åœ¢ã§å ¬éãããåºãç¯å²ã®ãã©ãããã©ãŒã ãšããã€ã¹ã«å¯Ÿå¿ããŠããŸããJavaãScalaã®ãããªèšèªãããŒã¹ã«éçºããããããä»ã®JVMããŒã¹ã®èšèªãšäºææ§ããããŸãã
1.1 Kotlinã®æŠèŠ
2011幎ã«åããŠå ¬éãããKotlinã¯ãå€ãã®éçºè ã«ç¬ãéã«å¥œè©ãåããŸããããã®å€§ããªçç±ã¯ãJavaãšã®é«ãäºææ§ãšãããç°¡æœã§èªã¿ãããã³ãŒãã®èšè¿°ãå¯èœã§ãããšããããšã§ãããŸããAndroidã®å ¬åŒéçºèšèªãšããŠãæ¡çšãããŠãããäžçäžã®å€ãã®ããããããŒãKotlinãåŠã³ããã®åãåŒãåºãããã®åªåãéããŠããŸãã
1.2 Kotlinã®ç¹åŸŽããã³å©ç¹
Kotlinã®æ倧ã®ç¹åŸŽã®äžã€ã¯ããã®åŒ·åãªåæšè«ã·ã¹ãã ã§ããããããã«ãããããã°ã©ããŒã¯åãæ¯åæ瀺çã«å®£èšããå¿ èŠãç¡ããã³ãŒããã¹ãããªãšããªããããå®å šã«åã®ééããé²ãããšãã§ããŸããããã«ããã«å®å šæ§ãèšèªã®ç¹åŸŽãšãªã£ãŠãããNullPointerExceptiuonã®ãããªã©ã³ã¿ã€ã ãšã©ãŒã®å¯èœæ§ãæå°éã«æããããšãã§ããŸãã
å ããŠãKotlinã¯ãããå°ãªãã³ãŒãè¡ã§ããå¹ççã«ããã°ã©ã ãæžãããšãå¯èœã«ããè±å¯ãªã©ã€ãã©ãªãšé«åºŠãªé¢æ°ãæäŸããŠããŸãããã®ãããã³ãŒãéãæžããå¯èªæ§ãšä¿å®æ§ãå¢ãããšã§ããã°ã©ãã³ã°ã®çç£æ§ãåäžããŸãã
1.3 ä»ã®ããã°ã©ãã³ã°èšèªãšã®æ¯èŒ
Kotlinã¯ãä»ã®ããã°ã©ãã³ã°èšèªãšæ¯èŒããŠãšãŠãç¹ç°ãªç¹æ§ãæã£ãŠããŸããJavaãšæ¯èŒããå ŽåãKotlinã®å§åçãªç°¡æœæ§ãšçŽææ§ãéç«ã¡ãŸããJavaãé·ãæéããããŠã³ãŒãã£ã³ã°ããã®ã«å¯ŸããKotlinã§ã¯åãããžãã¯ãçãæéã§å®è£ ããããšãã§ããŸãããŸããããå°ãªãã³ãŒãè¡ã§æ©èœãéæãããããKotlinã¯ãã°ãå«ãå¯èœæ§ãå€§å¹ ã«æžãããŸãã
ãŸããPythonãJavaScriptãšãã£ãåçåä»ãèšèªãšæ¯èŒãããšãKotlinã¯åã®ééããé²ã匷åãªåã·ã¹ãã ããããã³ã³ãã€ã«ã¿ã€ã ã«ãšã©ãŒãæ€åºã§ããå©ç¹ããããŸãããã®ãããªæ©èœã¯ã倧èŠæš¡ãªãããžã§ã¯ãã«ãããŠã¯æ Œæ®µã®å®å®æ§ãšå¹çæ§ãæäŸãããããéèŠãªèŠçŽ ãšãªããŸãã
2. Kotlinã®åºæ¬
Kotlinããã°ã©ãã³ã°èšèªãåŠã¶ã«åœãããç解ããŠããã¹ãåºç€ç¥èã«ã¯å€§ããåããŠãåã·ã¹ãã ãå¶åŸ¡æ§é ãããŒã«æŒç®ãšæ¯èŒã®ïŒã€ããããŸãã
2.1 åã·ã¹ãã
ãŸãæåã«Kotlinã®åã·ã¹ãã ã«ã€ããŠåŠã³ãŸãããã
Kotlinã¯éçåä»ãèšèªã§ãããåå€æ°ãæã€ããŒã¿ã®ãåããæ瀺çã«å®£èšããããšãåºæ¬ãšãªã£ãŠããŸããããã«ãããã³ã³ãã€ã«æã«åã®äžäžèŽã«ãããšã©ãŒãæ©æçºèŠããããšãå¯èœãšãªããŸãã
äŸïŒæŽæ°å Int val i: Int = 10 äŸïŒæååå String val s: String = "Hello, Kotlin"
ãŸããKotlinã¯Nullå®å šãªèšèªèšèšããªãããŠãããå€æ°ã«Nullableãªåã蚱容ããå Žåã«ã¯ãåã®åŸã«?èšå·ãä»äžã§ããŸããããã«ããNullåç §ã§ã®å®è¡æãšã©ãŒãé²ãããšãã§ããŸãã
äŸïŒ Nullableãªæååå val s: String? = null
2.2 å¶åŸ¡æ§é
次ã«ãKotlinã®å¶åŸ¡æ§é ã«ã€ããŠåŠãã§ãããŸãããã
Kotlinã®å¶åŸ¡æ§é ã¯ä»ã®ããã°ã©ãã³ã°èšèªãšå€§äœäŒŒãŠãããif, when, for, whileãªã©ãçšæãããŠããŸãã
ifã¯æ¡ä»¶åå²ãè¡šçŸããŸããéåžžã®ãããã¯ã¹ã¿ã€ã«ã ãã§ãªããåŒãšããŠãå©çšã§ããŸãã
äŸïŒ ifåŒ val max = if(a > b) a else b
whenã¯switchã«äŒŒãæ©èœãæ ã£ãŠããŸãããåœç¶ã®ããã«åŒãšããŠã®å©çšãå¯èœã§ãããããã³ã°æ¡ä»¶ã«ã¯å€ã ãã§ãªããç¯å²æå®ãåæå®ãå¯èœã§ãã
äŸïŒ whenåŒ when(x) { in 1..10 -> println("x is in the range") is String -> println("x is String") else -> println("x is neither in the range nor String") }
2.3 ããŒã«æŒç®ãšæ¯èŒ
æåŸã«ãKotlinã§ã®ããŒã«æŒç®ãšæ¯èŒã«ã€ããŠèª¬æããŸãã
Kotlinã§ã¯ãããŒã«æŒç®åãšã㊠â&&â (and) ã â||â (or) ã â!â (not) ã䜿çšã§ããŸãã
äŸïŒ ããŒã«æŒç® val result = (a > b) && (c <= d)
æ¯èŒã®ããã®åçš®æŒç®åãçšæãããŠãããâ>âãâ<âãâ>=âãâ<=âãâ==âãâ!=âãªã©ã䜿çšã§ããŸãã
äŸïŒ æ¯èŒæŒç® val result = a == b
ãããã®åºæ¬çãªæŠå¿µãç解ããããšã§ãããæ·±ãã¬ãã«ã®Kotlinã®åŠç¿ãé²ããããŸãã
3. Kotlinãã¯ãããåã«
Kotlinãç¬åŠããåã«ãæºåãã¹ãããšãããã€ããããŸãããŸãã¯éçºç°å¢ã®æ§ç¯ããå§ããŸãããã
3.1 å¿ èŠãªéçºç°å¢
Kotlinã®éçºç°å¢ã®æ§ç¯ã¯æ¯èŒçç°¡åã§ãäž»ã«å¿ èŠãªãã®ã¯ãJavaéçºãããïŒJDKïŒãšKotlinãæ±ããçµ±åéçºç°å¢ïŒIDEïŒã§ãã
ãŸããJavaéçºãããïŒJDKïŒãããŠã³ããŒããã€ã³ã¹ããŒã«ããŸããããã¯Javaã§éçºãããããã«å¿ èŠãªãœãããŠã§ã¢ã§ãKotlinãJavaãšåãJVMäžã§åäœããããã«å¿ èŠãšãªããŸããå ¬åŒãµã€ãããææ°çãããŠã³ããŒãããŸãããã
次ã«ãKotlinããµããŒãããçµ±åéçºç°å¢ïŒIDEïŒãå¿ èŠã«ãªããŸããå€ãã®Kotlinéçºè ã¯ãIntelliJ IDEAã䜿çšããŸãããã®IDEã¯ãJetBrains瀟ãéçºãã匷åãªæ©èœãæã€éçºããŒã«ã§ãKotlinãJetBrains瀟ãéçºããèšèªãªã®ã§ãæé«ã®äºææ§ãšæ©èœãæåŸ ã§ããŸãããŸããEclipseãAndroid Studioã§ãKotlinãæ±ãããšãã§ããŸãã
3.2 åºæ¬çãªããã°ã©ãã³ã°ã¹ãã«
KotlinãåŠã¶åã«ãåºæ¬çãªããã°ã©ãã³ã°ã¹ãã«ããããšè¯ãã§ããããç¹ã«ãå€æ°ãå¶åŸ¡æ§é ïŒifæãforæãªã©ïŒãé¢æ°ãã¯ã©ã¹ããªããžã§ã¯ãã®æŠå¿µãªã©ã¯ç解ããŠããããšãæãŸããã§ãã
ãããã®æŠå¿µã¯ãä»ã®ããã°ã©ãã³ã°èšèªãšå ±éã®ãã®ã§ãããKotlinã®åŠç¿ãåæ»åããŸãããããããã§ã«ç解ããŠãããªããKotlinã¯åŸæ¥ã®Javaãšæ¯ã¹ãŠåŠç¿ããããã®ã³ãŒããå€§å¹ ã«åæžããããå¹æçã§æŽç·Žãããæ§æãæäŸãããããéåžžã«è¿ éã«åŠç¿ããããšãå¯èœã§ãã
ããã§ãªãå Žåã§ãå¿é ã¯äžèŠã§ããå è¿°ã®åºæ¬æŠå¿µã¯éœåºŠåŠç¿ããŠããã°è¯ãã®ã§ãKotlinãåããŠã®ããã°ã©ãã³ã°èšèªã§ãã£ãŠã倧äžå€«ã§ããKotlinã¯ãçŽæçãªèšèªèšèšãšäžå¯§ãªå ¬åŒããã¥ã¡ã³ããŒã·ã§ã³ã«ãããåå¿è ãåŠã³ãããèšèªã§ãããšãèšããŸãã
4. Kotlinã®å匷æ³
Kotlinã®åŠç¿ã«ããããå¹æçãªåŠç¿æ³ãšåèã«ãªãè³æºããããŠå®è·µçãªåŠç¿æ³ã«ã€ããŠè§£èª¬ããŸããããããç解ãé©çšããããšã§ãå¹çããKotlinã®ã¹ãã«ã身ã«ã€ããããšãã§ããŸãã
4.1 ç¬åŠã®ããã®ã¹ããããã€ã¹ãããã¬ã€ã
ãŸããKotlinã®åŠç¿ã«ã¯ã¹ããããã€ã¹ãããã®ã¢ãããŒããéèŠã§ããäžæ©äžæ©ãåºç€ããå¿çšãžãšé²ãã§ããããšã§ããã£ãããšç解ãæ·±ããªããåŠç¿ãé²ããããšãã§ããŸãã
åºç€ã§ã¯ãããŒã¿åãå¶åŸ¡ãããŒãé¢æ°ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã«é¢ããåºæ¬çãªç¥èãåŠã³ãŸãããããã®æŠå¿µã«æ £ããããšã§ãããè€éãªã³ãŒããç解ããåå°ãã§ããŸãã
åºç€ãåºããåŸã¯ãKotlinãåŸæãšããé åã«ææŠããŸããäŸãã°ãéåæåŠçãããŒã¿ããŒã¹æäœããããã¯ãŒã¯éä¿¡ãªã©ã§ããããããé åãåŠã¶ããšã§ãKotlinã®ãã¯ãŒãæ倧éã«çºæ®ããããšãå¯èœã«ãªããŸãã
4.2 åèã«ãªãè³æº
Kotlinã®ç¬åŠã«ã¯ãé«è³ªãªåèè³æºãæ°å€ãååšããŸããå ¬åŒããã¥ã¡ã³ãã¯å¿ èªã®è³æã§ãããæãä¿¡é Œã§ããæ å ±æºã§ãã
ãŸãããªã³ã©ã€ã³äžã®ãã¥ãŒããªã¢ã«ãµã€ããéçºè ã³ãã¥ããã£ãæçšã§ããç¹ã«ã³ãã¥ããã£ã§ã¯ãèªåã§è§£æ±ºã§ããªãåé¡ã«å¯Ÿãããã«ããæ±ããããšãã§ããä»ã®éçºè ããã®ã¢ããã€ã¹ãåŸãããšãã§ããŸãã
æžç±ããŸããäœç³»çã«åŠã¶ããã®è¯ãè³æºãšèšããŸããäžè¬çãªããã°ã©ãã³ã°æžç±ã ãã§ãªããKotlinç¹æã®å 容ããŸãšããæžç±ãå€æ°åºçãããŠããŸãã
4.3 å®è·µçãªåŠç¿æ³
çè«åŠç¿ã ãã§ã¯ãªããå®è·µçãªåŠç¿æ³ãçšããããšã§ãããã«ç解ãæ·±ããããšãå¯èœã§ãã
äžã€ç®ã¯ãµã³ãã«ã³ãŒãã®è§£æã§ãããœãŒã¹ã³ãŒããèªã¿è§£ãããšã§ãçè«ã ãã§ã¯åŸãããªãå®è·µçãªç¥èãåŸãããšãã§ããŸãã
äºã€ç®ã¯ãããžã§ã¯ãã®åœ¢ã§åŠç¿ãé²ããæ¹æ³ã§ããèªåã§èãããããžã§ã¯ããå®éã«äœæããŠã¿ãããšã§ãåé¡è§£æ±ºã®ã¹ãã«ã磚ãããšãã§ããŸãããããŠãããã¯èªä¿¡ã«ã€ãªãããŸãã
以äžã®æ¹æ³ãçµã¿åãããããšã§ãå¹ççãã€å¹æçãªåŠç¿ãå¯èœã«ãªããŸãã
5. Kotlinã§ã®ãããžã§ã¯ãå®è·µ
ããã§ã¯ãKotlinã§ã®ãããžã§ã¯ãå®è·µã«ã€ããŠè§£èª¬ããŸããããã°ã©ãã³ã°å šè¬ã«èšããããšã§ãããçŽæ¥æãåãããŠã³ãŒããæžãããšã«ãããç解ãæ·±ãŸããŸãããããžã§ã¯ããéããŠãKotlinã®ç¥èãšçµéšãæ¯ãè¿ãã匷åããŠãããŸãããã
5.1 å°èŠæš¡ãããžã§ã¯ãã®äŸ
ãŸãã¯ãå°èŠæš¡ãªãããžã§ã¯ãããå§ããŠã¿ãããšããå§ãããŸããäŸãã°ãç°¡æãªã¯ã€ãºã¢ããªå¶äœãææŠããŠã¿ãŸãããããã®ãããžã§ã¯ãã§ã¯ããŠãŒã¶ãŒãã¯ã€ãºã«è§£çãããã®çµæã衚瀺ãããšããã·ã³ãã«ãªæ©èœãæã€ã¢ããªãäœæããŸãã
æåã¯åºæ¬çãªå ¥åãšåºåãè¡ãæ©èœããã¹ã¿ãŒãããŸãã次ã«ãã¯ã€ãºãåºé¡ãããŠãŒã¶ãŒã®å ¥åãåãä»ããæ©èœãè¿œå ããŸããæåŸã«ã解çããã§ãã¯ããŠçµæãåºåããæ£èª€ã«å¿ããŠã¡ãã»ãŒãžã衚瀺ããæ©èœãå®è£ ããŸãããã®äžé£ã®æµããéããŠãKotlinã®åºæ¬çãªæ§æãåŠã³ãã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯æ¹æ³ãç¿åŸããããšãã§ããŸãã
5.2 ãããžã§ã¯ãã§ææŠããã¹ã課é¡
ãããããã®ç°¡æã¯ã€ãºã¢ããªã®å¶äœã ãã§ã¯ãªãããããªãã¹ãã«ã¢ããã®ããã«ããŸããŸãªèª²é¡ã«åãçµãããšãå¿ èŠã§ãã以äžã«ãKotlinã®åŠç¿ã«å¹æçãªããã€ãã®èª²é¡ã瀺ããŸãã
ãŸãäžã€ç®ã¯ãããŒã¿ä¿åæ©èœã®å®è£ ã§ãããã®æ©èœãè¿œå ããããšã§ããã¡ã€ã«æäœãããŒã¿ããŒã¹æäœãªã©ã®è€éãªæè¡ãåŠã¶ããšãã§ããŸãããŠãŒã¶ãŒã®ã¹ã³ã¢ã解çå±¥æŽãä¿åãã次åèµ·åæã«ããããèªã¿èŸŒãæ©èœãäœããšè¯ãã§ãããã
äºã€ç®ã¯ãè€æ°ã®ç»é¢é·ç§»ãæã€ã¢ããªã±ãŒã·ã§ã³ã®äœæã§ããäŸãã°ãã¯ã€ãºã®è§£èª¬ã衚瀺ããç»é¢ãããŠãŒã¶ãŒã®æ瞟ã衚瀺ããç»é¢ãªã©ãè€æ°ã®ç»é¢ããæ§æãããã¢ããªã±ãŒã·ã§ã³ãäœæããããšã§ãç»é¢é·ç§»ã®æ¹æ³ãåŠã¶ããšãã§ããŸãã
æåŸã«ãå€éšAPIã®å©çšãæšå¥šããŸããããã«ããããããã¯ãŒã¯éä¿¡ãJSONã®ããŒã¹ãã©ã€ãã©ãªã®äœ¿çšæ¹æ³ãªã©ãåŠã¶ããšãã§ããŸããäŸãã°ããªãŒãã³APIãçšããŠãæ°ããã¯ã€ãºãããŠã³ããŒãããæ©èœãè¿œå ããããšãèããããŸãã
以äžã®ãããªèª²é¡ã¯ãKotlinã®ããŸããŸãªæ©èœãæè¡ãåŠã³ãç解ãæ·±ããããã®è¯ãçµéšãšãªããŸããåã®éãææŠããŠã¿ãŸãããïŒ
6. Kotlinã®å¿çš
ããããã¯Kotlinã®æŽãªãäžçã楜ããããã«ãæ¥åžžçãªããã°ã©ãã³ã°ã¿ã¹ã¯ã«Kotlinãã©ã®ããã«å¿çšã§ããããåŠãã§ãããŸããããå ·äœçã«ã¯ãããŒã¿æäœãšéèšããã¡ã€ã«æäœããããŠããŒã¿ããŒã¹æäœã«ã€ããŠè§£èª¬ããŸãã
6.1 ããŒã¿æäœãšéèš
Kotlinã®å€§ããªç¹åŸŽã®äžã€ã«ã䟿å©ãªã³ã¬ã¯ã·ã§ã³æäœé¢æ°ãæäŸãããŠããç¹ããããŸãããããã掻çšããããšã§ãããŒã¿æäœãéèšãéåžžã«å®¹æã«ãªããŸãã
äŸãã°ããªã¹ãã®å šãŠã®èŠçŽ ã«å¯ŸããŠäœããã®åŠçããããå Žåãããªã¹ãããç¹å®ã®æ¡ä»¶ãæºããèŠçŽ ããã£ã«ã¿ãªã³ã°ãããæã«mapé¢æ°ãfilteré¢æ°ã䜿çšããããšãã§ããŸãã
val numbers = listOf(1, 2, 3, 4, 5)
val doubled = numbers.map { it * 2 }
val even = numbers.filter { it % 2 == 0 }
äžèšã®ã³ãŒãã§ã¯ããŸãã¯å ã®æ°å€ãªã¹ãã2åã«ããæ°ãããªã¹ããäœãã次ã«å ã®ãªã¹ãããå¶æ°ã ããåãåºãããªã¹ããäœã£ãŠããŸãã
6.2 ãã¡ã€ã«æäœ
次ã«ããã¡ã€ã«æäœã«ã€ããŠèŠãŠãããŸããããKotlinã§ã¯Javaãšåæ§ã«ããã¡ã€ã«ã®èªã¿æžããè¡ãããã®ã¯ã©ã¹ãæäŸãããŠããŸãããããã«å ããŠç¬èªã®æ©èœãçšæãããŠããŸãã
äŸãã°ããã¡ã€ã«ã®å šãŠã®å 容ãäžåºŠã«èªã¿èŸŒãã«ã¯ãreadTexté¢æ°ã䜿çšããŸããæžã蟌ã¿ãåæ§ã§ãwriteTexté¢æ°ã䜿çšããŸãã
val text = File("example.txt").readText()
File("example.txt").writeText("Hello, Kotlin!")
äžèšã®ã³ãŒãã§ãã¡ã€ã«ããããã¹ããèªã¿èŸŒã¿ãæ°ããããã¹ãããã¡ã€ã«ã«æžã蟌ã¿ãŸãã
6.3 ããŒã¿ããŒã¹æäœ
æåŸã«ãããŒã¿ããŒã¹æäœã«ã€ããŠèª¬æããŸããéåžžãããŒã¿ããŒã¹æäœãè¡ãå Žåã¯å°éã®ã©ã€ãã©ãªãå©çšããŸãããããã§ã¯Javaã®æšæºã©ã€ãã©ãªã§ããJDBC(Java Database Connectivity)ã䜿çšããç°¡åãªãµã³ãã«ã瀺ããŸãã
val url = "jdbc:h2:~/test"
val user = "sa"
val password = ""
val sql = "SELECT * FROM CUSTOMERS"
val connection = DriverManager.getConnection(url, user, password)
val statement = connection.createStatement()
val resultSet = statement.executeQuery(sql)
while (resultSet.next()) {
println("${resultSet.getInt("ID")} ${resultSet.getString("NAME")}")
}
connection.close()
äžèšã®ã³ãŒãã¯H2ããŒã¿ããŒã¹ã«æ¥ç¶ããCUSTOMERSããŒãã«ããå šãŠã®ããŒã¿ãåãåºããåã¬ã³ãŒãã®IDãšNAMEãåºåããŠããŸãã
ãããã®åºæ¬æäœããã¹ã¿ãŒããã°ãKotlinã®äžçã¯ããã«åºãããŸãã次ã®ç« ã§ã¯ããšã©ãŒãã³ããªã³ã°ãšãããã°ã«ã€ããŠèŠãŠãããŸãããã
7. Kotlinã§ã®ãšã©ãŒãšãããã°
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãKotlinã®ããã°ã©ã ãäœæããäžã§ãã³ãã³ééãããšã©ãŒãšãã®è§£æ±ºæ³ã«ã€ããŠè§£èª¬ããŸãããšã©ãŒã¯ããã°ã©ãã³ã°åŠç¿ã®éçšã«ãããŠé¿ããããªã宿åœã§ããããŸãéã«ãšã©ãŒã«ééã察åŠããããšã§åããŠç解ãæ·±ãŸãããšããããŸããããã«ã¯ãããã°æ¹æ³ã«ã€ããŠã觊ããŠãããŸãã
7.1 äžè¬çãªãšã©ãŒãšãã®å¯ŸåŠæ³
Kotlinã§ããééãããšã©ãŒãšããŠã¯ãNullåç §ãšã©ãŒãåã®äžäžèŽãšã©ãŒãæ§æãšã©ãŒãªã©ããããŸãã
Nullåç §ãšã©ãŒã¯ãå€ãNullã®å€æ°ãåç §ããããšããå Žåã«çºçããŸãããã®ãšã©ãŒã¯ããå€æ°ãåæåãããŠããªããããé¢æ°ãã¡ãœããããã®æ»ãå€ãNullã§ããããªã©ãåå ã§èµ·ãããŸãã察åŠæ¹æ³ãšããŠã¯ãNull蚱容åãçšããŠNullã蚱容ããããNullãã§ãã¯ãè¡ã£ãŠããåç §ãããªã©ãèããããŸãã
åã®äžäžèŽãšã©ãŒã¯ãããåã®å€ãå¥ã®åãšããŠæ±ãããšããå Žåã«çºçããŸããåã®ãã£ã¹ããšã©ãŒãããã«è©²åœããŸããããã¯ãåæšè«ãæ©èœããããªãå Žåãåãã£ã¹ããå¿ èŠãªå Žåã«èµ·ããããããšã©ãŒã§ãã察åŠæ¹æ³ãšããŠã¯ãé©åãªåãã£ã¹ããè¡ãããåæšè«ãå©ããããã«ã³ãŒãã®æŽçãè¡ããŸãã
æ§æãšã©ãŒã¯ãèšèªã®ææ³ã«é©åããªãã³ãŒããæžããå Žåã«çºçããŸããæ¬åŒ§ãç¢å°çã®èšå·ã®äœ¿ãæ¹ãééã£ãŠãããå¿ èŠãªèŠçŽ ãäžè¶³ããŠãããçãåå ã§èµ·ãããŸãã察åŠæ¹æ³ãšããŠã¯ãIDEã®ãšã©ãŒã¡ãã»ãŒãžãèŠãŠãé©åãªèšå·ãçšãããå¿ èŠãªèŠçŽ ãè£ããªã©ãèããããŸãã
7.2 ãããã°ã®åºæ¬
ãããã°ãšã¯ããã°ã©ã ã®èª€ããæãåºããŠä¿®æ£ããäœæ¥ã®ããšãæããŸããKotlinã®éçºã§ã¯ãIDEã®ãããã°æ©èœããã°åºåãªã©ããããã°æ段ãšããŠçšããããŸãã
IDEã®ãããã°æ©èœãçšãããšãã³ãŒãã®ä»»æã®è¡ã«ãã¬ãŒã¯ãã€ã³ããèšå®ã§ãããã®è¡ã§ããã°ã©ã ã®å®è¡ãäžæåæ¢ã§ããŸããäžæåæ¢ããç¶æ ã§ã¯ããã®æç¹ã§ã®å€æ°ã®å€ã確èªããããäžè¡ãã€é²ããŠå®è¡ã確èªããã¹ãããå®è¡ãå¯èœã§ãã
ãŸãããã°åºåããããã°ã«æå¹ãªæ段ã§ããprintæãprintlnæã䜿çšããŠãå€æ°ã®å€ãåŠçã®é²è¡ç¶æ³ãåºåããããšã§ãã³ãŒãã®åããç解ãããããªããŸãããã ããäžèŠã«ãªã£ããã°åºåã¯åé€ãããªã©ãã¡ã³ããã³ã¹æ§ãæããªãããã«æ°ãã€ããå¿ èŠããããŸãã
ãããã°ã¯èŸãäœæ¥ã«æãããããããŸããããããèªäœãããã°ã©ãã³ã°åŠç¿ã®äžéšã§ããããããã°äœæ¥ãéããŠåããŠæ¬ç©ã®ã¹ãã«ã身ã«ã€ããšãèšããŸãã
8. KotlinãšAndroidéçº
ããã°ã©ãã³ã°èšèªãšããŠã®Kotlinã®é åãšå¢ãã¯ããã®å®è³ªçãªå ¬åŒã¹ããŒã¿ã¹ã«ãã£ãŠAndroidéçºã倧ããåžå·»ãããŠããŸãããããŠãä»æ¥ã®å€ãã®Androidéçºè ã¯ãJavaããKotlinãžãšç§»è¡ãããã®æ©æµãåããŠããŸããããŠãKotlinãAndroidéçºã«ã©ã®ããã«åœ¹ç«ã£ãŠããã®ãããããŠãKotlinãçšããŠAndroidéçºãè¡ãããã«ã¯äœãå¿ èŠãªã®ãã«ã€ããŠèª¬æããŸãã
8.1 Androidéçºã§ã®Kotlinã®å©çš
Androidéçºã«ãããKotlinã®å€§ããªç¹åŸŽçãªå©ç¹ã¯ãã³ãŒãéã®åæžãšå¯èªæ§ã®åäžã§ãããã«ãã€ã³ã¿äŸå€ã«å¯ŸããKotlinã®æ±ãã®åªãããµããŒãã¯ãéçºè ãèŽåœçãªãã¹ãç¯ãå¯èœæ§ãå€§å¹ ã«æžãããŸãããŸããKotlinãæã€æšè«åãšã©ã ãåŒã«ããã°ãèšè¿°ããã³ãŒãã®éãå€§å¹ ã«æžããã€ã€ãããã®æž æœæãšå¯èªæ§ãç¶æããããšãã§ããŸãã
ããã«ãæ¡åŒµé¢æ°ã䜿çšããããšã§ãæ¢åã®ã¯ã©ã¹ã«æ°ããªæ©èœãè¿œå ããããšãªãããã®ã¯ã©ã¹ã®åäœãã«ã¹ã¿ãã€ãºããããšãå¯èœã§ããããã«ãããããã·ã³ãã«ã§çŽæçãªã³ãŒããæžãããšãå¯èœã«ãªããŸãã
8.2 Androidéçºã®ããã®Kotlinç¹æã®ç¥è
Androidéçºãè¡ãäžã§ãKotlinã掻çšããããã«ã¯ããã€ãã®éèŠãªç¹ãç解ãã念é ã«çœ®ããŠããå¿ èŠããããŸãããããã®äžã€ãã³ã«ãŒãã³ã§ããã³ã«ãŒãã³ã¯éåæã¿ã¹ã¯ã管çããç°¡åã«æžãããšãã§ãã匷åãªæ©èœã§ãããé·æéå®è¡ãããæäœãè¡ãéãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶æããããã®éµãšãªããŸãã
ãŸããAndroidéçºãé²ããäžã§ãKotlin Android ExtensionsãData Bindingãšãã£ãããŒã«ãžã®ç解ãéèŠãšãªããŸãããããã®ããŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³å ã®ãã¥ãŒãããŒã¿ãå¹ççã«ç®¡çããããã®æ段ãæäŸããŸãã
ãããã®ç¥èãæããããšã§ãKotlinãšAndroidã®çžä¹å¹æãæ倧éã«åŒãåºãããšãã§ããåªããAndroidã¢ããªã±ãŒã·ã§ã³ãçã¿åºãããšãå¯èœãšãªããŸãã
9. Kotlinã®æŽ»çšäºäŸ
Kotlinã¯çŸä»£ã®éçºè ã«ãšã£ãŠæçšãªããŒã«ã§ãããæ°å€ãã®å€§èŠæš¡ãããžã§ã¯ãã§ãã®äŸ¡å€ã蚌æãããŠããŸããæ¬ç« ã§ã¯ããã®æŽ»çšäŸã倧èŠæš¡ãããžã§ã¯ããäžå¿ã«çŽ¹ä»ããäžéšã®ãããžã§ã¯ãã®è£è©±ãæåç§è©±ãå ±æããŸãã
9.1 倧èŠæš¡ãããžã§ã¯ãã§ã®æŽ»çšäŸ
Uberã¯äžçäžã§åºãç¥ãããŠãããªãŒãã·ã§ã¢ãµãŒãã¹ã§ããããã®äžéšã¯Kotlinã§æžãããŠããŸããç¹ã«ããããã¯ãŒãã³ã°ã¬ã€ã€ã®äžéšãKotlinã§æ§ç¯ãããŠããããã®çµæãããå°ãªããšã©ãŒããã°ãçºçããŠãããšUberã¯å ±åããŠããŸãã
ãŸããGradleãKotlinãå°å ¥ããæåãªäŸã®äžã€ã§ãããã«ãèªååããŒã«ã§ããGradleã¯ã2016幎ããKotlin DSLããµããŒããå§ããé«ãæè»æ§ãšåŒ·åãªéçåä»ããæäŸããŸãã
PinterestããŸããAndroidã¢ããªã±ãŒã·ã§ã³ã®äžéšãKotlinã§äœãæ¿ããŠããŸããããã«ãããã³ãŒãããŒã¹ãå€§å¹ ã«ç¶ºéºã«ãªãããã°ã®æ°ãæžå°ããŸããã
9.2 éçºã®è£è©±ãšæåç§è©±
Uberã§ã¯ãå°å ¥åœåããKotlinã¯ã³ãŒãã®ã»ãã¥ãªãã£ãšå質ãåäžãããããšãã§ããŸããKotlinã®éçåä»ããšnullå®å šç¹æ§ã«ãããã©ã³ã¿ã€ã ãšã©ãŒãNullPointerãšã©ãŒãå€§å¹ ã«åæžãããŸããã
äžæ¹ãGradleãšPinterestã§ã¯ãKotlinã®ç°¡æœæ§ãšã·ã³ã¿ãã¯ã¹ã®æçããéçºè ã®çç£æ§ãé«ããŸãããKotlinã®çŽæçãªã·ã³ã¿ãã¯ã¹ã«ãããæ°ããéçºè ã«å¯Ÿããã³ãŒãã®ç解ã容æã«ãªããã³ãŒãããŒã¹ã®ä¿å®ã容æã«ãªããŸããã
ãããã®äºäŸãããåããããã«ãKotlinã¯å€§èŠæš¡ãããžã§ã¯ãã«ãããŠããã®äŸ¡å€ã蚌æããŠããŸããéçºè ã®çç£æ§ãåäžãããœãããŠã§ã¢ã®å質ãåäžããã匷åãªããŒã«ã§ããããããããããå€ãã®éçºè ã«åºãå©çšãããããšã§ãããã
10. ãŸãšã
ãã®èšäºã§ã¯ãKotlinãç¬åŠã§åŠã¶æ¹æ³ã«ã€ããŠãæ¡å ããŸãããããŒãšãªãã®ã¯ãäžæ©ãã€é²ã¿ãªããéäžçµéãæ¯ãè¿ãããã®éœåºŠæ¬¡ã«é²ãã¹ãæ¹åæ§ãèŠæ¥µããããšã§ãããŸããå®éã®ãããžã§ã¯ããäœæããŠæãåããããšã§ãããæ·±ãç解ãšå®çšçãªã¹ãã«ã身ã«ã€ããŸãã
10.1 ç¬åŠã®æ¯ãè¿ããšæ¬¡ã®ã¹ããã
å§ãã«ç解ããKotlinã®åºæ¬çãªæŠå¿µãããå ·äœçãªããã°ã©ã ã®äœæããã£ã¬ã³ãžã³ã°ãªèª²é¡ãžã®åãçµã¿ãŸã§ãå®è³ªçãªã¹ãã«ã®ç²åŸãç®æãç¬åŠã®æ ã¯åžžã«ææŠã§ãããããããã®éçšã§çããåé¡è§£æ±ºèœåãç¬ç«ããæèåã¯èšãç¥ããŸããã
ããã§ç¬åŠãæ¯ãè¿ãã次ã«äœãåŠã¶ã¹ãããèããŠã¿ãŸããããæ°ããé ç®ãåŠã¶ã¹ããããããã¯ãã§ã«åŠãã äºé ãæ·±ãç解ããããã«æ¯ãè¿ãã¹ããããã®æ¹åæ§ã¯åã ã®åŠç¿ããã»ã¹ãç®çã«ãããŸãã
10.2 Kotlinã®ä»åŸã®å±æ
Kotlinã®å¯èœæ§ã¯åºå€§ã§ããç¹ã«Androidéçºã§ã¯ãªããŠãããµãŒããŒãµã€ãã®éçºãããŒã¿ãµã€ãšã³ã¹ã®åéã«ãããŠã掻çšãèŠèŸŒããŸãããŸããäžéšã®äŒæ¥ã§ã¯ãKotlinããã©ã€ããªã®éçºèšèªãšããŠæ¡çšããŠãããšãããåºãŠããŠããŸãã
ããã«ãKotlinã®èšèªèšèšèªäœãé²åãç¶ããŠãããæ°ããæ©èœãæ¹è¯ã次ã ãšè¿œå ãããŠããŸããããããèžãŸãããšãKotlinã®åŠç¿ã¯é·æçãªã¹ãã«åäžãããããæè³ãšèšããã§ãããã
ããªãèªèº«ã®Kotlinã®æ ãè±ããªãã®ãšãªããæ°ããªäŸ¡å€ãçã¿åºãå匷ãããŒã«ãšãªãããšãé¡ã£ãŠããŸãã