ãåç·šãKotlinã§Webã¢ããªã±ãŒã·ã§ã³ãéçºããŠã¿ãããã³ãºãªã³
ä»å°åžããã£ãŒã«ãã«å 端æè¡ãšæ§ã ãªç£æ¥ãæãåãããæ°äºæ¥ã®åµåºãå 端IT人æã®è²æã»äº€æµã«ããã€ãããŒã·ã§ã³ãçã¿åºããéœåžäœéšã®ã¢ããããŒããç®æããããžã§ã¯ããSENDAI X-TECH Innovation Projectãããã®äžç°ãšããŠ2019幎11æ2æ¥ãã3æ¥ã«ãããŠãä»å°åžã§ãKotlinã§Webã¢ããªã±ãŒã·ã§ã³ãéçºããŠã¿ããïŒãã³ãºãªã³ããéå¬ãããŸããããã®åãçµã¿ãšã€ãã³ãã®æ§åãã玹ä»ããŸããä»å°ã§ææ°æè¡ããã¬ã³ããåŠã³ãæ°ããªåºäŒããæŽãã§ã»ãã
ãŸãã¯åãããŒãã«ã«åº§ã£ãåå è å士ã§ããååã»äœãããŠãã人ãªã®ãã»ãã³ãºãªã³ã§åŠã³ããããšãã«ã€ããŠèªå·±ç޹ä»ããåããèŠªäº€ãæ·±ããŸãã

ãªãŒããã³ã°ããŒã¯ã¯ãæ¬ã€ãã³ãäž»å¬è ã§ãããä»å°åžçµæžå±ç£æ¥æ¯è課 èæšç°çãããããSENDAI X-TECH Innovation Projectãã®ãããžã§ã¯ãèæ¯ãšæŠèŠã»å®çžŸãªã©ã«ã€ããŠãèæšç°ããã¯ãä»å°åžã®èª²é¡ã§ããå°åé«éœ¢åãšäººææµåºããIoTãAIãVR/ARã5Gãªã©ã®å 端æè¡ãšæ§ã ãªç£æ¥ãæãåãããŠæ°äºæ¥ãåµåºããIT人æã®è²æã»äº€æµãæ¯æŽããããšã§ä»å°åžãã¢ããããŒãããŠãããããšèªããŸããã

â²ä»å°åžçµæžå±ç£æ¥æ¯è課ãèæšç° çãã
ãŸãã¯ãKotlinã®åºç€ç¥èã«ã€ããŠåŠãŒã
ä»åã®ãKotlinã§Webã¢ããªã±ãŒã·ã§ã³ãéçºããŠã¿ãããã³ãºãªã³ãã®è¬åž«ãåããŠããã ããã®ã¯ãæ¥æ¬KotlinãŠãŒã¶ã°ã«ãŒã代衚ã®é·æŸ€å€ªéããã§ãã
â²Ubieæ ªåŒäŒç€Ÿãé·æŸ€ 倪éããã
æ©çš²ç°å€§åŠåºå¹¹çå·¥åŠéšã忥åŸãæ ªåŒäŒç€Ÿæ¥ç«ã·ã¹ãã ãºããšã ã¹ãªãŒæ ªåŒäŒç€ŸãçµãŠãAIå蚺ãããã¯ããå±éããå»çã¹ã¿ãŒãã¢ããã®Ubieæ ªåŒäŒç€Ÿã«å
¥ç€Ÿãæ¥åå€ã®æŽ»åãšããŠãæ¥æ¬KotlinãŠãŒã¶ã°ã«ãŒãä»£è¡šãæ¥æ¬JavaãŠãŒã¶ã°ã«ãŒãå¹¹äºãåããäºå®äžã®Kotlinãšãã³ãžã§ãªã¹ããèæžã«ãKotlinã¹ã¿ãŒãããã¯ããªã©ãå
±åèš³æžã«ãKotlinã€ã³ã»ã¢ã¯ã·ã§ã³ããããã
ãã¥ãŒã¿ãŒãšããŠåå è ããµããŒãããŠãããã®ã¯ãä»å°åžåºèº«ã§Kotlin Festã¹ã¿ãããåããŠããæå·è²Žæš¹ããã
â²ãšã ã¹ãªãŒæ ªåŒäŒç€Ÿãæå· 貎暹ãã
æ±å倧åŠå·¥åŠéšãæ±å倧åŠå€§åŠé¢æ
å ±ç§åŠç ç©¶ç§ã忥åŸããšã ã¹ãªãŒæ ªåŒäŒç€Ÿã«å
¥ç€Ÿãä»å°åžåºèº«ã瀟å€ã®æŽ»åãšããŠãKotlin Festã¹ã¿ãããªã©ã
ãã³ãºãªã³1æ¥ç®ã®ãŽãŒã«ã¯ããKotlinã§ç°¡åãªããã°ã©ã ãå®è£ ããããšãã§ãããããšããŸãã¯ãéçºç°å¢ãæ§ç¯ãããšããããã¹ã¿ãŒãããŸãããä»åã®ãã³ãºãªã³ã§å¿ èŠãšãªãããŒã«ã¯ããJDKããIntelliJ IDEA + ãã©ã°ã€ã³ãã®2ã€ã§ãã
Kotlinã¯ãã€ãã£ãã§åããã®ããããŸãããåºæ¬çã«ã¯Javaã®äžã§åãããã°ã©ãã³ã°èšèªãä»åãã¿ãŒã²ãããJavaãšããŠãããããJDKïŒJava Development KitïŒãå¿ èŠã«ãªããŸããIntelliJ IDEAã¯Javaçšã®çµ±åéçºç°å¢ã§ã2æ¥ç®ã®èª²é¡ã¢ããªãã¹ã ãŒãºã«é²ããããã«æŽ»çšããŸãã

