ãã®è¨äºã¯ããã¯ã³ã´ Advent Calendar 2020ã®4æ¥ç®ã®è¨äºã§ãã
Näºåæ ¡Androidãã¼ã ã§ã¯ãããã2å¹´ããã¦ãJavaã§æ¸ãããã³ã¼ãã®ã»ã¨ãã©ãKotlinã«æ¸ãæãã¾ããããã®è¨äºã§ã¯ãã³ã¼ããKotlinã«æ¸ãæããä¸ã§å¿ è¦ã ã£ããã¨ãã¾ã¨ãã¦ããã¾ãã
Kotlinåã«æè¡ã¯ããã¾ã§å¿ è¦ã§ã¯ãªã
ããããKotlinåããããã¨ã«ããã¾ã§ã®æè¡åã¯å¿ è¦ãªãã§ããJavaã¨Kotlinã®äºææ§ãé«ãã®ã§ãKotlinåã«ãã£ã¦ã³ã¼ããå£ãããã¨ã¯å°ãªãã§ããã以ä¸ã®ããã«ææ³ã«ã大ããªå¤åã¯ãªãã®ã§ãèªããªãã³ã¼ããçã¾ãããã¨ãããã¾ããã
Javaã§ä½æããFragment
public class SimpleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.simple_fragment, container, false); } }
Kotlinã§ä½æããFargment
class SimpleFragment: Fragment { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.simple_fragment, container, false) } }
ããã¦ããã®ãããªå¤æã§ããã°ãAndroid Studioã®æ©è½ã§ãèªåçã«Kotlinã«å¤æãã¦ããã¾ãã
ãã¾ã«ãnullableã®å¦çãå¤ãã£ã¦ã¨ã©ã¼ãèµ·ãããããgetter, setterã®åå空éãã¶ã¤ãã£ã¦ã¨ã©ã¼ãèµ·ããããã¾ããããããã®è§£æ±ºãé£ãããªãã§ãããããKotlinã«ãªã£ããã¨ã§ã¨ã©ã¼ã®æ¤ç¥ããããããªããä»ã¾ã§è¦éãã¦ããä¸å ·åãè¦ã¤ãããã¨ãããã¾ãã
ã¤ã¾ããKotlinåãããåãããã«å¿ è¦ãªã®ã¯æè¡åã§ã¯ããã¾ãããå¿ è¦ãªã®ã¯ãã¨ã³ã¸ãã¢ã¨ãã¦ã®è åã§ãã
Kotlinåãããåãããã®è å
ãã¨ã³ã¸ãã¢ã®è åãã¨ããã®ã¯ãå®è£ ãããããåã¨ãã¦ãã使ãããè¨èã§ãããã ããããªãæ½è±¡çãªè¨èã§ããã®ã§ãããã§ã¯ã¨ã³ã¸ãã¢ã®è åãããã³ã¼ããæ¸ãé度ãã¨ãã³ã¼ããæ¸ãæéãã®ç¸ä¹ã¨ãã¾ãã
ã³ã¼ããæ¸ãã®ãéãã¦ãã³ã¼ããæ¸ãæéãé·ããã°ãå½ç¶ã®çµæã¨ãã¦å®è£ ãç´ æ©ãå®äºãã¾ãããã®2ã¤ã®è¦ç´ ãæ¹åãããã¨ã§ãKotlinåãããåãåãçã¾ãã¾ãããããããå ·ä½çã«è¦ã¦ããã¾ãããã
ã³ã¼ããæ¸ãé度ãä¸ãã
ã³ã¼ããæ¸ãé度ã¨ã¯ããã¡ããã¿ã¤ãã³ã°ã®éãã§ã¯ããã¾ãããé©åã«ã³ã¼ããæ¸ãã¦ããã¼ã¸ããé度ã®ãã¨ãæå³ãã¦ãã¾ãã
ã³ã¼ããæ¸ãé度ãä¸ããã«ã¯ãPull Requestã®å転æ°ãä¸ããå¿ è¦ãããã¾ããã³ã¼ãããã¼ã¸ãããªããã°ããã®ã³ã¼ãã¯ä½ã®ä¾¡å¤ãæã¡ã¾ãããå¨åº«ãæ±ãããã伿¥ã身åããåããªããªã£ã¦ãã¾ãããã«ããã¼ã¸åã®ã³ã¼ããæ±ãããããã¼ã ãåããªããªã£ã¦ããã¾ãã
ãªã®ã§ãPull Requestã®å·®åãæå°ã«ãã¦ãã³ã¼ãã£ã³ã°ã¨ãã¼ã¸ã®å転æ°ãä¸ãããã¨ã§ãã³ã¼ããæ¸ãé度ã¯åä¸ãã¦ããã¾ãã
ï¼Pull Requestã®å·®åãå°ãããã話ã®è©³ç´°ã¯ãã¡ããã覧ãã ãããï¼
Kotlinåãé²ãã¦ããä¸ã§ãPull Requestã®å·®åãæå°ã«ããããã«æ°ãã¤ããã¹ããã¨ã¯ãåç §æ§é ãææ¡ãããã¨ã§ããKotlinåããã¹ãJavaãã¡ã¤ã«ã¯ãåç §æ§é ã«ãã£ã¦ä»¥ä¸ã®4ã¿ã¤ãã«åé¡ã§ãã¾ãã
å³ã®ä¸ã®ãçµåéãã¨ã¯ããã®Javaãã¡ã¤ã«ãæã¤å®è£ ã®å¯çµåã®éã示ãã¦ãã¦ãã被åç §ãã¨ã¯ããã®Javaãã¡ã¤ã«ã®å®è£ ãã©ãã ãä»ã®ãã¡ã¤ã«ããåç §ããã¦ããããã示ãã¦ãã¾ããããã¦ã顿åã®é°å²æ°ã§Kotlinåã®é²ããããã示ãã¦ãã¾ãã以ä¸ã§ãããããã®ãã¿ã¼ã³ã®å¯¾å¿ãã¾ã¨ãã¾ãã
çµåéãå°ãªãã¦ãåç §ãå°ãªããã¡ã¤ã«ð
ããããã1ç®æã§ãã使ããã¦ããªããããªdata classã®ãã¡ã¤ã«ããinterfaceã®ãã¡ã¤ã«ã§ãããããããã¯ãKotlinåãã¦ãå½±é¿ç¯å²ãéå®ããã¦ããã®ã§ãããã«PRãåºãã¦ãã¼ã¸ãããã¨ãã§ãã¾ããKotlinåãé²ãã¦ããã«ã¯ãã¾ããã®ã¿ã¤ãã®ãã¡ã¤ã«ãåãã¦ããã¨æ°ã楽ã«ãªãã¾ãã
çµåéã¯å°ãªãããåç §ãå¤ããã¡ã¤ã«ð
commonãã£ã¬ã¯ããªãutilityãã£ã¬ã¯ããªã«å ¥ã£ã¦ãããããªãã·ã³ãã«ã§ä¾¿å©ãªæ©è½ãä¿æãã¦ãããã¡ã¤ã«ã§ããããKotlinåããããã¨ã§æ§ã ãªé¨åã«å½±é¿ãä¸ãããã®ã®ããã¹ããéã£ã¦ããã°Javaã®ã¨ãã¨åãæ©è½ãæä¾ãã¦ãããã¨ã¯ä¿è¨¼ãããã®ã§ãç¹ã«å¿é ããå¿ è¦ã¯ããã¾ãããã³ã³ããªã¯ãã«æ°ãã¤ãã¤ã¤ãæ©ãã«åãã¦ãããããã¡ã¤ã«ã§ãã
åç §ã¯å°ãªãããçµåéãå¤ããã¡ã¤ã«ð©
ãã®ããããããKotlinåãé¢åã«ãªã£ã¦ãã¾ããåå²ããã«æ©è½ãçãè¾¼ã¿ããã¦å·¨å¤§ã«ãªã£ã¦ãã¾ã£ãActivity, Fragment, Presenter, ViewModelãªã©ãããã«å½ã¦ã¯ã¾ãã§ãããããã®ãã¡ã¤ã«ã䏿°ã«Kotlinåããã®ã¯ããããªãã®ãªã¹ã¯ãå«ã¿ã¾ããnullableã®æ±ããå¤ãã£ããã¨ã§ãä½ããã®æ©è½ãåããªããªãå¯è½æ§ãããã¾ãï¼ç§ãã¡ã¯ããã§æ©è½ãå£ããã¾ã¾ãªãªã¼ã¹ããã¦ãã¾ã£ããã¨ãããã¾ããï¼ã
ãã®ããã䏿°ã«Kotlinåããã®ã¯å±éºãå«ãã®ã§ãã¾ãã¯å¤å´ã®Kotlinãã¡ã¤ã«ã使ãã¦ãããã«å°ããã¤å®è£
ãç§»ãã¦ããã®ãå®å
¨ã§ãã
// SimplePresenter.Javaãç§»è¡ãã¦ããããã®Kotlinãã¡ã¤ã« class KotlinSimplePresenter: SimplePresenterInterface { // Javaãã¡ã¤ã«ã®Presenterãå é¨ã§æã£ã¦ãã private val simplePresenter = SimplePresenter() override fun showSomething() { // æåã¯æ¢åJavaãã¡ã¤ã«ã®å®è£ ãè¿ãã ã simplePresenter.showSomething() } override fun hideSomething() { // å°ããã¤å®è£ ãKotlinã«ç§»ãã¦ãã someView.isVisible = View.GONE } }
åç §ãå¤ãã¦ãå¤ãã®å®è£ ãå¯çµåãã¦ãããã¡ã¤ã«ð¤®ð¤®ð¤®
ããã¯ã¢ã¼ããã¯ãã£ãæåãã¦ãã¾ããåå¨ãã¦ã¯ãããªããã¡ã¤ã«ã§ãããã®ãã¡ã¤ã«ã䏿°ã«Kotlinåããã®ã¯ç¡è¬ã§ããã¬ãã¥ã¤ã¼ãã¬ãã¥ã¯ã¼ãç²å¼ããPull Requestãçã¾ããã§ããããæ©è½ãå°ããã¤åå²ãã¦å¯çµåãè§£æ¶ãã¦ããã®æ©è½ãã¨ã«ãã¡ã¤ã«ãåºåã£ã¦Kotlinåãã¦ãã®ãè¯ãã§ããããã«ãã£ã¦ã䏿çãªKotlinåã ãã§ãªããå°æ¥çãªæè¡çè² åµã®è§£æ¶ãè¡ããã¨ãã§ãã¾ãã
ã¾ã¨ããã¨ã以ä¸ã®ããã«ãªãã¾ãã
ãã®ããã«æ°ãã¤ããªããã³ã¼ããæ¸ãã¦ãããã¨ã§ãPull Requestã®å転æ°ãéããªããKotlinåãç´ æ©ãé²ãã§ããã¯ãã§ããã¨ã¯ãããã³ã¼ããæ¸ãæéããªããã°ä½ãé²ã¾ãªãã®ã§ãæ¥åæéã«Kotlinåãé²ããæéã確ä¿ãããã¨ãå¿ è¦ã§ãã
ã³ã¼ããæ¸ãæéã確ä¿ãã
ã³ã¼ããæ¸ãæéã確ä¿ããããã®æ¹æ³ã¯ãè±åèªãè¦ããããã®æéã確ä¿ããã®ã¨åãããã«ãã¹ããæéãæ´»ç¨ãããã¨ã§ãããã®ããã«ã¯ãä½åº¦ãè¨ãããã«Pull Requestãå°ããããªããã°ããã¾ããã
- ã¬ãã¥ã¼ãå¾ ã£ã¦ããéã®15åã§ãçµåéãåç §éãå°ãªããã¡ã¤ã«ã1ã¤Kotlinåãã¦Pull Requestãåºãã¦ã¿ã
- MTGåã®5åã§ã1ãã¡ã¤ã«ã ãKotlinåããã¦ããã·ã³ãã«ãªPull Requestã®ã¬ãã¥ã¼ããã
ãªã©ãPull Requestã®å®è£ ã»ã¬ãã¥ã¼ãã©ã¡ããçãæéã§ã§ããã°ãæ¡ä»¶ã®å®è£ ãããªãããKotlinåã並è¡ã§é²ãããã¨ãã§ãã¾ãã大äºãªã®ã¯ã䏿°ã«é²ãããã¨ããªããã¨ã§ãã
ãKotlinåã®ããã«2ã¶ææ¬²ãããã¨è¨ã£ã¦ããããã¼ã¸ã£ã¼ã®å¿«è«¾ãå¾ããã¨ã¯é£ããã§ããããKotlinåã®ããã«1æ¥30忬²ãããã¨è¨ãã°ãOKãåºãã¦ãããããã¼ã¸ã£ã¼ãå¤ãã®ã§ã¯ãªãã§ãããããããã¦ãææã¨ãã¦Kotlinåã§ãããã¡ã¤ã«æ°ãæ¯æéè¨ãã¦ããã°ãããã¼ã¸ã£ã¼ãã¡ã³ãã¼ãã¢ããã¼ã·ã§ã³ãä¿ã£ã¦Kotlinåãé²ãã¦ãããã¨æãã¾ãã
ãã®ããã«ãå°éã«Pull Requestãéãããã¨ã§Kotlinåã¯éæã§ãã¾ããããããå¾ããæ¯ãè¿ã£ãæã«ããã¨ã³ã¸ãã¢ã®è åãã¨ãããã®ãæãããã¨ãã§ããã¯ãã§ãã
Kotlinåã§å¾ãããã¡ãªãã
æå¾ã«ãç§ãã¡ã®ãã¼ã ãKotlinåã«ãã£ã¦å¾ãããã¡ãªãããç°¡åã«ã¾ã¨ãã¾ãã
Javaã¨Kotlinã®é ã®åãæ¿ããä¸è¦ã«ãªã£ã
ãããæå¤ã¨ã¹ãã¬ã¹ã ã£ããè¨èªãçµ±ä¸ããããã¨ã§ãã³ã¼ãã®èªã¿ããããä¸ãã£ã¦ãå°ã幸ãã«ãªããã
ktxã©ã¤ãã©ãªãå°å
¥ã§ãã
Kotlinã®æ¡å¼µé¢æ°ãç¨æããã¦ããgoogleã®ktxã©ã¤ãã©ãªãå°å
¥ãããã¨ãã§ãã¦ãç¨æããã¦ãã便å©ãªé¢æ°ã使ããããã«ãªã£ãã
æ°æ©è½å®è£
ã¾ã§ã®æéãæ¸ã£ã
ä»ã¾ã§ã¯ãæ°æ©è½ãå®è£
ããããã«Javaãã¡ã¤ã«ãããã¨ããã®Kotlinåããã¦ããã®ã§ãä½è¨ã«æéãããã£ã¦ããï¼Javaã«ã³ã¼ããæ¸ãã¦ãå¾ããKotlinåããã®ã¯é¢åãªããï¼ãç¾å¨ã¯Kotlinåããã¦ããã®ã§ãããã«æ©è½ã®å®è£
ã«çæãããã¨ãã§ããããã«ãªã£ãã
ææ°ã®éçºç°å¢ã«è¿½å¾ã§ãã¦ããå®å¿æ
ã³ã¼ãã«Javaãå«ã¾ãã¦ããã¨ãææ°ç°å¢ã«è¿½ãã¤ãã¦ããªãã³ã³ãã¬ãã¯ã¹ã¿ãããªãã®ããã£ããéçºè
ã§ãã以ä¸ããã¯ãç°å¢ã¯ææ°ã®ãã®ã«è¿½å¾ãããã®ã§ãKotlinåã§ãããã¨ã®å®å¿æã¯å¤§ããã£ããã¾ããæ¡ç¨ãé²ãã¦ããä¸ã§ãã³ã¼ããKotlinã§æ¸ããã¦ãããã¨ã¯1ã¤ã®å¼·ã¿ã«ãªãã¨æã£ã¦ããã
ã³ã¼ãã®Kotlinåã«éãããAndroidããã¸ã§ã¯ãã®æ§ã ãªãªãã¡ã¯ã¿ãªã³ã°ã«ã¤ãã¦ãããã®æ¹æ³ã§é²ãã¦ããã°å®ç¾ã§ããã¯ãã§ãã
å°ããªæ¹åãéããªãããããè¯ãéçºç°å¢ã¸ã¨æ¹åãã¦ããã¾ãããã
Näºåæ ¡Androidãã¼ã ã§ã¯ãæ¡ç¨æ´»åãç©æ¥µçã«é²ãã¦ãã¾ãããããèå³ããã£ã¦ããã ãã¾ããããæ¯éãã¡ããããæ°è»½ã«ãé£çµ¡ãã ããã