Kotlin 一个很厉害的 DSL 写法
好久没写博客了,今天发几个最近在各个地方看到的源码一些碉堡了的 Kotlin DSL。
本文先介绍一种 DSL 写法,源码再推荐几个 DSL 项目。源码
超厉害的源码 DSL
之前在 KotlinTest 上看到一个很牛逼的写法(我把 README 里的实例改了下):
这其中涉及了好几个 DSL 要素。我一一列举:
字符串后面跟一个代码块
这个东西的源码ecshop模板整站源码原理你只要看了源码就知道了,很简单,源码但是源码你不看就是想不到(这也是我厨 Kotlin 的原因之一,它很简单,源码 但是源码可以玩出很多花样来)。
就这样你可以利用这个 extension 写出字符串后面跟一个代码块的源码 DSL 。 此处使用的源码语言特性有:
明白了吧。
使用
举个例子,源码android otto 源码解析把他作为一个 URL 的源码 utility :
表格字面量
就是形如
这样的东西(上面的代码纯粹搞起耍,请不要在意)。源码
这个就更简单了我觉得你们应该都知道:
无非就是变长参数。
形如 "(+ 1 1)" shouldBe 2 的测试
这个也很简单,我在小标题里写的就是我在 lice 里使用的测试。
首先,app小说整站源码假定我们有以下测试:
我们希望写成:
很简单,可以有:
就是一个中缀表达式而已。这有什么难的?
一些特定情况
我给我的 lice 写的测试中直接把运行字符串的那一步给包含进去了:
看到没有,运行 lice 代码就是这么简单,还能返回最后一个表达式的值 (喂
注意事项
任何长得类似这样的 DSL 都有一个缺点,就是原动力cms源码缩进膨胀(字面意思)。 Scala 为了解决这个问题, 推荐用户使用 Tab size 2 的缩进(喂。 于是我也建议读者使用 2 空格缩进。
几个厉害的 DSL 项目
根据推荐程度排序:
Anko
传送门,不说了,最强的c 屏幕笔 源码 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 è¿é¨æ°è¯è¨è¿å ¥è¿ä¸ªä¸çç§ç§ã
2024-11-23 11:59
2024-11-23 11:33
2024-11-23 10:48
2024-11-23 10:44
2024-11-23 09:31