JDKãIntelliJ IDEAãããŠã³ããŒãããã€ã³ã¹ããŒã«ããäœæ¥ãé²ããåå è ã®çãããåãããŒãã«å士ã§ãµããŒããåããªã©ããªããããªé°å²æ°ã®äžã§ãã³ãºãªã³ãé²ããããŠãããŸãã

ãKotlinããKtorãã®ãã©ã°ã€ã³ã€ã³ã¹ããŒã«ãŸã§å®äºãããšããã§ãé·æŸ€å€ªéãããããKotlinã®åºç€ç¥èã«ã€ããŠèª¬æãããŸããã
- Kotlinã¯JetBrainsã«ããéçºãããããã°ã©ãã³ã°èšèªã§ãIntelliJ IDEAãšãçžæ§ãè¯ã
- Javaãšåãããéçåä»ããªããžã§ã¯ãæåèšèªã«åé¡ãããŠãã
- ã³ã³ãã€ã«ããåã«åã解決ãããŠããã®ã§ããšã©ãŒãå°ãªã
- ãªããžã§ã¯ãæåèšèªã§ã颿°åèšèªãªã©ã®ãããšãããåãå ¥ããŠãã
- JVMãAndroidãäž»èŠãªã¿ãŒã²ãããšããŠç»å ŽããããçŸåšã¯JavaScriptãNativeãéèŠãªãã¿ãŒã²ãããšããŠãã
- 2011幎ã«çºè¡šããã2016幎ã«1.0ããªãªãŒã¹ããããŸã è¥ãèšèªã

ç¶ããŠãIntelliJ IDEAã§Hello Worldã衚瀺ãããæé ã説æãããŸããã

Kotlinã®ææ³ã衚çŸã«ã€ããŠåŠã¶ãKotlinææ³å ¥éã
ãããŠãé·æŸ€å€ªéããããããKotlinãèªãäžã§äžçªã¢ãããšããã ãšãããKotlinææ³å ¥éãããªãã©ã«ã倿°ã»åãªã©ã«ã€ããŠãKotlinã®ææ³ã衚çŸã«ã€ããŠããããããã解説ãvalãvarã«ãã£ãŠå€æ°å®£èšãè¡ãã宣èšãããåãšççŸãããããªå€ãä»£å ¥ãããšã³ã³ãã€ã«ãšã©ãŒãšãªãããšããåãæå®ããªããŠãå éšã§å€æããŠãããåæšè«ããšããæ©èœãªã©ã玹ä»ãããŸããã


äŒæ©ãã¯ãã¿ãç¶ããŠã®è¬çŸ©ã¯æ¡ä»¶åå²ã«ã€ããŠããã¹ãã®ç¹æ°ã§ãåæ Œããäžåæ Œããæ¡ä»¶åå²ãããã³ãŒããäŸã«ãif-elseã®åŒã®äœ¿ãæ¹ãªã©ã解説ãããŸããã

