什么是 Kotlin ?最简单的回答是 Kotlin 是:前端
Kotlin 由 Jetbrains 开发的一门新的语言。java
提及 Jetbrains 不由让人肃然起敬,在 Java 和 Android 开发领域这家捷克的公司可谓是无人不知、无人不晓,著名的集成开发工具 IntelliJ IDEA 就是有这家公司开发的产品, Android 开发利器 Android Studio 就是在 IDEA 的基础之上设计的。啥?你二者都没接触过,没事,JetBrains 家的产品不只仅只有这两个, Python 开发经常使用的 PyChrom ,前端的同窗的开发利器 WebStrom 等等,基本上从前端到后端、从数据科学到网页开发、从编程语言到数据库,一些列神奇的工具都是由 JetBrains 开发的,你说这家公司厉不厉害!!!程序员
那么这家公司为何要开发一门新的语言呢?能够经过 Kotlin 的一些特性来进行了解。数据库
上图是 Jetbrains 给出的四个为何选择 Kotlin 的缘由。编程
首先是简洁,这里能够经过代码之间的对比来观察:后端
Hello World java:安全
package hello;
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
复制代码
Kotlin:机器学习
package hello
fun main() {
println("Hello World")
}
复制代码
能够明显的观察到 Java 写一个简单的 Hello World 须要 7 行代码,而 Kotlin 只须要 5 行代码,而且输出函数也比 Java 简洁。编程语言
文件逐行读写 java:函数
public static List<String> getAllFileLines(String fileName) {
if (fileName == null) {
throw new NullPointerException("参数不可为空");
}
File file = new File(fileName);
if (!file.exists()) {
throw new IllegalArgumentException("文件路径错误");
}
List<String> allFileLines = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(file))){
String line;
while ((line = reader.readLine()) != null) {
allFileLines.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return allFileLines;
}
复制代码
Kotlin:
fun getAllFileLines(fileName: String): List<String> {
var file: File = File(fileName)
if (!file.exists()) {
throw IllegalArgumentException("文件路径错误")
}
return file.readLines();
}
复制代码
也许一个简单的 Hello World 并不能看出二者之间的区别,可是经过上述的一个文件读写的例子能够清楚的看到二者之间的对比, Java 用了 22 行,可是使用 Kotlin 的话只用了 7 行。
Java 中最著名的异常就是 java.lang.NullPointException
了,为了防止出现空指针异常的状况有时候不得不在代码中进行防护式编程:
public String getFristStudentNameFromClassRoom(ClassRoom room) {
if (room == null) {
return "教室不存在";
}
List<Students> students = room.getAllStudents();
if (students == null || students.isEmpty()) {
return "这是一个空教室或者全部的学生都不在教室中"
}
return students.get(0);
}
复制代码
从上述展现的方法中能够看到为了防止空指针异常的状况不得不在代码中添加多个 if
判断,来防止对象为空时程序出错。
可是 Kotlin 已经从语法层面解决了这个问题。 Kotlin 在建立对象时有两种声明:可空、非空,这是从空值角度的分类,这两种类型与其余的类型进行组合,从而在语法层面杜绝空指针异常的问题。
示例:
var str1: String = "this is a str" // 声明一个不可空的字符串,一次必须为字符串赋值,不然编译器会报错。
var str2: String? = null// 声明一个可空的字符串,一次能够暂时赋值为空。
复制代码
对于上述的示例方法,就能够将其参数设置为不可空类型,这样就会有效的避免空指针异常的出现。
class ClassRoom {
val students: List<String>
constructor(students: List<String>) {
this.students = students
}
}
fun getFristStudentNameFromClassRoom(room: ClassRoom) = if (room.students.isEmpty()) "学生都不在教室中" else room.students[0]
复制代码
首先,getFristStudentNameFromClassRoom
的参数是一个不能够为空的对象,那么进入函数的 room
必定是不为空的,同时在定义 ClassRoom 的时候就声明了 students 不可为空,所以只须要判断 room.students
中是否存在学生,经过一个三元表达式就能够轻松的完成。
学习一门新语言的最大的担心是什么?
我的认为主要集中在两个方面:
价值:
编程语言说白了就是一个工具,既然是工具就必然要有用武之地,可以解决实际的问题,体现语言的价值,这是一门编程语言所必须具备的性质。就拿 Python 来讲,其在人工智能、机器学习以及数据分析等领域的突出表现使其成为如今最值得学习的语言之一。固然这是相互做用的,有了以语言为基础的针对某个领域的解决方案后,该领域的相关的问题又会反向的促进语言的发展,有关这点之后有时间在进行详细的讨论。那么 Kotlin 的价值呢?别急接下来就会谈到。
学习:
既然是一门新的语言,那么学习的过程就是不可避免的,可是若是在开始阶段就是地狱级的学习难度,相信这门语言是不会有多少人愿意学习的,所以平滑的学习曲线对于一门语言来讲也是十分重要的,这并不意味着没有难度,而是指就行关卡制的游戏同样须要按部就班,逐步的提高难度,应对不一样层次的学习者有着不一样深度的内容去学习。
那么 Koltin 在这两点上作的如何,首先是第一点价值, Kotlin 如今已是开发 Android 的首选语言,获得了来自 Google 的大力推广,这个价值应该能够了吧,可是 kotlin 不只仅于此:
至于第二点,做为一门依托于 JVM 平台的语言, Kotlin 实现了与 Java 百分之百的互操做,这意味着 Java 能够作的事情 Kotlin 均可以作,甚至能够作的更好,同时也能够在同一个项目中采用 Kotlin 与 Java 进行混合编程,充分利用二者的优势。
官方还推出了 Java2Kotlin 转换器,帮助 Java 程序员更加平滑的向 Kotlin 进行转变。
关于这一点别忘了 Kotlin 的老东家 JetBrains ,最优秀的 Java 集成开发环境就是出自这家公司之手,而且 jetBrains 作出了一些列很是优秀的产品,对于自家的亲儿子,你彻底不用担忧,IDEA 会是你在学习 Kotlin 的过程当中的一大助力。