Mark Platvoet是一名热衷于研究新的编程语言、技术和方法的Java和.NET开发者。最近,他为JetBrains推出的新语言Kotlin所吸引,并于近日撰文介绍了这门颇具生产力的语言。

\\

许多语言似乎都是源于对某种其它语言的厌倦。在Mark看来,Kotlin应该也属于这种情况。不过他觉得,JetBrains的工程师仍然将Java视为一门优秀的语言。只是,Java太成熟了,改进和增加特性比较困难,因为要保持向后兼容。Kotlin所做的工作就是吸取Java和其它语言的经验和教训,并以此为基础进行改进。

\\

Kotlin处理null的方式是Mark最喜欢的特性之一。以下面的Java方法为例:

\\

public void foo(Bar bar) { /*…*/ }\

\\

对于这样一个典型的方法,如果传入的参数为null,那么通常的处理方式是检查输入:

\\

public void foo(Bar bar) { \  if (bar == null) \    throw IllegalArgumentException(); /*…*/\}\

\\

如果调用该方法时传入了null,那么它会抛出异常,并提供有用的信息。但这要到运行的时候才能看到。如果方法定义本身就能明确表达不接受null参数的意图就好了。于是,上述代码可以进一步改进为:

\\

public void foo(@NotNull Bar bar) { \  if (bar == null) \    throw IllegalArgumentException() /*…*/\}\

\\

如此一来,像IntelliJ IDEA这样的工具在检测到调用者可能传入null时就会提醒开发者。这样的代码没错,但就是有点啰嗦。

\\

Kotlin采用了一种不同的null处理方式。它对可空类型和不可空类型作了区分,可空的类型后面会跟一个问号,比如*Bar?*,而*Bar*类型的变量则不可为空。于是,在Kotlin中,上述Java代码就变成了下面这样:

\\

public fun foo(bar : Bar) { /*…*/ }\

\\

Mark认为,Kotlin非常简洁且富有表现力。这从上面的例子可见一斑。Mark还特别指出,他所说的表现力是指代码可以明确的表达开发者的意图,而且有良好的可读性。

\\

Kotlin的互操作性是Mark提到的另一特性。Kotlin与Java的互操作性非常好。开发者可以直接从Kotlin中调用Java代码,而且不需要任何外观模式或其它中间逻辑;从Java调用Kotlin同样简单。Kotlin文件和Java文件可以自由混合。即使是现有的Java项目,也可以利用Kotlin,而那些经过严格测试的核心代码可以保持不变。Kotlin运行在JDK 6上,这将使Android开发者可以利用Java近几年的发展成果,比如Lambda表达式。

\\

无独有偶。开发者Mike Hearn近日也在Medium上发表了一篇赞美Kotlin的文章,题为《为什么Kotlin是我的下一门编程语言》。Mike非常喜欢Kotlin,在未来5到10年中,他可能都会使用这门语言。Mike根据自己的经验将Kotlin的优势总结为如下几点:

\\

  • Kotlin编译成JVM字节码或JavaScript——这不仅会吸引Java开发人员,还会吸引所有使用垃圾收集运行时的开发人员,比如使用Scala、Go、Python、Ruby和JavaScript的开发人员。 \\
  • Kotlin来自业界,而非学术界——它解决了程序员现如今在工作中面临的问题。 \\
  • 采用成本低——JetBrains提供了高质量的转换工具(可以实现Java到Kotlin代码的一键转换),而且特别注重Java二进制兼容性。开发者可以一次仅转换现有Java项目中的一个文件,整个项目仍然可以正常编译。 \\
  • Kotlin程序可以使用所有现有的Java框架和库,并可以集成Maven、Gradle和其它构建系统。 \\
  • 易于学习——Kotlin语法简洁直观,看上去非常像Scala,但更简单。 它不遵循特定的编程哲学,如函数式风格或面向对象风格。 \\
  • 不增加运行时开销——Kotlin标准库非常紧凑,主要包含Java标准库的扩展。 \\
  • 适合Android开发——借助像Anko和Kovenant这样的框架,Kotlin将在Android开人员中流行。 \\
  • IntelliJ对Kotlin提供了良好的支持。 \

Mike的部分观点与Mark不谋而合。此外,Mike还总结了Kotlin的一些优秀特性,感兴趣的读者可以进一步阅读。

\\


感谢郭蕾对本文的审校。

\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群)。

为什么应该学习Kotlin相关推荐

  1. 学习Kotlin(八)其他技术

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  2. 学习Kotlin(七)反射和注解

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  3. 学习Kotlin(六)扩展与委托

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  4. 学习Kotlin(五)函数与Lambda表达式

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  5. 学习Kotlin(四)对象与泛型

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  6. 学习Kotlin(三)类和接口

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  7. 学习Kotlin(二)基本语法

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  8. 学习Kotlin(一)为什么使用Kotlin

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  9. Android 学习Kotlin吗?

    学习Kotlin吗? 转载于:https://www.cnblogs.com/zhujiabin/p/8398185.html

最新文章

  1. svn cleanup失败
  2. Linux 内核中的 cdev_alloc和cdev_add
  3. SRAM BIST技术学习
  4. mysql exp 注入_使用exp进行SQL报错注入
  5. 阿里官宣AI框架大牛贾扬清加盟,任职技术VP
  6. 拖链电缆 机器人电缆_展商推介丨广州兰普电缆提供销售高柔拖链电缆、机器人电缆、控制软电缆及信号屏蔽电缆...
  7. ClientScript.RegisterStartupScript 不起作用
  8. css之input时间控件精确到时分秒
  9. JDK+Eclipse安装
  10. Android图片加载那些事(一)-实现加载手机中的所有图片
  11. JNI引用溢出导致的重启问题分析
  12. 英特尔cpu发布时间表_英特尔公司宣布第九代桌面CPU发售时间:i9 9900K将于10月19日正式发售!...
  13. tibco rv java实例_java – 我不允许使用Tibco Rendezvous确认消息的任何原因?
  14. console接口(console接口定义)
  15. 读《王二的经济学故事》
  16. JS EXCEL表的操作
  17. java基础测试大集合 今天收罗精选一下Java题 适合小白挑战和新手回顾
  18. 抽象类和抽象方法 abstract类和abstract方法
  19. 机房空调漏水原因和常用处理方法
  20. 计算机科技文献中cam,模具加工论文,关于CAD/CAM在高精密模具设计制造中的应用相关参考文献资料-免费论文范文...

热门文章

  1. Net设计模式实例之建造者模式(Builder Pattern)(2)
  2. Unity3D官网教程:Roll-A-Ball实现C#代码,5.X版
  3. 全面梳理关系型数据库和 NoSQL 的使用情景
  4. information_schema.triggers 学习
  5. 多个ViewPager引发的Fragment未初始化
  6. BZOJ 2947 Poi2000 促销 set
  7. 计算机技术与软件专业技术资格(水平)考试常见问题
  8. 给初恋女孩的信....
  9. 模拟浏览器发送请求报文
  10. python (ploit3)hexun