ããã«if-elseã«æ £ããããã®èª²é¡ãåºãããå®éã«ã³ãŒããæžããŠã¿ããã³ãºãªã³ã«åãçµã¿ãŸãã0以äž500以äžã®äžããã©ã³ãã ã«éžæãããæŽæ°ã«å¯ŸããŠããnãéžã°ããŸããããšåºåããããšãå¶æ°ãªããããã¯å¶æ°ã§ãããšåºåãã奿°ãªããããã¯å¥æ°ã§ãããšåºåããããã«ã³ãŒããæžãåé¡ã§ãã

ãã®æ¥åããŠæãåãããã³ãºãªã³ã«ã質åãªã©ãç©æ¥µçã«ããªãããçããçå£ã«åãçµãã§ããŸããã

ãããã課é¡ã«åãçµãã åŸã¯ãè§£çãšãã®ã³ãŒãã«å¯Ÿãã解説ãè¡ãããŸããã

ãã³ãºãªã³åŸã¯ãTECH PLAYéå¶ãçšæãããåŒåœãšãè¶ã§ã©ã³ãã¿ã€ã ãåå è å士ã§è«ç¬ããæ¹ããååäžã®èª²é¡ãååŸããã«åããŠäºç¿ã«åãçµãæ¹ãã¡ãèŠãããŸããã

ãFizzBuzzãåé¡ã«Kotlinã§ææŠïŒ
ååŸã¯Kotlinã®ææ³ã«ã€ããŠãããã«æ·±ãåŠãã§ãããŸãããæ¡ä»¶åå²ãã«ã€ããŠç°¡åã«åŸ©ç¿ããåŸãå¶åŸ¡æ§æã®äžã€ã§ãããç¹°ãè¿ããã®æ§æã«ã€ããŠè§£èª¬ãããŸããã
ããã€ãããäžãããä»å玹ä»ãããã®ã¯ãforãã«ã€ããŠã®æ§æã§ãããlistOfããšãããªã¹ãçæé¢æ°ã䜿ã£ãç¹°ãè¿ãæ§æãªã©ã玹ä»ãããŸããã

課é¡ãšããŠåºãããã®ã¯ããFizzBuzzãåé¡ã0ãã100ãŸã§ã®æŽæ°ãã3ã§å²ãåããå Žåã¯ãFizzãã5ã§å²ãåããå Žåã¯ãBuzzããäž¡è ã§å²ãåããå Žåã¯ãFizz Buzzããšåºåããããšãæ¡ä»¶ã«ããã°ã©ãã³ã°ããåé¡ã§ãã

çŽ20åã§ãFizzBuzzãåé¡ã«çå£ã«åãçµãåå è ã®çãããæéãäœã£ã人ã¯ããã«ã1ãã100ãŸã§ã3ã®åæ°ãš3ã®ä»ãæ°åã®ã¿ãåŸãã«ã!ããä»ãããäžçã®ããã¢ãåé¡ãã«ææŠã課é¡ã¿ã€ã åŸã¯é·æŸ€ããããè§£çäŸãå¿çšäŸãªã©ã玹ä»ãããŸããã

Kotlinã§ããããªé¢æ°ãäœã£ãŠéãŒã
ç¶ããŠã¯ãKotlinã®ã颿°ãã«ã€ããŠããããŸã§ã¯ã¡ã€ã³ã®é¢æ°ãèŠãŠããŸãããã颿°ãèªåã§äœã£ãŠäœ¿ããšãããåŠãã§ãããŸããç¬èªã®add颿°ã顿ã«ãããŒã¯ãŒãfunãåŒæ°ã®åãæ¹ãæ»ãå€ã®è¿ãæ¹ãªã©ã®æ§æäŸã玹ä»ãããŸããã

