筆記
試用了一下kotlin語言,挺有意思的:一個基於jvm的語言,能夠在jdk6上享用jdk8的lambda、deferred method、stream語法、C#的delegate、類scala語法和類型推斷、ruby的code block 等特性。
以前弄過一段時間的scala,實在無法忍受scala的編譯速度和一次編寫到處編譯的特性(字節碼不兼容)、天書般的APIdoc。不談語法,爲了一些特性,scala把java的集合類都重新實現了一遍----能不用jdk原生的api就不用,這和kotlin剛好相反,基本上是基於jdk的api通過語法糖來做擴展,所以kotlin說自己是簡化版的scala,學習門檻也更低了。
kotlin可以認爲是一個不囉嗦的java,從編譯成javascript的歪路回到重點支持android mobile開發,現在已經被譽爲andorid的swift。支持編譯成javascript之所以被認爲邪路,想想TypeScript、coffeescript、Dartjs、Haxe,kotlin的這個方向對java程序員來說只是一個雞肋。服務器端有scala、groovy,而且kotlin團隊不願意與eclipse xtend團隊合作,本以爲kotlin會逐漸泯然於衆多jvm語言中,沒想到別出心裁切入android移動開發,現在已經被譽爲andorid的swift,相對於java,kotlin提供的語法糖至少能提高20%的效率。
javaer在用jdk8之前,特別是android開發同學應該試試kotlin。我用kotlin開發了一個阿里雲oss上傳工具,整個過程比較順暢。
kotlin的語法點:
https://realm.io/cn/news/droidcon-michael-pardo-kotlin/
官方example:
知乎上的評論
http://www.zhihu.com/question/25289041
和Java代碼互相調用之後在jvm上執行,需要進行maven配置:
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
</pre><pre name="code" class="html"><plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration/>
<executions>
<execution>
<id>compile</id>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
打包成可執行文件:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions> <!--執行器 mvn assembly:assembly-->
<execution>
<id>make-jar</id>
<!--名字任意 -->
<phase>package</phase>
<!-- 綁定到package生命週期階段上 -->
<goals>
<goal>single</goal>
<!-- 只運行一次 -->
</goals>
</execution>
</executions>
<configuration>
<finalName>cdnoss</finalName>
<archive>
<manifest>
<mainClass>com.alipay.dpc.alisis.CdnOssKt</mainClass>
<!-- 你的主類 -->
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<outputDirectory>./</outputDirectory>
<!-- 你的輸出路徑 -->
</configuration>
</plugin>