1.Kotlin 一个很厉害的源码 DSL 写法
2.å¦ä½å¦ä¹ Kotlinç¼ç¨è¯è¨
Kotlin 一个很厉害的 DSL 写法
好久没写博客了,今天发几个最近在各个地方看到的源码一些碉堡了的 Kotlin DSL。
本文先介绍一种 DSL 写法,源码再推荐几个 DSL 项目。源码
超厉害的源码 DSL
之前在 KotlinTest 上看到一个很牛逼的写法(我把 README 里的实例改了下):
这其中涉及了好几个 DSL 要素。我一一列举:
字符串后面跟一个代码块
这个东西的源码激光振镜运动控制源码原理你只要看了源码就知道了,很简单,源码但是源码你不看就是想不到(这也是我厨 Kotlin 的原因之一,它很简单,源码 但是源码可以玩出很多花样来)。
就这样你可以利用这个 extension 写出字符串后面跟一个代码块的源码 DSL 。 此处使用的源码语言特性有:
明白了吧。
使用
举个例子,源码站大师源码把他作为一个 URL 的源码 utility :
表格字面量
就是形如
这样的东西(上面的代码纯粹搞起耍,请不要在意)。源码
这个就更简单了我觉得你们应该都知道:
无非就是变长参数。
形如 "(+ 1 1)" shouldBe 2 的测试
这个也很简单,我在小标题里写的就是我在 lice 里使用的测试。
首先,交友棋牌源码假定我们有以下测试:
我们希望写成:
很简单,可以有:
就是一个中缀表达式而已。这有什么难的?
一些特定情况
我给我的 lice 写的测试中直接把运行字符串的那一步给包含进去了:
看到没有,运行 lice 代码就是这么简单,还能返回最后一个表达式的值 (喂
注意事项
任何长得类似这样的 DSL 都有一个缺点,就是币平台源码缩进膨胀(字面意思)。 Scala 为了解决这个问题, 推荐用户使用 Tab size 2 的缩进(喂。 于是我也建议读者使用 2 空格缩进。
几个厉害的 DSL 项目
根据推荐程度排序:
Anko
传送门,不说了,最强的量子派源码 Kotlin DSL 框架,想必大家早已有所耳闻:
厉害吧。这个框架是用于 Android 的,用于描述 UI 。有一点要说一下,现在的预览插件挂了。
弹窗:
还有一些非 UI 的吊炸天的代码块,比如异步:
两个基于 Swing 的 DSLGensokyo
传送门,一个刚出来的项目,它长这样:
Swing 其实没那么垃圾,只要配上 DSL ,啥 GUI 代码都变得好看了。
FriceEngine DSL
这是我之前弄的那个游戏引擎的 DSL 系统, 传送门,它长这样:
我自己觉得做的还不错。我还为它搞了个中文版,比较粗鄙,用于讽刺中文编程,请前往同项目的 README 查看。
官方教程里的 HTML DSL
传送门,它长这样:
这代码也是我从 README 里面改过的,原文太瘦了,我改的胖一点。
官方给的例子,非常给力(当时也是看这个的源码搞懂了 anko 的原理)。
JavaFX DSL
传送门,它长这样:
我个人觉得很不错了已经。
嘛。祝大家玩 Kotlin 开心。
å¦ä½å¦ä¹ Kotlinç¼ç¨è¯è¨
为ä»ä¹è¯´ Kotlin æ¯ä¼ç§ç
æ¬æä¸ä¼åä¸è¬ä»ç»è¯è¨çæç« é£æ ·ï¼ä¸å¼å¤´å°±ç½ååºè¯è¨é£äºé ·ç«çç¹æ§ï¼æ们ç¨ååæ¥æ¢è®¨è¿äºå 容ã
é¦å æå°ä»ç»ä¸äºå ¶å®çä¿¡æ¯ï¼å 为 å¹´ä¸é¡¹ç 究æ¾ç¤ºï¼å½å¼åè è¯ä¼°ä¸ç§ç¼ç¨è¯è¨æ¶çæç³»ç»è¦æ¯è¯è¨ç¹æ§æ´éè¦ãè¿ç¬¦åæ个人çç»éªï¼ä¸é¢å°±è®©æå¼å§ä»ç»å§ï¼
Kotlin 被ç¼è¯æ JVM åèç æè JavaScript 代ç ãJava å¼åè å°ä¼æ¯å¯¹å®ææå ´è¶£ç人ï¼ä¸è¿å¯¹äºä½¿ç¨åå¾æ¶éè¿è¡æ¶è¯è¨çå¼åè èè¨å®ä¹å ·æä¸å®çå¸å¼åï¼æ¯å¦ ScalaãGoãPythonãRuby å JavaScript çè¯è¨ã
Kotlin æ¥èªä¸çï¼èä¸æ¯å¦æ¯çãå®è§£å³äºå¼åè ç°ä»é¢ä¸´çå®é é®é¢ãä¾å¦å®çç±»åç³»ç»å¯ä»¥å¸®å©ä½ é¿å 空æéå¼å¸¸ã
åæ¢å° Kotlin æ éææ¬ï¼å®æ¯å¼æºçä½è¿ä¸æ¯éç¹ï¼éç¹æ¯å®æä¾äºä¸ä¸ªé«è´¨éçä¸é®ä» Java 转æ¢å° Kotlin çå·¥å ·ï¼å¹¶ä¸ååå ³æ³¨ Java äºè¿å¶æ件çå ¼å®¹æ§ãä½ å¯ä»¥å°ç°æ Java 项ç®çä¸æ¬¡æ§è½¬æ¢æ Kotlin 项ç®ï¼è该项ç®ä»å°å¯ä»¥æ£å¸¸ç¼è¯ï¼å³ä½¿è¿æ¯ä¸ä¸ªå å«ä¸ç¾ä¸è¡ä»£ç çå¤æç¨åºã
æ¾ç¶ä½ å¯ä»¥ä»ä¸æå¾ç¥ï¼Kotlin ç¨åºè½å¤ä½¿ç¨ææç°åç Java æ¡æ¶ååºï¼çè³é£äºä¾èµæ³¨è§£å¤ççé«çº§æ¡æ¶ãå®ä»¬ä¹é´ç交äºæ¯æ ç¼çï¼ä¸éè¦å è£ æè éé å±ãKotlin å¯ä»¥æ´å Mavenï¼Gradle 以åå ¶å®æ建系ç»ã
å®ååå¹³æè¿äººï¼è¯æ³ç²¾ç¼ç´è§ï¼ä» ä» æ¯é 读è¯è¨åèææ¡£å 个å°æ¶å°±è½å¦ä¼ä½¿ç¨ãKotlin çèµ·æ¥ååå Scala ä½æ¯æ´å ç®æ´å¹¶ä¸å ¼é¡¾äºå¯è¯»æ§ã
å®ä¸éµå¾ªç¹å®çç¼ç¨å²å¦ï¼ä¾å¦æ度çå½æ°å¼ç¼ç¨æè é¢å对象ç¼ç¨é£æ ¼ã
å®ä¸ä¼å¢å è¿è¡æ¶çå¼éãKotlin çæ ååºååå°å·§ç´§åï¼ä¸æ³¨äºæ©å± Java æ ååºï¼ç¼è¯é¶æ®µç大éå èæä½æå³å map/filter/reduce ç管éç»æå½æ°å°è¢«ç¼è¯æ类似äºå½ä»¤å¼è¯è¨ç代ç ã
Anko ä¸ Kovenant çæ¡æ¶çåºç°æå³çå¨ Android å¼åè ä¸ Kotlin å¼å§åå¾æµè¡èµ·æ¥ãå¦æä½ æ£å¨ä»äº Android ç¸å ³çå·¥ä½ï¼ç¸ä¿¡ä½ å¾å¿«å°±ä¼è·å¾å¥½çå·¥ä½ãä½ å¯ä»¥é 读è¿ä»½ Square å ¬å¸å¼åè JakeWharton çæ¥åï¼äºè§£ç¨ Kotlin è¿è¡ Android å¼åçä½éªã
Kotlin å è®¸ä½ ç»§ç»ä½¿ç¨ä½ çå·¥ä½æçæåå·¥å ·ãIntelliJ ç IDE 对 Kotlin çæ¯æååå®åï¼ä½ å¯ä»¥å¯¹ä»£ç è¿è¡éæãæç´¢ã导èªä»¥å使ç¨èªå¨å®æï¼èä¸ IDE å åæ¯æè°è¯ãåå æµè¯ãæ§è½åæççåè½ã
é¤äº Androidï¼æ认为 Kotlin è¿é常éç¨äºä¼ä¸ä¸ Java çåºç¨åºæ¯ãå¦æä½ çå·¥ä½æ¯æ´å¤©å头äºå¤§å ¬å¸ç代ç åºä¸ï¼é£ä¹å½ Kotlin 1.0 çæ¬æ£å¼åå¸æ¶ä½ åºè¯¥å°½å¿«å»äºè§£ä¸ä¸ï¼
ç±ç¥åå ¬å¸ä¸ºå®æä¾å¼ºå¤§çåä¸æ¯æã JetBrains è¿å®¶å ¬å¸ æä¸ä¸ªé«åº¦ç§°èç大å¢éè´åäºè¯¥é¡¹ç®ï¼æ稳å®çåä¸æ¨¡å¼çè³å¨èªå·±çé¨åæè°äº§åä¸ä½¿ç¨ Kotlinï¼è¿è¡¨æçæå Kotlin ä¸ä¼è¢«æ¾å¼ã
ä½¿ç¨ Kotlin é£é©è¾ä½ï¼å¯ä»¥ç±ä¸ä¸¤ä¸ªæå ´è¶£çå¢éæåå¨é¡¹ç®ä¸å°èå´çè¯éª Kotlinï¼è¿å¹¶ä¸ä¼æ°ä¹±ä½ ç项ç®ï¼å 为 Kotlin ç类对å¤æä¾ç Java API çèµ·æ¥å°±ä¸æ®éç Java 代ç ä¸æ ·ã
å 为 Kotlin åå注éè¯æ³çå¯è¯»æ§ï¼ä»£ç 审æ¥ä¸ä¼æ为é®é¢ï¼å¯¹ Kotlin ä¸çæçå¢éæåä»ç¶è½å¤å®æ该工ä½ã
Kotlin åºäº Java 6ï¼æ以åå¦ä½ é¾ä»¥å¨é¡¹ç®ä¸å级使ç¨æ°çæ¬ç JVMï¼ä½ å¯ä»¥ä½¿ç¨ Kotlinã
ä»å¹´æ©äºæ¶åæå Swiss Re è¿å®¶ç士åä¿é©å ¬å¸çå¢éï¼ä»ä»¬ä½¿ç¨ Java å .NETï¼å±ç¤ºäº Kotlinãé¦å æå®ä¹äºä¸ä¸ªç®åç Java ç±»å å«ä¸äºå段以å toStringãequalsãhashCode çæ¹æ³ï¼å¤§æ¦æ è¡ä»£ç ãç¶åæå°å®è½¬æ¢æ Kotlin 代ç ï¼å¤§é¨åæ¯èªå¨å®æçï¼ï¼ç»æä» å© 1 è¡ä»£ç ï¼æ¥çæè¿æ¼ç¤ºäºå ¶å®èçæ¶é´çç¹æ§ãä»ä»¬çè¿å对 Kotlin å 满äºçæ 并ä¸è®¤ä¸º Kotlin æ¯å®ä»¬é¡¹ç®ä¸ C# è¯è¨çä¸ä¸ªæ½å¨ç«äºå¯¹æã
æ认为 Kotlin æ£ä¸ä¼ä¸ Java å¼åè ç红å¿ï¼æ以尽管 Kotlin æ¯å è´¹çï¼JetBrains è¿æ¯è½å¤éè¿å®å¢å åä¸çæ¬ IDE çéå®æ¥èµå¤§é±ãè¿å°æ¿å±ä»ä»¬æ ¹æ®ç¨æ·çææ¿æç»æ¹è¿å®ã
ä¸æ¤ç¸æ¯ï¼å¯¹äºé£äºç±ä¸ç¸å ³äº§åèµå©çè¯è¨å¼åè æ¥è¯´ï¼å½ç¨æ·éæ±ä¸ä¹åç设计ç念å²çªæ¶ï¼ä»ä»¬å¾å°ä¼å æ¤ä½åºè°æ´ã
ç¹æ§
Kotlin ä½ä¸ºä¸é¨æ°çç¼ç¨è¯è¨è½å¤è±é¢èåºï¼æ¯å 为å®å ³æ³¨çæç³»ç»ï¼JetBrains æå¾ç产åçé«ä½æ´å¤çåå³äºçæç³»ç»èä¸æ¯ä¾¿æ·çè¯æ³ã
尽快å¦æ¤ï¼Kotlin è¿æ¯æ许å¤æç¨çç¹æ§è½è®©ä½ ç¼ç çè¿ç¨åå¾æå¿«ï¼
æ们已ç»æè¿ null å®å ¨ï¼å¯éï¼ï¼å®è½å¤è®©ç¼è¯å¨ç³»ç»çæ è®°æ½å¨ç空æéå¼ç¨ãä¸ä¸äºè¯è¨ä¸åçæ¯å®ä¸æ¶å option ç±»ï¼å æ¤æ¯é¶å¼éçï¼å¹¶ä¸è¿æå ¶å®è¯è¨ç¹æ§ç¡®ä¿å®ä¸ä¼é æä¸ä¾¿ã
ç²¾ç¼çè¯æ³ï¼æ å¤ä¸å¨çç±»åæ¨æãç®åçå½æ°åªéè¦ä¸è¡ãç®åçç»æ以å JavaBeans ä¹åªéè¦ä¸è¡å°±è½å£°æãçæ£çå±æ§ââå¯ä»¥å¨èåèªå¨çæ getFoo/setFoo æ¹æ³ç¨äºä¸ Java è¿è¡äº¤äºãå½æ°å¯ä»¥ç¬ç«åå¨äºç±»ä¹å¤ã
å¼å¸¸å为éæ£æ¥åãï¼è¯è 注ï¼æå ´è¶£çå¯ä»¥é 读ä¸ä¸Java ç论ä¸å®è·µ: å ³äºå¼å¸¸çäºè®ºï¼
ä½¿ç¨ data class å ³é®åå建æ°æ®ç±»ä¼èªå¨çæéç¨æ¹æ³ï¼ä¾å¦ equalsãhashCodeãtoString 以å copy å componentNï¼åæ¶å£°æå¤ä¸ªåéæ¶ä¼è°ç¨è¯¥æ¹æ³ï¼ãè¿å°å¸®å©ä½ å¨ä¸ä½¿ç¨æ建å¨çæ åµä¸ä¾¿æ·çè·å¾ä¸åç±»ï¼immutable classesï¼ã
ä½å¦æä½ éè¦æé å¤æçç»æä½ï¼åå©ç±»åå®å ¨çæ建å¨è¿ä¸ªç¹æ§å¯ä»¥ç®æ´çå®ç°ãå¦æä½ ä½¿ç¨ Google Protocol Buffers æ¥åå¨ç»æåæ°æ®ï¼ éè¿ KBuilders è¿ä¸ªåºä¹è½å¾è½»æåå°ã
æ¯æå½æ°å¼ç¼ç¨ä»¥åé¶å¼éç lambda 表达å¼ï¼è½å¤å¨ Java çéåä¸å MapãFilterãFolder çå¤çãKotlin çç±»åç³»ç»è½å¤èªå¨è¯å«å¯åæè ä¸å¯åçéåã
æ©å±å½æ°ç¹æ§è½å¤è®©ä½ å¨ä¸æ¹å¨æºç çæ åµä¸ä¸ºç±»æ·»å æ¹æ³ãä¹ç¼ä¸ç以为æ¯ä¸ºäºé¿å ååºå FooUtils è¿ç§é£æ ¼å·¥å ·ç±»çè¯æ³ç³ï¼ä¸è¿éç使ç¨çå æ·±ï¼ä½ ä¼è®¤è¯å°å®ä¸ä» è½å¸®ä½ æ´å 容æçéè¿èªå¨å®æ使ç¨æ¹æ³ï¼è¿è½åå©ä½ éæç°æç Java API 以ååå©å ¶å® Kotlin ç¹æ§æ建åè½å¼ºå¤§çæ©å±ã
æ¯æè¿ç®ç¬¦éè½½ï¼ä½æ¯ä¸ä¼å Scala æè Perl é£æ ·åºç°é¾ä»¥ç解ç代ç ãè¿ç®ç¬¦è¢«æ å°æç¸åºååçæ¹æ³ï¼éè¿éåè¿äºæ¹æ³æ¹åè¿ç®ç¬¦çè¡ä¸ºï¼å æ¬å½æ°è°ç¨ï¼ï¼ä½æ¯ä¸è½å®ä¹æ°çè¿ç®ç¬¦ãè¿ä½¿å¾ç¨åºè½å¤å ¼é¡¾åè½ä¸å¯è¯»æ§ã
Kotlin 没æå®æè å ¶å®çæ¹å¼æ¥éå®ä¹è¯è¨ï¼ä½æ¯éè¿è¿äºç²¾å¿è®¾è®¡çç¹æ§è½å¤ä½¿ç¬¬ä¸æ¹åºèªç±ç对å®è¿è¡æ©å±ï¼å®æ¹å¯¹éåç±»è¿è¡çæ©å±ä¹åªæ¯å°è¯çåèå·²ï¼è¯·ç以ä¸ä¾åã
æ³ä½¿ç¨ fibersãactors å Go é£æ ¼ç channelsï¼ä¸ä¸ªå为 Quasar çåºå·²ç»ä¸ºä½ å®ç°äºã
ä½¿ç¨ Markdown æ¿ä»£ HTML æ¥ç¼å API ææ¡£ï¼è¿æ ·ç¼å JavaDocs å¯æ¯ä»¥åèéå¤äºãï¼è¯è 注ï¼JetBrains æä¾äºç¸åºçææ¡£çæå¨ Dokkaï¼
æ´å¥½ç¨çæ³åãå¦æä½ æ²¡æå®å ¨ææ¡æ³ååæ°ä¸ super 以å extends çå«ä¹ï¼å«æ å¿ï¼è¿ä¸æ¯ä½ çéãJava çæ³åç确令人费解ï¼Kotlin 解å³äºè¿ä¸ªé®é¢ã
å§ææ¯ä¸ä¸ªå¤§å®¶é½ç¥éç设计模å¼ï¼Kotlin åçæ¯æå®ã
== è¿ç®ç¬¦çè¡ä¸ºç¬¦åé¢æï¼è¯è 注ï¼ç®åæ¥è¯´ a == b ç¸å½äº a.equals(b)ï¼æ°å¢äº === è¿ç®ç¬¦ï¼ç¨æ¥å¤æè¿ç®ç¬¦ä¸¤è¾¹æ¯å¦æååä¸ä¸ªå¯¹è±¡ï¼
æ³å¿«é便æ·çè¿è¡å¼æ¥ç¼ç¨åï¼å½ç¶ï¼
å符串æå¼âå¯ä»¥ä½¿ç¨è¿æ ·çåæ³å¨å符åä¸ç´æ¥å¼ç¨åé { this.example}â
å½æ°ä¸çåæ°å¯ä»¥æå®é»è®¤å¼ã使ç¨å¯åé¿åº¦ä»¥åéè¿åæ°åä¼ åã
è¿æ许å¤çè°æ´ä¸ä¼åãåå¦ Java ä¸ææäºè®©ä½ è§å¾å°æ°çé®é¢ï¼æç¸ä¿¡ Kotlin ä¸å®å·²ç»æå®å¤ç好äºã
ç°å¨å°±æ¥è¯ç¨ä¸ä¸ï¼
è·å¾å¤ç°ä»£ç¼ç¨è¯è¨ä¸æ ·ï¼Kotlin å¯ä»¥éè¿ç½é¡µæµè§å¨æ¥è¿è¡ä½éªãä¸è¿è·å ¶ä»è¯è¨ä¸ä¸æ ·çæ¯ï¼Kotlin çå®éªç½ç«æä¾äºä¸ä¸ªæçç IDEï¼å æ¬ååºå¾å¿«çèªå¨å®æï¼å®æ¶çåå°ç¼è¯ï¼çè³è¿æå¨çº¿çéæåæï¼
å¨çº¿è¯ç¨ä¸ä¸å§
好äºï¼è®©æ们继ç»æ¥ä¸æ¥çå 容
ç®ååå¨åªäºé®é¢ï¼
çæ´»ä¸æ²¡æä»ä¹æ¯å®ç¾çï¼å æ¬ Kotlinã以ä¸æ¯æå°è¯è¿é¨è¯è¨æ¶éå°çä¸äºé®é¢ã
æ大çé®é¢æ¯ä¸å¤æçï¼å 为 Kotlin ç®åè¿å¤äº Beta é¶æ®µï¼è¿æå³çï¼
æ¯æ´æ°ä¸ä¸ªçæ¬ï¼è¯æ³ãABI 以åæ ååºå°±åä¸æ¬¡ã好æ¶æ¯æ¯è¿äºååé常æ¯è¾å¾®å°ï¼å¯ä»¥åå© IntelliJ IDE æ¥èªå¨åçº§ä½ ç代ç ï¼æ以è¿ä¸ªè¿ç¨å¹¶ä¸ä¼å¤ªéº»ç¦ã
Java-to-Kotlin ç转æ¢å·¥å ·ï¼J2Kï¼è¿æ²¡æå®æãå®å¶å°ä¼å¤§è§æ¨¡çç ´ååé»é»å°æ¦é¤ Java 8 ä¸ç Lambdasï¼ä¿®æ¹ï¼ å¹´ æï¼M çæ¬ç转æ¢å·¥å ·å·²ç»å¯ä»¥æ£ç¡®å°å¤ç Java 8 çç¹æ§äºï¼ãç±å®è½¬æ¢èæç代ç 并ä¸æ»æ¯æ好çåæ³ï¼ä½æ¯ JetBrains 为è¿ä¸ªå·¥å ·ä»åºäºå¤§éåªåï¼å®å·²ç»æ¯æç¨è¿çè¯è¨è½¬æ¢å·¥å ·ä¸æ好çäºãæ以æ并ä¸å¤ªæ å¿è¿ä¸ªé®é¢ï¼è¿ä¸ªè½¬æ¢å¨æ£å¨è¿ éçæ¹è¿ä¸ï¼åå¾è¶æ¥è¶æçã
ä½ ä¼éå°ç¼è¯å¨é误ã尽管æçç¨åºå¹¶ä¸å¤§ï¼ä½è¿æ¯ä¼åçæ æ³ç¼è¯çæ åµï¼çè³é误çç¼è¯ç»æãè¯æè¿äºé®é¢å¹¶ä¸é¾ï¼ä½ç»å½è¿æ¯å½±åäºå¼åçä½éªã
ä½ ä¼éå° IDE å é¨é误ãå½è¿ä¸ªé误åçæ¶ï¼IntelliJ IDE ä¼å¼¹åºä¸ä¸ªæ¬æµ®çªå£ï¼é带å JetBrains æ¥åçé项ã大é¨åé误æ éçä¼ï¼ä¸è¿ä¾ç¶ä¼ä½¿äººåç¦ã
å¶å°ä¼åºç°æ æ³å è½½æ示ææ¡£çé误ï¼ä¿®æ¹ï¼M çæ¬åå¸åï¼è¿ä¸ªé®é¢å·²è¢«ä¿®å¤ï¼
ç®å JetBrains æ£è´åäºå®ååå¸ 1.0 çæ¬èä¸æ¯æ·»å æ°çåè½ï¼æå¾ è¿äºé®é¢è½å¤å¾å°ä¿®å¤ã
第äºä¸ªæéå°çæ¯è¾å¤§çé®é¢æ¯ï¼ææ¶ä¸ Java ç交äºä¼åå°å±éã
ä¸ä¸ªå ¸åç Bug æ¯ Java çç±»åç³»ç»æ æ³é²æ¢ä½ æ¹å Map ä¸ Key çç±»åãæçæ¥è¯´ï¼è¿æ ·æä½åºè¯¥å¯¼è´ç¼è¯å¨æ¥éï¼ä¾å¦ä½¿ç¨ç±»åé误ç Key å é¤å ç´ ãæäº JDK ä¸çéå使ç¨äºæ³åï¼å®ä»¬æäºéè¦æ¹æ³çæ³ååæ°æ¯ Obejctï¼æ以ç¼è¯å¨ä¸ä¼æ示ãå½å¨ IntelliJ IDE ä¸ç¼å Java 代ç æ¶ä¼æéæåæçè¦åï¼ä½æ¯ç®å Kotlin ç¯å¢è¿æ²¡æè¿ä¸ªåè½ãå 为 Kotlin 使ç¨çæ¯ Java çéåæ¡æ¶æ²¡æèªå·±å®ç°ï¼æ以è¿å¯¼è´äºä¸äºç±»åå®å ¨æ¹é¢çé®é¢ï¼æå·²ç»éå°å¥½å 次äºã
ï¼ä¿®æ¹ï¼1.0 Beta çæ¬ä¸è¿ä¸ªé®é¢å·²ç»è§£å³äºï¼Java ä¸éåæ¡æ¶çç±»åå®å ¨ç¼ºé·å¨ Kotlin å·²ç»ä¸å¤åå¨ãååµï¼ï¼
å¦ä¸ä¸ªä¾åæ¯ï¼å½è°ç¨æä½¿ç¨ Java 代ç æ¶ Kotlin ç Null å®å ¨ç¹æ§æ æ³åæ¥ä½ç¨ï¼å¯ä»¥åå©æ³¨è§£å¼¥è¡¥ï¼ãä½ä¸º Kotlin çåå¦è ï¼åå¼å§ä½ å¯è½ä¼å许å¤è°ç¨ Java åºç代ç ï¼ä½æ¯å 为以ä¸çé®é¢å®ä»¬å¹¶æ²¡æä½ æ³è±¡ä¸é£ä¹å¥½ç¨ãè¿ç§æ åµçæ¹ååªè½çå¾ Kotlin 使ç¨äººæ°çå¢é¿ãJetBrains ä¸ç´å¨å°è¯ä½¿ Null å®å ¨ç¹æ§è½ä½ç°å¨ Java 交äºä¸ï¼è¿ç§æ³æ³æ¯å¥½çï¼ä½ææ¶èè并太å¨å ¨ãï¼ä¿®æ¹: ä» M çæ¬å¼å§ï¼å¨ Java 代ç ä¸å°èªå¨ä»¥ @NotNull @Nullable ç注解å®ç° Kotlin ç Null å®å ¨ç¹æ§ï¼
è½ç¶æ以ä¸çé®é¢åå¨ï¼ä½åæ¶ä¹ä½¿å¾æ们è½æ´æµç çä½¿ç¨ Java APIï¼æè§å¾è¿ç§æè¡¡æ¯å¼å¾çï¼åªæ¯å¨å¼åä¸è¦æ³¨æã
å ¶å®éè¦èèçé®é¢:
Kotlin ç社åºè¿æ¯è¾å°ãè½ç¶ç®å没æå¤å° Kotlin çåºå¯ä»¥ä½¿ç¨ï¼ä½æ¯ååä¼ç§ç Java 交äºè½åï¼Kotlin å¯ä»¥ä½¿ç¨ç°ææçç Java åºã
å¦æä½ å欢ç书æ¥å¦ä¹ ï¼é£ä¹ä½ éè¦çå°ä»å¹´æäºæ¶åæè½çå° Kotlin å¼åè åç书ï¼è¯è 注ï¼Kotlin in Actionï¼
纯粹çå½æ°ç¼ç¨é£æ ¼å¼åè å¯è½ä¼è§å¾ç±»åç³»ç»ä¸ç¼ºä¹ä¸äº Scala æ Haskell æ¥æçé«çº§åè½ãå¦æä½ å¯¹ç±»åç³»ç»ä¸äºåè½æ¯è¾çéï¼é£ä¹ Kotlin å¯è½ä¸éåä½ ã
Kotlin è¿è½ç¼è¯æ Javascript 代ç ï¼ä½æ¯æ¯è¾å°ç¨ï¼æ以å¯è½ä¼éå°æ´å¤çé®é¢ï¼è¿æ¯æä»è®ºåä¸å¾å°çå°è±¡ãï¼ä¿®æ¹: ç®å Kotlin çå¼åéå¿å¨äºå®æ 1.0 çæ¬å¹¶ä½¿å ¶ç¨³å®è¿è¡å¨ JVM ä¸ï¼Javascript æ¹é¢çé®é¢å°ä¼å¨ 1.0 åå¸åçæ解å³ï¼
没ææ åçç¼ç¨é£æ ¼æåï¼ç®å Kotlin æä¾äºå¤ç§è¯æ³å¯ä¾éæ©ãä¸å人ååºæ¥ç Kotlin 代ç å¾å¯è½å®å ¨ä¸ä¸æ ·ãè¿ä¸ Go ä¸¥æ ¼çé£æ ¼å½¢æäºé²æç对æ¯ãï¼ä¿®æ¹: Kotlin 1.0 çæ¬å¼å§ï¼ä¸äºçµæ´»çè¯æ³å·²ç»è¢«ç§»é¤äºï¼ä¾å¦ç°å¨éè½½è¿ç®ç¬¦ä»¥åå®ä¹ä¸ç¼å½æ°æ¶å¿ é¡»åå«ä½¿ç¨ operator å infix å ³é®åè¿è¡æ è®°ï¼
Kotlin çç¼è¯é度ç¨ç¨æ ¢äº Javaï¼ä»¥å IntelliJ IDE çæºè½æ示ååºæç¹ç¼æ ¢ï¼ä¸ç®ä¸¥éèä¸æ¯ Scala å¿«å¤äºãï¼ä¿®æ¹ï¼Kotlin 1.0 å¼å§ç¼è¯é度æäºææ¾æåï¼
Kotlin æä¸ä¸ª Eclipse æ件ï¼ä½æ¯å¾ææ¾æ²¡æ IntelliJ ç好ç¨ã
Kotlin å¨æäºæ¹é¢æ¯ Java è¦ä¸¥æ ¼ãå®ä¸ä¼èªå¨å° Int 转æ¢ä¸º Long ç±»åï¼éè¦å¼åè æ¾ç¤ºç转æ¢ãè¿æ¯å 为 Kotlin å ³æ³¨æ£ç¡®æ§åè¯å¾è§£å³ãJava Puzzlersãä¸ä¹¦ä¸æåºçé®é¢ãJetBrains 声称ä»ä»¬å·²ç»æå®ä¸åäºã
Kotlin åºäº Java 6ï¼å æ¤ä¼åå°å®çå±éãKotlin ä¸ C# å¨å¾å¤é¢åé½å¾ç¸ä¼¼çè³æ¯ C# åå¾æ´å¥½ï¼ä½æ¯å®ç¼ºå°ä¸äºåè½ï¼ä¾å¦ Java å¹³å°å°æªæ¯æçæäºæ°æ®ç±»åã
为ä»ä¹åºè¯¥å¼å§èèä½¿ç¨ JVM
æè¿ä¸æ®µæ¶é´æéå°äºå¾å¤ä½¿ç¨å¨æèæ¬è¯è¨ï¼JavaScript æè Go ââ è¯è 注ï¼Go åºè¯¥æ¯éæç¼è¯åè¯è¨ï¼çåä¸å ¬å¸ã
æå¨ Bitcoin Space å·¥ä½çæ¶åï¼ä½¿ç¨å¨æè¯è¨æ¯é常çè¦çäºæ ãå¨è¿äºè¯è¨é没æå®å ¨æ§çç±»åï¼è¿å·²ç»å¯¼è´äºå·¨å¤§çè´§å¸æ失ãGo æ¯è¾å°åºéï¼ä½æ¯å¨åºç¡å±é¢ä¸ç»äººçä½éªä¾ç¶å¾å·®ï¼æ¯å¦è¯´ç¼ºå°å¥½çè°è¯å·¥å ·ï¼å¿«é GC æºå¶ï¼ç¨³å¥ç管çå¨ä»¥åå¯é çåæå·¥å ·ã
è¿å» å¹´æè æ´é¿æ¶é´éï¼Java åå¾è¶æ¥è¶å¥å£®ï¼è¶æ¥è¶åé¿ï¼çè³æè¿åº¦è®¾è®¡ç迹象ï¼è¿äºååå¾å¤§ç¨åº¦ä¸æºäºå®ç声èªãä¼ä¸çº§ Java ç±»çåå PathVariableMapMethodArgumentResolver å°±æ¯ä¾è¯ãå¨å¾é¿ä¸æ®µæ¶é´éæ没æèè JVMï¼æ确信è¿ç§ç¯å¢å¹¶ä¸éåæã
æç»æå 为 Android 被迫åå° Javaï¼åç° Java çå¼åç¯å¢å·²ç»æ¹åäºãè½ç¶ XML ä»ç¶ä¸åæ¶å®çé¢ç¹åºç°å¨åç§åºåï¼ä½æ¯ä¸äºåºç¡åè½ååå®åï¼ä»¤äººå°è±¡æ·±å»ã IntelliJ æ¯æ¯ Eclipse æ´å¿«å¹¶ä¸æ´æºè½ç IDEãMaven ä¸åºç°å°±å¾å°äºè¿ éçåå±ï¼æ¥æ许å¤åæ¬ææ³è¦å ¶å®æ建 / ä¾èµç³»ç»å¢å çåè½ãè¾æ°ç Web æ¡æ¶å Ninja å Play ä»ç±»ä¼¼ Ruby on Rails çæ¡æ¶ä¸å¦å°äºè½»éç®æ´ãæ大éçåºå¯ä¾ä½¿ç¨ã硬件æ§è½åå¾æ´é«ä»¥å JVM åå¾æ´ææçï¼çç转åã
没æçæ£æ¹åçæ¯è¯è¨æ¬èº«ï¼Java 代ç åèµ·æ¥ä¾ç¶æ¯ä»¤äººä¸å¿«çåé¿ã
ç°å¨æäº Kotlinï¼å®å ¨æ éæ¿åç¦»å¼ Java ç°æççæç³»ç»çç¼è¦ãä½ å¯ä»¥ç¼åæ´å¯æ表ç°åç代ç ï¼ä½æ¯å´æ¯èæ¬è¯è¨æ´ç®æ´ï¼åæ¶æ¥ææ´å¥½çæ§è½åæ´å°çé误ã
å¦æä½ å欢 JavaScriptï¼å¯ä»¥å°è¯ Kotlin ç JS å端ï¼æè å¨ Nashorn JS å¼æéè¿è¡ä½ ç°æç代ç ã
æåï¼å¦æä½ å欢 Go è¯è¨æ¯å 为å®å¯ä»¥ç¼è¯ç¬ç«è¿è¡çç¨åºï¼é£ä¹è¯è¯ javapackager å·¥å ·ãKotlin å¨æ¬å°ä¸ºæ¯ä¸ªå¹³å°å建äºæç»å ï¼è¿æå³çå¨ linux ä¸ä¸éè¦ JRE çä¾èµå°±å¯ä»¥ç¬ç«èªä¸»çè·å DEBsï¼linux çå®è£ å ï¼æè å缩å ãå½ç¶ï¼å®æå ä¹åä¸æ¯å个æ件èæ¯å个ç®å½ï¼ä»é¨ç½²çè§åº¦æ¥ç并ä¸é¾æä½ã
ç®èè¨ä¹ï¼å¦æä½ ä¹åå 为ç Java ä¸é¡ºç¼è忽ç¥äº JVM ççæç³»ç»ï¼é£ä¹ä½ åºè¯¥åç Kotlin è¿é¨æ°è¯è¨è¿å ¥è¿ä¸ªä¸çç§ç§ã