ãããŠã以äžã®5ã€ã®é¢æ°ãå®çŸ©ãã課é¡ã«åãçµã¿ãŸãã
- åŒæ°ãšããŠäžããããæŽæ°ã2ä¹ããæ°ãè¿ã颿°ãsquareã
- åŒæ°ãšããŠäžãããã2ã€ã®æŽæ°ã®ãã¡ã倧ããæ¹ãè¿ã颿°ãmaxã
- åŒæ°ãšããŠäžããããæŽæ°ãå¶æ°ãªãrueãããã以å€ã¯falseãè¿ãé¢ãisEvenã
- åŒæ°ãšããŠäžããããæŽæ°ã®éä¹ãè¿ã颿°ãfactorialã
- åŒæ°ãšããŠäžããããæŽæ°ã«ã3ãå«ãŸãããã©ãããè¿ã颿°ãcontainsThreeã
課é¡ã®è§£çãšå¶åŸ¡æ§æãšé¢æ°ã«å¯ŸããŠãŸãšãã解説ãããåŸãKotlinã«å¯Ÿãã質çå¿çãè¡ãããç©æ¥µçã«è³ªåãå¯ããããŸããã
Kotlinã®ãã¯ã©ã¹ãã«ã€ããŠåŠã¶
次ã®ãããã¯ã¯ãã¯ã©ã¹ããã¯ã©ã¹ã®å®çŸ©ãã€ã³ã¹ã¿ã³ã¹ã®çæãããããã£ãªã©ãäŸæã§ç޹ä»ããŸããã¡ãœããã®èª¬æãšäœ¿ãæ¹ãªã©ã解説ãããŸããã

ã¯ã©ã¹ã®å®çŸ©ã«é¢ãã課é¡ã¯ã以äžã®2ã€ã®ããããã£ãš3ã€ã®ã¡ãœãããæã€ãIntPairããšããã¯ã©ã¹ãäœãããšã20åãšããå¶éæéå ã§åãçµã¿ãŸãã
- 2ã€ã®ããããã£
ãfirst: Int
ãsecond: Int - 3ã€ã®ã¡ãœãã
ãsum: firstãšsecondã®åãè¿ã
ãmax: firstãšsecondã®ãã¡å€§ããæ¹ãè¿ã
ãswap: firstãšsecondãéã«ãªã£ãIntPairãªããžã§ã¯ããè¿ã

æ¢åã®ã¯ã©ã¹ãç¶æ¿ããŠæ°ããã¯ã©ã¹ãå®çŸ©ãã
äŒæ©ãã¯ãã¿ãæ¢åã®ã¯ã©ã¹ãç¶æ¿ããŠæ°ããã¯ã©ã¹ãå®çŸ©ããããã°ã©ãã³ã°ã«ã€ããŠãè¬çŸ©ãè¡ãããŸãããæ°ããã¯ã©ã¹ã«ã¯ãç¶æ¿å ã®ã¯ã©ã¹ã®ããããã£ãã¡ãœãããåãç¶ãããšãå¯èœã§ãããã®ãç¶æ¿ãã®ä»çµã¿ã«ã€ããŠãç¶æ¿å ããç¶æ¿å ã®ã³ãŒããåããŠã詳ãã説æãããŸããã
ããã«ãJavaãšã®ä»çµã¿ã®éããããã®çµç·¯ãææ³ã«ã€ããŠãªã©ã®è§£èª¬ãç¶æ¿ãåæãšãããæœè±¡ã¯ã©ã¹ããã€ã³ã¿ãã§ãŒã¹ã®å®çŸ©ãªã©ã«ã€ããŠã®è¬çŸ©ãç¶ããŸãã

Kotlinã«ã¯ãæ¢åã®åã«ã¡ãœããã远å ããããšãã§ãããæ¡åŒµé¢æ°ããšããæ©èœããããŸããã¯ã©ã¹ã®å€ã«å®çŸ©ããããšãã§ããä»äººãäœã£ãã¯ã©ã¹ã«å¯ŸããŠãã¡ãœããã远å ã§ããŸãã
ãããŠãæ¡åŒµé¢æ°ãmeetsããå®çŸ©ãã課é¡ã«åãçµã¿ãŸãã

åå è ããã®è³ªåã«ãäžå¯§ã«çããŠãããé·æŸ€å€ªéããã

颿°ãªãã©ã«ã䜿ã£ãŠã¿ãã
颿°ã¯ãªããžã§ã¯ããªã®ã§ãæ°ãæååãšåãã颿°ã«é¢æ°ãæž¡ãããã颿°ã颿°ãè¿ãããã§ããŸããæ°ãæååãšåæ§ã«ã颿°ãªããžã§ã¯ãã«ããªãã©ã«ãããããã©ã ãåŒããšãç¡å颿°ãã颿°ãªãã©ã«ã®èšæ³ãšããŠæäŸãããŠããŸãã
ãšã«ããã©ã ãåŒã䜿ã£ãŠã¿ãããšããããšã§ãåãç¹°ãè¿ãåŠçãè¡ãã³ãŒããforæãã¡ãœããåŒã³åºã+ã©ã ãåŒã§èª¬æãããããªã¹ããæäŸããã¡ãœãã+ã©ã ãåŒã®ã³ãŒãäŸãã颿°ãªããžã§ã¯ããšé¢æ°ãªãã©ã«ã«ã€ããŠã®è§£èª¬ããŸããã

