ãããŠãçªç¶ãåè¯ãªäººã ã¯ãKotlin'eäžã®Androidã§ã®æžãæ¹ãæããŠãããããšãææ¡ããŸããã ããã¯è¯ãå åã§ããããã«æããã®ã§ãKotlinã§ã¢ããªã±ãŒã·ã§ã³ããã°ããæžãçŽããçµäºããŠGoogle Playã«æ²èŒããŸããã
éèŠãªèª¬æïŒãã®èšäºã¯ãKotlin'eã§Androidåãã«äœæããæ¹æ³ã«ã€ããŠã®ã¿èª¬æããŠããŸãã Kotlinãè©ŠããŠã¿ãã人ããããŠKotlinãè©ŠããŠã¿ããçç±ãç解ããã人ã ããèå³ãæã¡ãŸãã ç§ãæžããã¢ããªã±ãŒã·ã§ã³ã¯éåžžã«åçŽã§ãïŒããèªäœãJetBrainsã«ã¯ãŸã£ããé©çšãããŸããïŒã 圌ã®ã³ãŒãã§äœããæ¹åã§ãããšããä¿èšŒããããŸããããã¯äŸãšããŠã®ã¿Githubã«æçš¿ãããŠãã ãé©ãã¹ãã³ãŒãã®ãµã³ãã«ãšããŠã§ã¯ãããŸããã åäœããŸã ãè©ŠããŠã¿ããå Žåã¯ãããããé 眮ã§ããŸã ã ããããç¹°ãè¿ããŸãããããã¯ãã¢ã§ããããã®ç®çã¯å®ç§ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªããKotlin for Androidã®çŽ¹ä»ã§ãã
ç¹°ãè¿ããŸãããäœãæ°ãããã®ã§ãã ãããŠããªãç§ã¯ãããç¥ãå¿ èŠããããŸããïŒ
æãèå³æ·±ããã®ãé ãããªãããã«ãKotlin'aã®æãéèŠãªå©ç¹ã®ã¿ã«èšåããŸãã
- ã³ã³ãã¯ããªã³ãŒãã ãã°ããæžã蟌ã¿ãèªã¿ãããããšã©ãŒãå°ãªãã
- çµã¿èŸŒã¿ãšã©ãŒä¿è·ããŸã第äžã«ãnull蚱容æ§ãã€ãŸããããã°ã©ããŒãç¹å®ã®å€æ°ãnullã«ãªãå¯èœæ§ãããããšãæ瀺çã«ç€ºãèŠä»¶ã
- éçºã®ããããïŒç§ã®æèŠã§ã¯ãåå¿è ã®Javaéçºè ã§ãç°¡åã«Kotlinããã¹ã¿ãŒã§ããŸãïŒã
Kotlin'eã§ã¯ãJav'eãããã¯ããã«é«éã«æžãããšãã§ããç§ã®æèŠã§ã¯ãã³ãŒãã¯ããçŸããã§ãã
ã¡ãªã¿ã«ãgithub'eã«ã¯ãKotlin'eã®ã³ãŒããå«ã200以äžã®ãªããžããªãæ¢ã«ãããŸããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠèšãã°ãKotlinã¯Telegramã¡ãã»ã³ãžã£ãŒã®éçºã«äœ¿çšãããŸããã
ããã§ã¯ãã©ãããå§ããŸããïŒ
åäœããã«ã¯ãIDEãå¿ èŠã§ãã æãããªçç±ãããç§ã¯IntelliJ IDEAã奜ã¿ãŸãããJetBrainsã¯Eclipseçšã®Kotlinãã©ã°ã€ã³ãäœæããvimã®æ奜家ã¯å¥ã®èšèªã³ã³ãã€ã©ã䜿çšã§ããŸãã
ããã«ãAndroidã§ããžãã¹ã§Kotlinãè©ŠããŠã¿ãã人ã¯èª°ã§ãIntelliJ IDEAã䜿çšãããšä»®å®ããŸãã åäœãããã«ã¯ãKotlinãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããã³ã³ãã¥ãŒã¿ãŒã«gradleãšAndroid SDKãããããšã確èªããå¿ èŠããããŸãïŒããã¯Kotlin'yãšã¯é¢ä¿ãããŸãããããã¯Androidã®éçºã«å¿ èŠã§ãïŒã
Javaãæåã§ãã
å®æããããšã«ãããšããç§ã¯ãã§ã«éšåçã«æžãããã¢ããªã±ãŒã·ã§ã³ãæã£ãŠããŸããã ãã¹ãŠãJavaã§æžãããŠããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®æ¬è³ªïŒç»é¢ã«èµ€ãã¿ã¹ã¯ã®ãªã¹ãããããã¿ã¹ã¯ãã¯ãªãã¯ãããšç·è²ã«å€ãããæéãçµéããïŒããã¯ãŠãŒã¶ãŒãã¿ã¹ã¯ã«åãçµãã§ããããšãæå³ããŸãã 圌ãåæ¢ãããšãã圌ã¯åã³ãããã¯ãªãã¯ããã¿ã¹ã¯ãåã³èµ€é¢ãã圌ãã©ãã ãã®æéãè²»ããããã瀺ããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãäœããã§ãã¯ããã«ç²ç®çã«ãŠãŒã¶ãŒãä¿¡é ŒããŸããããã¯ãoDeskã®ãå 貎ãããªããèŠãŠããããšããããšã§ã¯ãããŸããã
åããããžã§ã¯ãã§JavaãšKotlinã®äž¡æ¹ã®ã³ãŒãã䜿çšã§ãããšããäºå®ã«ãããããããç§ãJavaã§æžãããã®ãKotlinã«æžãçŽãããã£ãã®ã§ããç§ã®éã¯Kotlinã®100ïŒ ã³ãŒããèŠæ±ããŸããã ç¶æ¿ãããã³ãŒãã䜿çšãããšããã¹ãŠãåçŽã§ããããšãããããŸãããsrc / main / javaã®æ¬¡ã«ã src / main / kotlinãã©ã«ããŒãäœæãããã®äžã«ã¯ã©ã¹ãé 眮ããŸãã Kotlinã®ãã¡ã€ã«ã¯.javaã§ã¯ãªã.ktã§çµãããŸãã ããã§ã楜ããç¬éãæŽã£ãããšãå€æããŸãããKotlinã¯ãã1ã€ã®ã¯ã©ã¹-1ã€ã®ãã¡ã€ã«ããšãã察å¿ãå¿ èŠãšããŸããã ã¢ããªã±ãŒã·ã§ã³ããžãã¯ã«åŸã£ãŠã奜ããªã ãå€ãã®ã¯ã©ã¹ã1ã€ã®ãã¡ã€ã«ã«è©°ã蟌ãããšãã§ããŸãã ç§ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã¿ããŒã¹ã®æäœãšç»é¢äžã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®2ã€ã®è«çéšåã ããããããã¡ã€ã«ã®æ°ãæžããããšãã§ããŸããã
IntelliJ IDEAçšã®Kotlinãã©ã°ã€ã³ã¯ãJavaããKotlinãžã®é©åãªå€æãå®è¡ããããšã«ããã .javaãã¡ã€ã«ã.ktãã¡ã€ã«ã«å€æã§ããŸãã ããã¯ããã¡ã€ã«ãšã³ã³ããã¹ãã¡ãã¥ãŒãå³ã¯ãªãã¯ããããJavaã³ãŒãã.ktãã¡ã€ã«ã«ã³ããŒãããšãã«è¡ãããšãã§ããŸãïŒãã©ã°ã€ã³ã¯å€æã§ãããã©ãããå°ããŸãïŒã
Kotlin'eã«ã³ãŒããæžããŸã
Kotlinã³ãŒãã¯ã³ã³ãã¯ãã§ããããšãã°ãã³ã³ã¹ãã©ã¯ã¿ãŒãšã²ãã¿ãŒ/ã»ãã¿ãŒãå«ãã¯ã©ã¹ã¯æ¬¡ã®ããã«èšè¿°ãããŸãã
class Item (val project: String, var status: String, var secondsSpent: Long, var lastactivated: Long)
ãã¿ã³ãã¯ãªãã¯ããŠããã¹ããå ¥åããããã®ãã€ã¢ãã°ãäœæããã³ãŒããèŠãŠã¿ãŸãããã
JavaïŒ
addButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { AlertDialog.Builder alert = new AlertDialog.Builder (this); alert.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result = input.getText().toString() } }); } }
ã³ããªã³ïŒ
addButton.setOnClickListener() { var alert = AlertDialog.Builder(this); alert.setPositiveButton("") { dialog, whichButton -> result = input.getText().toString() } }
åæããŠãKotlin'eã®ã³ãŒãã¯èªã¿ãããã§ãã 泚ææ·±ãèªè ã«ãšã£ãŠã¯ãããã¯ãã¡ããããã€ã¢ãã°ãäœæãããšãã«[OK]ãã¿ã³ã ãã§ãªã[ãã£ã³ã»ã«]ãã¿ã³ãå¿ èŠãªãããããã¯ã³ãŒãã®äžéšã«ãããªãããšã«æ³šæããŠãã ããã ã³ãŒãã¯Githubã«å®å šã«ã¢ããããŒããããŸãã
ã³ãŒããçãã§ããã®ã¯ãªãã§ããïŒ ããšãã°ãKotlinã§ã¯ããã®åœ¢åŒã®èšè¿°ãå¯èœã§ããåŒæ°ãšããŠã1ã€ã®æœè±¡ã¡ãœãããæã€ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãå¿ èŠãªå Žåã¯ãããã«ã©ã ããåçŽã«æž¡ãããšãã§ããŸããããã¯äžèšã®äŸã«ç€ºãããŠãããšããã§ãã
Kotlin'eã§ã¯ãä»£å ¥ã®å³åŽããæšæž¬ããããããå€æ°ã®åãçç¥ã§ããããšã«æ³šæããŠãã ããã
Java | ã³ããªã³ |
---|---|
AlertDialog.Builder alert = new AlertDialog.BuilderïŒthisïŒ; | val alert = AlertDialog.BuilderïŒããïŒ |
Kotlin'eã®æ§æã®èå³æ·±ãæ©èœïŒãã©ã¡ãŒã¿ãŒãé¢æ°ã«æž¡ãããæåŸã®ãã©ã¡ãŒã¿ãŒãé¢æ°ã§ããå Žåãè§æ¬åŒ§ããå€ãããšãã§ããŸãã ããã¯ãŸãã«ãã©ã°ã¡ã³ãã«èŠããããã®ã§ãã©ã ããsetPositiveButtonã«æž¡ãããOKãã¿ã³ãæŒãããšã§æ©èœããŸãã
alert.setPositiveButton("") { dialog, whichButton -> result = input.getText().toString() }
åãããã«æžãããšãã§ããŸã
alert.setPositiveButton("", { dialog, whichButton -> result = input.getText().toString() } )
èªã¿ããããªãã·ã§ã³ãèªç±ã«éžæã§ããŸãã
Kotlinã³ãŒãã§ã®Javaã©ã€ãã©ãªã®äœ¿çš
ãã1ã€ã®è¯ãç¹ã¯ãKotlinã³ãŒãããJavaã§èšè¿°ãããã©ã€ãã©ãªãçŽæ¥äœ¿çšã§ããããšã§ãã
ããšãã°ãSQLiteã§ä¿åãããšãã«ãããžã§ã¯ãåã®ç¹æ®æåãšUnicodeãé©åã«åŠçããããã«ãäžè¬çãªã©ã€ãã©ãªã®StringEscapeUtils.escapeJavaããã³StringEscapeUtils.unescapeJavaé¢æ°ã䜿çšããŸããã ãããã®é¢æ°ã¯importã¹ããŒãã¡ã³ãã§ã€ã³ããŒãããã ãã§ãïŒãããžã§ã¯ãããããã£ã«å ¥åããŸãïŒã
import org.apache.commons.lang3.StringEscapeUtils
æ»ãå€
Kotlinã§ã¯ãé¢æ°ãªãã©ã«ã¯æåŸã®åŒã§èšç®ãããå€ãè¿ããããé¢æ°ãªãã©ã«ïŒå¥åã©ã ãé¢æ°ïŒã§returnã䜿çšããããšã¯çŠæ¢ãããŠããŸãã ãã®ããã setOnTouchListenerã®åŒã³åºãã§ã¯ãåŒã³åºãã®æåŸã®ãã©ã¡ãŒã¿ãŒã¯booleanãè¿ãé¢æ°ã§ããããšãæåŸ ãããŸãã ãã®å€ã¯ãå®éã«gestureDetector.onTouchEventïŒaEventïŒãè¿ããŸãã
JavaïŒ
gestureListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } };
ã³ããªã³ïŒ
getListView()?.setOnTouchListener() { v, aEvent -> gestureDetector.onTouchEvent(aEvent) }
Kotliné¢æ°ãªãã©ã«ã³ãŒãã§return GestureDetector.onTouchEventïŒaEventïŒãèšè¿°ããããšã¯ã§ããŸãããgestureDetector.onTouchEventïŒaEventïŒãåŒã³åºããçµæã¯ãã®æ¹æ³ã§è¿ãããŸãã
å®éãé¢æ°ãªãã©ã«ã§éããŒã«ã«ãªã¿ãŒã³ã䜿çšããå¿ èŠãããç¹æ®ãªã±ãŒã¹ããããŸãã èå³ãããå Žåã詳现ã«ã€ããŠã¯Kotlinã®ããã¥ã¡ã³ããåç §ããŠãã ããã
ã=ãèšå·ã§å®çŸ©ãããé¢æ°ã«ããå€ã®æ»ãã¯ã次ã®ããã«åæ§ã«æ©èœããŸãã
override fun getCount() = data.size()
æååãã¿ãŒã³
èªã¿åããé£ãããæé©ã§ãªããã€ãã³ãŒããäžããé·ãæååãåãé€ãããã«ãKotlin'eã§æååãã³ãã¬ãŒãã䜿çšãããŸãã
setMessage(" $projectToDelete?")
ããã§ãprojectToDeleteã¯æååå€æ°ã§ãã ãã®ãããªãã¿ãŒã³ã®æ§æã¯ãããšãã°UNIXã§ç°å¢å€æ°ãæ±ã£ãŠãã人ãªã誰ã§ãç¥ã£ãŠããŸãã ç¹ã«äŸ¿å©ãªã®ã¯ãããã¹ããšå€ãã®å€æ°ã®å€ã§æ§æãããæååçšã®ãã³ãã¬ãŒãã§ãããæžåŒèšå®ãå¯èœã§ãã
secondsSpent.setText("${format("%02d", hours)}:${format("%02d",minutes)}:${format("%02d", seconds)}")
ã¡ãªã¿ã«ãèå³æ·±ã話ããã©ãŒããããæãä»ããŸãããKotlinã®Stringã®ã¿ã€ãã¯ç¬èªã®ãã®ã§ããã ãã©ãŒãããã¡ãœããã¯ãããŸããããããã£ãŠã java.lang.String.formatãæ瀺çã«ã€ã³ããŒããããã®ããã«åç §ããå¿ èŠããããŸããã é©ãã¹ãããšã«ããšããã§ãJavaãŸãã¯Kotlin'eã«ã¯ãç§ã®æŽæ°ããã©ãŒãããæååã«å€æããsecondsToHumanReadableStringã¡ãœããããŸã ãããŸããã
HHïŒMMïŒSSã
ãã€ããš
è€æ°éžæã®å Žå ãããã³ã¡ãœãããšããããã£ã®åŒã³åºããæžããå Žåã«äœ¿çšãããšéåžžã«äŸ¿å©ã§ããã©ã¡ããAndroidçšã®å°ããªã¢ããªã±ãŒã·ã§ã³ã§ãååã§ãã ç§ã®å Žåãããã¯èªã¿ãããã³ãŒããæäŸããŸãããäŸãã°ïŒ
with (alert) { setPositiveButton("") { dialog, whichButton -> ... ... } setNegativeButton("") { dialog, whichButton -> } // "" create() show() }
ã䜿çšããªãå Žåã alert.setPositiveButtonãalert.setNegativeButtonãalert.createãalert.showã¯å€æããŸãã èªã¿ããããåäžããå ŽåïŒ
when (item.status) { "active" -> { item.status = "inactive" ... ... } "inactive" -> { item.status = "active" ... ... } }
Gradleã§ã³ã³ãã€ã«ãã
build.gradleãæã§äœæããããIDEãªãã§gradleã§ãããžã§ã¯ãããã«ããããããå Žåã¯ã Kotlinlang.org㧠å人ãgradle ãKotlinãAndroidã«ããæ¹æ³ãèªãã§ãã ãã ã
Android StudioãŠãŒã¶ãŒã«ãã®ãããªåé¡ããããã©ããã¯ããããŸããããGradleã§äœæ¥ããŠããIntelliJ IDEAã«ç²ŸéããŠãã人ã«ãšã£ãŠã¯ããããã°ã§ã¯ãªããªãªãŒã¹çšã«.apkãã¢ã»ã³ãã«ããæ¹æ³ãåé¡ã«ãªãå ŽåããããŸãã
ãã®ãããIDEAã«ã¯Gradleãã©ã°ã€ã³ããããå³åŽã®ã¿ããã¯ãªãã¯ãããšéããŸãã
ããã©ã«ãã§ã¯ãIDEAã¯* -debug-unsigned.apkãåéããŸã ã Google Playã«çœ®ãããšãã§ããªããã®ã * -release-signed.apkã«ããã«ã¯ã眲åããŒãçæããŠããŒã¹ãã¢ã«é 眮ãããããžã§ã¯ãã®build.gradleã«æ°è¡ãå ¥åããŠãGradleãããŒãååŸããå Žæãç¥ãå¿ èŠããããŸãã ãªãªãŒã¹ããã«ãããã«ã¯ãGradleãŠã£ã³ããŠã§assembleReleaseã¿ã¹ã¯ãããã«ã¯ãªãã¯ããŠéžæããŸãã
ããŒãäœæããŠã¢ããªã±ãŒã·ã§ã³ã«çœ²åããæ¹æ³ã«ã€ããŠæ¢ã«ç¥ã£ãŠããããstackoverflowã§è©³çŽ°ãèªãããšãã§ããŸã ã
ã泚æ
æè¿ãJekyll + Githubã§ãã¹ããããKotlin kotlinlang.orgã«é¢ããæ°ãããµã€ããéããŸããã ãã®æ±ºå®ãè¯ãããšããããæè¿Habréã§ãã§ã«æžããŠããŸãã
èšäºã§ããã€ãã®ã³ãŒãäŸãèŠæ ãããããã° ãããã¯KotlinããŒã ã§åããŠããNatalya Ukhorskayaã®ééããªãã¡ãªããã§ãã Natashaã«ã¯ããã®èšäºãçããªããã³ãŒããå€å žçãªKotlinã«äŒŒãŠããªããšããã¢ããã€ã¹ããªãã£ãããšã«éåžžã«æè¬ããŠããŸãã
ããŒãã§ã³ããªã³ã䜿çšããŠç¯çŽããæéãéããããšãã§ããã°ãç§ãã¡ã¯ãšãŠã幞ãã§ãã å€ã®è¯ã
07/31 / 14ã18 ïŒ 55ããã®UPD ïŒäžéšã®çšèªãšæèšãä¿®æ£ãããŸããã