kotlin可以开发什么,kotlin教程
kotlin可以开发什么,kotlin教程详细介绍
本文目录一览: 如何用kotlin开发同时支持iOS和Android的库
虽说kotlin-native可以支持链接到c,java,objective-c等语言,甚至可以进行原生开发,但是在使用的过程中并不友好,配置繁琐且api相对生硬。那么,我们能用kotlin做些什么来减少开发成本呢? 通过kotlin构建库不失为一个好办法,可以将iOS和安卓共有的参数、model和通用方法用kotlin写成库,并分别打包给两个平台使用,在未来应该是一个可行性的方案。
由于现在kotlin-native还是没有推出正式版,不建议马上通过这种方式来开发项目,这里只是给未来的开发提供了一种可能性。
下面就介绍一下怎么用kotlin来开发一个支持两个平台的库:
一、在idea中打开 File -> New -> Project
二、在侧边栏选择gradle并取消勾选java
三、设置项目的GroupId、artifactId、 Version信息
四、选择gradle环境,如果选择本地的配置,可以省去配置的时间
五、配置项目名称和存放的路径,并Finish
在根目录新建一个名为src的文件夹,并在里面按照java开发的方式添加package:com.leacode.model
新建名为base.kt文件
修改build.gradle
然后用命令行进入项目的目录下并执行
就会在项目根目录的 build/libs文件夹下生成名为 leacode.kotlin-1.0-SNAPSHOT.jar
可以用于导入安卓项目使用
修改build.gradle
然后执行
就会在build/konan/bin/iphone目录下生成一个名为Base.framework的文件
可以用于导入ios项目中使用
开发iOS应用,Kotlin Native是否够格?
很高兴回答你的问题。
一直以来,ios的开发语言都相对比较单一,要么是swift,要么就是object-c,这样的情况对于ios开发人员来说,还是比较友好的,没有那么多的语言要学习,专心研究一门语言就可以了,可是在KotlinConf 大会宣布了 Kotlin 1.2 RC 版,并宣布 Kotlin/Native 已支持用于开发 iOS 应用和 Web 应用开发。这也将是 Kotlin/Native 0.4 的特性之一。虽然对 iOS 开发的支持仍处于早期阶段,但确实已经实现了,这是在所有平台上使用 Kotlin 进行开发的重要一步。官方还特意展示了利用 Kotlin/Native 开发的两款应用,它们都可以运行于 iOS 和 Android 平台。Android 和 iOS 平台共享了不少代码,其中包括大多数图形处理、声音播放和用户输入响应代码。而且IDEA也已经支持Kotlin/Native了,对于Kotlin/Native是否能够胜任ios的开发,我觉得应该从以下几点来看。
1、性能
现在移动端的开发,很注重的就是用户体验以及产品的性能,Kotlin/Native作为一个新生的语言,在性能这一块,还有待考究。
2、技术成熟性
现在的Kotlin/Native在技术方面感觉尚未成熟,想要撼动swift或者object-c的地位,可能还需要一段时间,就像kotlin,虽然官方已经宣布将kotlin作为Android开发的官方语言,可是,这么久过去了,还是没能取代Java。
3、实际的开发体验
因为我没有用过Kotlin/Native开发ios,但是,在Android平台上面,很多的程序员抛弃Java投奔向kotlin,但是使用了一段时间后,又转过头来使用Java,这便是在实际的开发过程中,很多程序员觉得kotlin并没有想象中的那么好,转而又开始使用Java。
如果以上三点,Kotlin/Native都做的很好了,那么ios的开发市场,应该就会被Kotlin/Native给占据了,各位有什么看法,欢迎评论。
以上便是我对开发iOS应用,Kotlin Native是否够格?问题的回答,如果您觉得有道理,请点赞,关注,支持我,谢谢。
只要符合业务需求它就是够格的,但是要做出优质的app还是得用原生的语言,其他的或多或少都会有性能的损耗,除非该框架已经非常成熟!
kotlin教程
1、Kotlin是一门很新的编程语言,由JetBrains公司开发,JetBrains估计大部分开发者都认识,是专业开发IDE的,旗下的PyCharm和IDEA都是现在很热门的编辑器。2、Kotlin的来历:Java代码臃肿,开发效率不够高,JetBrains开发的kotlin,目的是兼容并替代java,可以运行在jvm上,而且语法简洁,可以大量降低程序员的工作量。3、主要时间线:kotlin是2010年推出,2011年开源,谷歌在2017年I/O大会宣布,kotlin成为安卓支持的一级官方语言,Android-Studio3.0正式支持kotlin(此前版本可以通过安装插件实现支持)。4、开源:kotlin是通过Apache协议开源的,Apache是一个非盈利的开源组织,可以下载kotlin的源码进行深入研究。5、可以运行在jvm,100%兼容java:java曾经占开发语言的三分一活跃度,曾经用java写的功能,累计下来已经不计其数,kotlin可以兼容java,说明即使用kotlin作为开发语言,也可以调用以前用java写的程序。
android kotlin anko怎么用
Kotlin是由JetBrains开发并且开源的静态类型JVM语言。比Java语言语法简洁,支持很多Java中不支持的语法特性,如高阶函数、内联函数、null安全、灵活扩展、操作符重载等等。而且它还完全兼容Java,与Scala类似,但是Scala的宗旨是“尽可能自己实现,不得已才使用Java”,而Kotlin却相反:“尽可能复用Java的实现,不得已才自己实现”。所以相比之下Kotlin更简洁轻量,非常适合移动端的开发。另外JetBrains针对Android开发提供了一个由Kotlin实现的“anko”开源库,可以让你使用DSL的方式直接用代码编写UI,让你从繁琐的xml中解脱出来,而且避免了xml解析过程所带来的性能问题。
这篇先讲怎么去使用idea(Android Studio用户也一样)搭建Kotlin的Android开发环境。
一、下载以下相关idea插件:
1. Kotlin
2. Kotlin Extensions For Android
3. Anko DSL Preview
其中Anko DSL Preview插件用于预览使用DSL编写的UI代码,就像以前使用xml编写UI文件时可以动态在“Preview”窗口预览效果一样。
二、新建Android项目
在src/main目录下,新建kotlin目录(用于放置kotlin代码),配置Gradle如下:
1 buildscript {
2 ext.kotlin_version = '0.12.1230'
3 repositories {
4 mavenCentral()
5 }
6 dependencies {
7 classpath 'com.android.tools.build:gradle:1.1.1'
8 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
9 classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
10 }
11 }
12 apply plugin: 'com.android.application'
13 apply plugin: 'kotlin-android'
14
15 repositories {
16 mavenCentral()
17 }
18
19 android {
20 compileSdkVersion 22
21 buildToolsVersion "22.0.1"
22
23 defaultConfig {
24 applicationId "com.wangjie.androidwithkotlin"
25 minSdkVersion 9
26 targetSdkVersion 22
27 versionCode 1
28 versionName "1.0"
29 }
30
31 sourceSets {
32 main.java.srcDirs += 'src/main/kotlin'
33 }
34
35 buildTypes {
36 release {
37 minifyEnabled false
38 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
39 }
40 }
41 }
42
43 dependencies {
44 compile fileTree(dir: 'libs', include: ['*.jar'])
45 compile 'com.android.support:appcompat-v7:22.2.0'
46 compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
47 compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
48 compile 'org.jetbrains.anko:anko:0.6.3-15'
49 }
android除了用java还能用其他语言开发吗
可以,不过主流语言就是java,以下我提供几种 其他语言。
1:kotlin ,jet brain 公司 主导研发的语言,不过他也是依赖java的 jvm 的。
2:c#
3:html + js。
不过综上,现在java 还是主流,也是用起来最native的,体验最好,推荐用java + kotlin
,当然也可以纯kotlin开发。
使用一些其他的平台,就是html来开发页面,就是加一个壳
2007年Android 刚刚出生的时候, 看到开发语言是Java ,深圳安卓培训(sz.android.tedu.cn)专家很高兴, 因为想在手机端编程的话不用去学Objective-C这个看起来怪怪的语言了,但另一方面深圳安卓培训专家心里也是打了个大大的问号 :因为在很多人眼里,Java是很慢的,用Java来开发手机端的应用, 尤其是游戏, 到底行不行?
Android 为什么选择了Java
事实证明,用Java来开发应用完全没有问题, Android 这八九年的发展超出了所有的人预料, 在智能手机端的占有率高达80%。
一个好玩的现象是:这些年大家似乎并不太关注应用程序的性能, 相反关注的是手机的性能, 小米倡导的跑分文化流行一时, 大家拼命的堆砌硬件, CPU从双核,4核 到8核 , RAM 从1G 到2G,3G, 4G, 6G... , ROM从4G 到8G,16G,32G,64G, 甚至128G。
Google 在刚刚发布Android的时候绝对想不到现在的手机性能会过剩成这个样子, 那他们当时为什么选择了Java 作为应用开发语言呢?
想象一下,如果你是当时的负责人, 需要作出决断, 你会怎么选择?
首先看看C语言, 简单灵活, 贴近硬件, 性能极佳, 指针异常灵活, 是开发系统软件的不二之选, 但是Android要讨好的是无数的应用程序开发者, 如果让他们用C语言去写界面程序, 非累得吐血不可。
那C++是不是好一点? 从C发展而来,面向对象, 性能好,类库也不少,在游戏领域也取得了成功。
拜托,这个语言复杂到了令人发指的地步, 也没有摆脱C的指针和内存管理的陷阱, 就别去折腾程序员了。
另外可移植性也是非常重要的考虑因素, 相比电脑,手机平台更加多样化,如果用C或者C++ , 把移植的工作交给程序员做, 一定会被骂死。
C# 怎么样? 看起来不错, 但这是微软平台的东西, 而微软是Google的死对头, 再说了Android 肯定是要开源的, 就不用考虑C#了吧。
Lisp ? 强大的令人发指, 学习曲线之陡峭也令人发指, 不改变编程思维是学不好的, 能用Lisp编程的人都是黑客, 为了吸引广大屌丝, 果断放弃!
Smalltalk ? 估计会的人也不多了。
有人说Javascript , 这们只是运行在浏览器中的语言, 而我们要的是能开发原生(Native)应用的语言!
Ruby 呢? 简洁优雅, 别的语言都是对机器友好, 要充分的压榨机器的性能, Ruby 可是号称对程序员最友好的语言啊。
其实Ruby 各个方面都很好, 除了致命的一个因素: 太慢 ! 这一点就把Ruby 排除在外了。
剩下的知名度较高的高级语言也就剩下Python 和 Java 了。
Python 性能还行, 用的人不少, 也能跨平台。
Java 语言非常成熟,性能也可以(当然得优化一下), 用的人超级多(全球号称有1000万) , 能把1/10的人拉进来做Android开发那就非常不得了, 社区更加成熟, 跨平台更是java 的招牌。
Android主流开发语言是Java,但也可以使用其他语言进行开发,具体如下所示
1.C、C++ 底层开发,需要集成NDK,如android视频播放器弹幕的开发,就是使用C++开发的。
2.部分web app或者游戏开发,可以使用HTML5,当然在android webview中也可使用HTML、CSS样式和javascript展示更好的效果。
3.如需重新对android源码进行编译,深度优化,则需要使用到linux 命令进行操作,简单的例子在调用 android 静默安装时,则需要代码中使用shell 命令。
程序员需要掌握哪些开发框架和语言?
一般情况下,java编程开发程序员都掌握了许多的编程开发工具和框架来辅助项目工作。今天我们就一起来了解一下,对于java程序员来说有哪些好用的编程框架语言。
Kotlin是JVM上比较新的语言之一,来自IntelliJ开发商JetBrains。它是一种静态类型语言,旨在提供一种混合OO和FP的编程风格。Kotlin编译器生成的字节码与JVM兼容,可以在JVM上运行及与现有的库互操作。2017年,谷歌支持将其用于Android开发,Kotlin获得了重大突破。
JetBrains有一个明确的目标:让Kotlin成为一种多平台语言,并提供Java互操作性。Kotlin近的成功和成熟水平为它进入服务器端提供了一个很好的机会。
选择Kotlin的理由
许多语言都试图成为更好的Java。Kotlin在语言和生态系统方面做得都很好。成为更好的Java,同时又要保护JVM和巨大的库空间,这是一场姗姗来迟的进化。这种方法与来自JetBrains和谷歌的支持相结合,使它成为一个真正的竞争者。让我们来看看Kotlin带来的一些特性。
类型推断——类型推断是一等特性。Kotlin推断变量的类型,而不需要显式指定。在需要明确类型的情况下,也可以指定类型。
通过引入var关键字,Java10也在朝着类似的方向发展。虽然表面看起来类似,但它的范围仅限于局部变量,不能用于字段和方法签名。
严格空检查——Kotlin将可空代码流视为编译时错误。它提供了额外的语法来处理空检查。值得注意的是,它提供了链式调用中的NPE保护。
与Java互操作——Kotlin在这方面明显优于其他JVM语言。它可以与Java无缝地交互。可以在Kotlin中导入框架中的Java类并使用,反之亦然。值得注意的是,Kotlin集合可以与Java集合互操作。
不变性——Kotlin鼓励使用不可变的数据结构。常用的数据结构(Set/List/Map)是不可变的,除非显式地声明为可变的。变量也被指定为不可变(val)和可变(var)。昌平镇北大青鸟发现所有这些变化对状态可管理性的影响是显而易见的。
简洁而富有表达力的语法——Kotlin引入了许多改进,这些改进对代码的可读性产生了重大影响。
不学Flutter,我们来用Kotlin KMM跨平台吧
官方推荐有三种不同的方法来组织团队在多平台库上的工作方式:
我觉得 1 比较适合,当然大公司 3 也适合,毕竟跨平台的共享模块是 kotlin 语言开发的。
在我们的 shared 里面,当然这个名字是我自己起的,androidApp 和 iosApp 也是可以自己起。我们看看新建一个 KMM 工程是什么样子。
Finish 就可以看到我们上述的文件界面了。
感觉还是不错的,而且和 flutter 和 RN 走的路线也不太一样。KMM 的当前的方式更多的是可以将一些逻辑层统一,比如 MVP 中的 M和 P 层,V 层还是可以让各端实现,当然如果强行在 KMM模块实现也是可以的。
但是现在 KMM 还不够成熟,也存在一些未知问题,不过我决定 开始大胆在项目中使用 。
Kotlin相比于Java,功能到底上强在哪儿
Kotlin语言相对Java有很多优势,比如官网介绍的简洁、安全,例子见Kotlin中文站首页,部分示例解析见下文。Kotlin具有现代(也有称下一代的)静态编程语言的很多特点,如类型推断、多范式支持、可空性表达、扩展函数、DSL支持等。另外对于安卓开发还提供了Kotlin安卓扩展和Anko库,参见Kotlin用于Android。关于与Java互操作,尤其是Java调用Kotlin是大家普遍觉得坑的地方,除了默认final外,还有一个主要原因应该就是名字修饰,解决方式可以按照它修饰后名字去引用,或者在Kotlin端使用@JvmName注解来生成便于Java使用的名字。具体参见Java中调用Kotlin
如何学习Kotlin编程语言
这语言听说bug很多
csdn有很多kotlin的资料
为什么说 Kotlin 是优秀的
本文不会像一般介绍语言的文章那样,一开头就罗列出语言那些酷炫的特性,我们稍后再来探讨这些内容。
首先我将介绍一些其它的信息,因为2013 年一项研究显示,当开发者评估一种编程语言时生态系统要比语言特性更重要。这符合我个人的经验,下面就让我开始介绍吧:
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 等方法,大概有 50 行代码。然后我将它转换成 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(修改:2015 年 10 月:M13 版本的转换工具已经可以正确地处理 Java 8 的特性了)。由它转换而成的代码并不总是最好的写法,但是 JetBrains 为这个工具付出了大量努力,它已经是我用过的语言转换工具中最好的了。所以我并不太担心这个问题,这个转换器正在迅速的改进中,变得越来越成熟。
你会遇到编译器错误。尽管我的程序并不大,但还是会发生无法编译的情况,甚至错误的编译结果。诊断这些问题并不难,但终归还是影响了开发的体验。
你会遇到 IDE 内部错误。当这个错误发生时,IntelliJ IDE 会弹出一个悬浮窗口,附带向 JetBrains 报告的选项。大部分错误无需理会,不过依然会使人厌烦。
偶尔会出现无法加载提示文档的错误(修改:M14 版本发布后,这个问题已被修复)
目前 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 交互中,这种想法是好的,但有时考虑并太周全。(修改: 从 M13 版本开始,在 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 机制,稳健的管理器以及可靠的分析工具。
过去 15 年或者更长时间里,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 这门新语言进入这个世界瞧瞧。