課é¡ã¯ãããã°ã©ã ã§è§£ãæ°åŠã®åé¡éãProject EulerãProblem 1ããã以äžã®åé¡ãåºé¡ãããŸããã
- 10æªæºã®èªç¶æ°ã®ãã¡ã3ãŸãã¯5ã®åæ°ã¯3, 5, 6, 9ã§ãããããã®ç·åã¯23ã§ãã
- 1000æªæºã®èªç¶æ°ã®ãã¡ã3ãŸãã¯5ã®åæ°ã®ç·åãæ±ãã
Nullå®å šãçè§£ããŠã䜿ãããªãã
é·æŸ€å€ªéããããããåŸæ¥Javaã§ã¯Nullãã«ãžã¥ã¢ã«ã«æ±ãããããã«ãNullã«èµ·å ãããã°ãåºããããšããåé¡ããããŸãããããã§Kotlinã§ã¯ãNullã®å¯èœæ§ã®ãããã®ãšãããã§ãªããã®ã峿 Œã«åºå¥ããããšã§ã±ã¢ã¬ã¹ãã¹ãé²ããNullå®å šããšããæ©èœããããŸãã
Nullã®å¯èœæ§ã®ããåïŒNullableïŒã¯?ãã€ããŠè¡šçŸããããšã§ãNullã®å¯èœæ§ã®ãªãåïŒNotNullïŒãšåºå¥ããŸããNullableã®æ±ãã¯ãšããšãæ éã«ããå¿ èŠããããšå眮ãããªãããifæãªã©ã«ããNullãã§ãã¯ãå®å šåŒã³åºããifæã«ããNullãã§ãã¯ãçç¥ã§ãã䟿å©ãªèšæ³ãä»»æã®ãªããžã§ã¯ãã«å¯ŸããŠåŒã³åºããæ¡åŒµé¢æ°ãletããªã©ã玹ä»ãããŸããã
ïŒæ¥ç®ã®ãã³ãºãªã³çµäºåŸã¯ãããŒã«ãšãã¶ã§ä¹Ÿæ¯ïŒ
ãã³ãºãªã³çµäºåŸã¯ãè¬åž«ã®é·æŸ€å€ªéãããæå·è²Žæš¹ãããä»å°åžåœ¹æã»äœè€äŒžæŽãããTECH PLAY éå¶äºåå±ã»ã¹ã¿ããã亀ããŠæèŠªäŒãéå¬ãããŸããã
ä»å°åžåœ¹æã»äœè€äŒžæŽããã®é³é ã§ä¹Ÿæ¯ãåå è ã®çãããšãä»åŸä»å°ã§ããããããã³ãºãªã³ãã³ãã¥ããã£ãã¢ããããŒãããŠããããšã楜ããçãäžãããŸããã

âä»å°åžäž»å¬ã®ã€ãã³ã
ã12/7(å)ïœ12/8(æ¥)ãSwiftã§iPhoneã¢ããªäœãäœéšïŒ
ã1/18(å)ïœ1/19(æ¥)ãã¢ããªUIãã¶ã€ã³å®è·µãã³ãºãªã³
ã2/7(å)ïœ2/8(æ¥)ããã¶ã€ã³ã·ã³ãã³ã°äœéšè¬åº§
ã2/29(å)ïœ3/1(æ¥)ãããžãã¹ãã©ã³æ§ç¯ã¯ãŒã¯ã·ã§ãã
åŸç·šã¯ãã¡ãïŒ ãåŸç·šãKotlinã§Webã¢ããªã±ãŒã·ã§ã³ãéçºããŠã¿ãããã³ãºãªã³
ããããã€ãã³ã
é¢é£ããã€ãã³ã

Kotlinã§Webã¢ããªã±ãŒã·ã§ã³ãéçºããŠã¿ãããã³ãºãªã³
2019幎11æ02æ¥ (å)ããããã®èšäº

ãåŸç·šãKotlinã§Webã¢ããªã±ãŒã·ã§ã³ãéçºããŠã¿ãããã³ãºãªã³

ãåå ã¬ããŒããKotlinã§Webã¢ããªã±ãŒã·ã§ã³ãéçºããŠã¿ãããã³ãºãªã³










