Kotlin语言系统化学习K01-kotlin简介

Kotlin系统化学习-20170822
文章中有些内容是借鉴《Kotlin实战》中文版,特此注明一下。

一起从零学Kotlin-20170728:
http://blog.csdn.net/clandellen/article/details/76283527

一起从零学Kotlin-20170730:
http://blog.csdn.net/clandellen/article/details/76369434

一起从零学Kotlin-20170801:
http://blog.csdn.net/clandellen/article/details/76519661

一起从零学Kotlin-20170803:
http://blog.csdn.net/clandellen/article/details/76602453

一起从零学Kotlin-20170805:
http://blog.csdn.net/clandellen/article/details/76698177

Kotlin系统化学习系列文章(所有文章的链接)
http://blog.csdn.net/ClAndEllen/article/details/77466628

K01-Kotlin简介

1.在学习之前,你应该先远远观望一下Kotlin语言

1.1 Kotlin与Java的一些关系和一些区别

首先Kotlin是针对Java平台的一门新式编程语言,也是Android现在官方开发语言,Kotlin简洁,安全,可靠,最主要的是支持与Java的互操作。而Java不得不说很强大,相信学习笔者这篇文章的同学,Java能力自然不会差。Kotlin能够完美的使用Java当中的各种框架,所以Kotlin的性能自然也不会差的,反而某些方面做到很优秀。每学习一个新的语言,那么第一个例子那绝对是"HelloWorld!",一下就是Kotlin语言"你好世界"的例子。

fun main(args: Array<String>) {

   println("HelloWorld!--> 你好世界!")

}

1.2 Kotlin的特性(此处全部借鉴《Kotlin实战》中文版)

1.2.1 目标平台:服务器端,Android以及任何Java运行的地方

  Kotlin的首要目标是提供一种更简洁,更高效,更安全的替代Java的语言,并且适用于现在所有的Java环境。Java是一门非常受欢迎的语言,它广泛的应用于不同的环境中:小到智能卡(JavaCard技术),大到Google,Twitter,LinkedIn和其他这种规模的互联网公司运行的最大的数据中心。在这些地方,使用Kotlin可以帮助开发者在实现目标的同时减少代码并避免麻烦。
  Kotlin最长见的应用场景有:
  (1).编写服务器端代码(典型的 代表是Web应用后端)
  (2).创建Android设备上运行的移动应用
  但Kotlin还有其他的用武之地。例如,可以使用Intel Multi-OS Engine让Kotlin代码运行在IOS设备上。还可以使用Kotlin和TornadoFX以及JavaFX(Getting Started with JavaFX,Oracle,http://mng.bz/500y)一起来构建桌面应用程序。
  除了Java之外,Kotlin还可以编译成JavaScript,允许你在浏览器中运行Kotlin代码。Kotlin的目标平台是相当广泛的。Kotlin并没有被限制在单一的问题领,也没有被限制在解决软件开发者面临的某一类型的挑战。相反,对所有开发过程中涌现的任务,Kotlin都提供了全面的生产力提升。它借助支持特定领域或编程范式的库,提供了卓越的集成水准。

1.2.2 静态类型

  Kotlin和Java一样是一种静态类型的编程语言。这意味着所有表达式的类型在编译期已经确定了,而编译器就能验证对象是否包含了你想访问的方法或者字段。
  这与动态类型的编程语言形成了鲜明的对比,后者在JVM上的代表包括Groovy和JRuby。这些语言允许你定义可以存储任何数据类型和变量,或者返回任何数据类型的函数,并在运行期时才解析方法和字段引用。这会减少代码质量并增加创建数据结构的灵活性。但它的特点是,在编译期间不能发现像名字拼写错误这样的问题,继而导致运行时的错误。
  另一方面,与Java不同的是,Kotlin不需要你在源代码中显式地声明每个变量的类型。很多情况下,变量类型可以根据上下文来自动判断,这样就可以省去类型的声明。这里有一个可能最简单的例子:

val x = 1

在声明这个变量时,由于变量初始化为整数值,Kotlin自动判断它的类型是Int,编译器这种从上下文推断类型变量的能力被称作类型推导。
  下面罗列了一些静态类型带来的好处:
  性能---方法调用速度更快,因为不需要在运行时来判断调用的是哪个方法。
  可靠性---编译器验证了程序的正确性,因而运行时崩溃的概率更低。
  可维护性---陌生代码更容易维护,因为你可以看到代码中用到的对象的类 型。
  工具支持---静态类型使IDE能提供可靠的重构,精确的代码补全以及其他特性。

  得益于Kotlin对类型推导的支持,你不再需要显式的声明类型,因此大部分关于静态类型的额外冗长代码也就不复存在了。
  当你检视Kotlin类型系统的细节时,你会发现许多熟悉的概念。类,接口以及泛型和Java非常接近,所以大部分的Java知识可以很容易地转移到Kotlin。然而,也会有一些新概念出现。
  其中最重要的是Kotlin对可空类型的支持,通过在编译期间检测可能存在的空指针异常,它让你可以写出更可靠的程序。本章最后面我们将回顾可空类型,并在之后的文章中进行详细讨论。
  另外一个Kotlin类型系统的新概念是对函数类型的支持。要搞清这一点,我们先要了解函数式编程的主要思想,以及Kotlin是如何支持这种编程风格的。

1.2.3 函数式与面向对象

作为一个Java开发者,你一定对面向对象编程的核心概念烂熟于胸,但函数式编程对你来说却可能很新鲜。函数式编程的核心概念如下:

  头等函数---把函数(一小段行为)当作值使用,可以用变量保存它,把它当参数传递,或者当作其他函数的返回值。
  不可变性---使用不可变对象,这保证了它们的状态在其创建之后不再变化。
  无副作用---使用的是纯函数。此函数在输入相同时会产生同样的结果,并且不会修改其他对象的状态,也不会和外面的世界交互。

函数式编程风格的代码能给你带来什么好处?首先,简洁。函数式风格的代码比相应的命令式风格的代码更优雅,更简练。因为把函数当作值可以让你获得更强大的抽线的能力,从而避免重复代码。
  假设你有两段类似的代码,实现相似的任务(例如:在集合中寻找一个匹配的元素)但具体细节略有不同(如何判断元素是匹配的)。可以轻易地将逻辑中公共的部分提取到一个函数中,并将其他不同的部分作为参数传递给它。这些参数本身也是函数,但你可以使用一种简洁的语法来表示这些匿名的函数,它被称作为Lambda表达式:

  函数式编程风格的代码带来的第二个好处就是多线程安全。多线程程序中最大的错误来源之一就是,在没有采用适当同步机制的情况下,在不同的线程上修改同一份数据。如果你使用的不是不可变数据结构和纯函数,就能保证这样不安全的修改根本不会发生,也就不需要考虑为其设计复杂的同步方案。
  最后,函数式编程风格可以在任何编程语言中使用(包括Java),它的很多主张都被认为是良好的编程风格。然而并不是所有的语言都提供了语法和库支持,让我们可以不费力地使用这种风格。例如:Java8之前的Java版本都缺少了这种支持。Kotlin拥有丰富的特性集从一开始就支持函数式编程风格,包括:
  (1)函数类型,允许函数接受其他函数作为参数,或者返回其他函数。
  (2)Lambda表达式,让你用最少的样板代码方便地传递代码块。
  (3)数据类,提供了创建不可变值对象的简明语法。
  (4)标准库中包括了丰富的API集合,让你用函数式编程风格操作对象和集合。
  Kotlin允许你使用函数式编程风格但并没有强制你使用它。当你需要的时候,可以使用可变数据,也可以编写带副作用的函数,而且不需要跳过任何多余的步骤。然而,毫无疑问的是,在Kotlin中使用基于接口和类层次结构的库就像Java一样简单。当编写Kotlin代码的时候,可以结合使用面向对象编程和函数式编程风格,并使用最合适的工具来对付亟(ji,念第2声)待解决的问题。

1.2.4 免费并开源

  Kotlin语言(包括编译器,库和所有相关工具)是完全开源的,并且可以自由使用。它采用Apache2许可证;其开发过程完全公开在GitHub上,并且欢迎来自社区的贡献。如果你要开发Kotlin应用程序,有三种开源供你选择:IntelliJ IDEA Community2版,Android Studio以及Eclipse,它们都完全支持Kotlin(当然,IntelliJ IDEA Ultimate 也支持Kotlin)。
  现在你明白了Kotlin是什么语言,让我们看看Kotlin在具体的实际应用中会给你带来哪些好处。

1.3 Kotlin应用(此处全部借鉴《Kotlin实战》中文版)

  如前所述,Kotlin使用的两个主要的领域是服务器端和Android开发。接下来我们分别看看这两个领域,以及为什么Kotlin非常适合它们。

1.3.1 服务器端的Kotlin

  服务器端编程是一个非常大的概念,它包含了所有下列的应用程序类型甚至更多:
  (1)返回HTML页面给浏览器的Web应用程序。
  (2)通过HTTP暴露JSON API的移动应用后端服务。
  (3)通过RPC协议互相通信的微服务。

  多年以来,开发者一直在构建这些类型的应用,并且积累了大量的框架和技术来帮助他们构建这些应用。这些应用并不是孤立地开发或者从零开始的,它们几乎总是对现有的系统进行扩展,改进或者替换,新的代码必须和系统中现有部分进行集成,而这些部分可能很多年之前就写成了。
  这种环境下Kotlin的一大优势就是它们与现有的Java代码的无缝的互操作性。无论是要编写一个全新的控件还是移植一个现有服务的代码,Kotlin都毫无压力。不管你需要在Kotlin中继承Java类,还是1以某种方式注解一个类的方法和字段,都不会遇到任何问题。它带来的优点是系统的代码更加紧凑,更可靠,更易于维护。
  与此同时,Kotlin还引入许多用于开发这类系统的新技术。例如,对构建器模式的支持让你可以使用更简洁的语法来创建任何对象图,同时保留了语言中全套的抽象机制和代码重用工具。
  这个特性的一个最简单的用例就是HTML生成库,它可以把一个外部模版语言替换成简洁且完全类型安全的解决方案。这里有一个例子:

  可以轻松地把映射到HTML标签的函数和常规的Kotlin语言结构组合起来。你不再需要使用一门独立的模版语言,也不需要学习新的语法,仅仅使用循环就可以生成HTML页面。
  另外一个能用上Kotlin干净和简洁的DSL的用例是持久化框架。例如,Exposed框架(https://github.com/jetbrains/exposed)就提供了易读的DSL,可以完全使用Kotlin代码来描述SQL数据库的结构并执行查询操作,并且有全面的类型检查。下面这个小例子展示了可行的做法:

1.3.2 Android上的Kotlin

  一个典型的移动应用和一个典型的企业应用完全不同。它更小,更少地依赖与现有的代码集成,通常需要快速交付,同时需要保证在大量的设备上能够可靠地运行。这类项目Kotlin也能胜任。
  Kotlin的语言特征,加上支持Android框架的特殊编译器插件,让Android的开发体验变得高效和愉悦,常见的开发任务,比如给控件添加监控器或者把布局元素绑定到字段,可以用更少的代码完成,有时甚至根本不用写任何代码(编译器会帮你生成)。同样由Kotlin团队打造的库Anko(https://github.com/Kotlin/anko)给许多标准Android API添加了Kotlin友好的适配器,进一步提升了Android的开发体验。
  下面是Anko的一个简单例子,可以品尝到使用Kotlin进行Android开发的滋味。只要把这段代码放在一个Activity中,一个简单的Android应用就做好了!


  使用Kotlin带来的另一优势就是更好的应用可靠性。如果你有开发Android应用的经验,你一定对"Unfortunately,Process Has Stopped"对话框深恶痛绝。如果你的应用有未处理的异常,这个对话框就会出现,而这种异常一般是NullPointException(空指针异常)。Kotlin的类型系统通过精确地跟踪null值,大大减轻了空指针异常问题带来的压力。大部分Java中会导致NullPointException的代码在Kotlin中无法编译成功,以确保这些错误在应用到达用户手中之前得到修正。
  同时,由于Kotlin完全兼容Java6,使用它并不会带来任何新的编译问题。你可以享受所有的Kotlin的炫酷新特性,而你的用户仍然可以在它们的设备上使用你的应用,即使他们的设备并没有运行最新版本的Android系统。
  说到性能,Kotlin也没有带来任何负面影响。Kotlin编译器生成的代码执行起来和普通的Java代码效率一样。Kotlin使用的运行时(库)体积相当小,所以编译出来的应用程序包体积也不会增加多少。当你使用Lambda的时候,它们会被许多Kotlin标准库函数内联,Lambda的内联确保不会创建新对象,因此应用程序也不必忍受额外的GC暂停。
  看过了和Java相比Kotlin的优势之后,我们再来看看Kotlin的设计哲学---那些把Kotlin和其他面向JVM的现代语言区分开的主要特性。

1.4 Kotlin的设计哲学(此处全部借鉴《Kotlin实战》中文版)

  当谈起Kotlin的时候,我们喜欢说它是一门务实,简洁和安全的语言,专注于互操作性。这里的每个词语究竟是什么含义?我们逐个来看看。

1.4.1 务实

  务实对我们来说意味着一件简单的事情:Kotlin就是一门设计出来解决现实世界问题的实用语言。它的设计基于多年创建大型系统的工业经验,它的特性也是为解决许多软件开发者遇到的场景而选择的。此外,来自JetBrains内部和社区的开发这已经使用Kotlin的早期版本很多年,他们的反馈也被融合进了这门语言公开发布的版本中。所以我们才能自信的说,Kotlin能够帮助解决实际项目的问题。
  Kotlin也不是一门研究性的语言。我们没有试图提升编程语言设计领域目前的技术水平,也没有尝试探索计算机科学的创新理念。反而,我们会尽可能地依赖已经出现在其他编程语言中并被证明是成功的那些特性和解决方案。这降低了语言的复杂性,也让它更容易学习,因为你可以仰仗那些熟悉的概念。
  此外,Kotlin也没有强制使用某种特定的编程风格和范式。当你开始学习这门语言的时候,可以使用熟悉的来自Java经验的风格。然后,你会渐渐地发现更多强大的Kotlin特性,并学习把它们应用到你的代码中,让代码更简洁,更符合语言习惯。
  Kotlin的使用主义的另外一个重要体现是对于工具的专注。对开发者的生产力而言,一个智能的开发环境和一门设计良好的语言同样重要。因此,事后再来考虑对IDE进行支持就是马后炮。而Kotlin的情况是,IntelliJ IDEA的插件是和编译器同步开发的,并且在设计语言特性时始终牢记着对工具的支持。
  IDE支持对帮助你探索Kotlin的特性也发挥着重要作用。许多情况下,工具会发现那些可以用更简洁的结构来替换的通用代码模式,并给你提供修正这些代码的选择。通过研究自动修正所使用的语言特性,你就能学习如何在自己的代码中应用这些特性。

1.4.2 简洁

  和编写新代码相比,开发人员会耗费更多的时间来阅读现有的代码,这已经是常识。想象一下你所在的团队正在开发一个大项目,而你的工作是添加一个新特性或者修改bug。第一步会干什么?首先要找到需要改变的那段代码,然后才能实现你的修改。要阅读很多代码才能知道你要做什么。这些代码可能最近刚完成,由你的同事或者是那些已经离开的同事编写,或者是你自己很久之前写好的。只有搞懂了周围的代码你才能做出正确的改动。
  代码越简单月简洁,你就能越快地了解发生了什么。当然,良好的设计和达意的命名在这里起着重要的作用。但语言的选择及其简洁也很重要。如果语言的语法清晰地表达了被阅读的代码的意图,没有因为达成意图所需的样板代码而晦涩难懂,那么它是简洁的。
  在Kotlin中,我们努力地保证你写的代码都具有实际的意义,而不是仅仅为了满足代码结构的需要。许多标准的Java样板代码,例如:getter,setter以及将构造方法的参数赋值给字段的逻辑,在Kotlin中都是隐式的,并不会是你的源代码变得混乱。
  另外一个导致代码变得不必要的冗长的原因是编程显式的代码来完成常见的任务,比如定位集合中的元素。和许多其他现代语言一样,Kotlin有丰富的标准库,让你用库方法调用来代替这些冗长重复的代码段。Kotlin对Lambda表达式得到支持,让小代码块可以轻松地传递给库函数。这让你可以把公共的那部分代码全部封装在库中,而在用户代码中仅保留特定的针对任务的那部分。
  与此同时,Kotlin并没有尝试把源代码压缩到最小可能的长度。例如,即使Kotlin支持运算符重载,用户也不能定义自己的运算符。因此,库开发者不能用神秘的标点符号序列来代替方法名字。单词比标点符号显然更易懂,也更容易找到相关的文档。
  越简洁的代码写起来花的时间越短,更重要的是,谈起来耗费的时间也更短。这回提高你的生产力并让你更快地达成目标。

1.4.3 安全

  通常,我们说这一门编程语言是安全的,我们的意思是它的设计可以防止程序出现某些类型的错误。当然,这并不意味这绝对的高质量,没有任何语言可以阻止所有可能出现的错误。此外,预防错误是需要成本的。需要给编译器提供程序有预期操作更多的信息,这样编译器才能验证这些信息是否和程序的功能匹配。因此,你要在得到的安全级别和因为增加更多细节注解而造成的生产力损失之间权衡权弊。
  使用Kotlin,我们试图实现比Java更高的安全级别,同时保持更低的总体成本。在JVM上运行已经提供了许多的安全保证:例如,内存安全,防止了缓冲区溢出以及其他错误的动态内存分配造成的问题。作为面向JVM的静态类型语言,Kotlin还保证了应用程序的类型安全。这比使用使用Java的成本要更低:不需要指定所有的类型声明,因为许多情况下编译器会自动地推断出类型。
  Kotlin所做的不止这些,这意味着更多的原本在运行时失败的错误在编译期的检查中就被阻止了。最重要的一点是,Kotlin努力地从你的程序中消除NullPointException。Kotlin的类型系统跟踪那些可以或不可以为null的值,并且禁止那些运行时可能导致NullPointException的操作。这所带来的额外的成本是极小的:把类型标记为空的只要一个字符,就是类型尾部的一个问号:

val s1 String? = null//可为空的String
val s2 String  = ""//不可为空的String

  除此之外,Kotlin提供了许多便利的方法来处理可空数据。这非常有助于消灭应用程序的崩溃。
  Kotlin有助于避免的另一种异常类型就是ClassCastException。当你把一个对象转换成一种类型,而没有事先检查它是否是正确的类型时,就会发生这个异常。在Java中,开发者常常省略了这类检查,因为必须反复地在检查和其后的转换中写明类型名称。另一方面,Kotlin中的检查和转换组合成了一次操作:一旦检查过类型,不需要额外的转换就能直接引用属于这个类型的成员。这样,开发者就没有借口跳过检查,也不会给错误留下可乘之机。下面展示了它是如何工作的:

if(value is string) //检查类型的异常
   println(value.toUpperCase()) //调用该类型的方法

1.4.4 互操作性

  关于互操作性,你的第一问题可能是:“我是不是可以继续使用现有的库?”Kotlin给出的回答是:“当然可以。”无论需要使用哪种库提供的API,都可以在Kotlin中使用它们。可以调用Java的方法,继承Java的类和实现Java的接口,在Kotlin类上应用Java的注解,等等。
  与其他一些JVM语言不同,Kotlin在互操作上更上一层楼,让Java代码也可以毫不费力地调用Kotlin的代码。无须取巧:Kotlin的类和方法可以像常规的Java类和方法一样被调用。这带来了无限的灵活性,在项目的任何地方都可以混合使用Java和Kotlin。当你刚开始在自己的Java项目中引入Kotlin时,可以在代码库的任意一个类上运行Java和Kotlin的转换器,剩下的代码不需要任何修改就可以继续编译和工作。不管你所转换的类是什么角色,这都是可行的。
  另一个Kotlin专注与互操作性的领域是在最大程度上使用现有的Java库。例如,Kotlin没有自己的集合库,它完全依赖Java标准库中的类,使用额外的函数来扩展它们,让它们在Kotlin中用起来更方便。这意味着在Kotlin中调用JavaAPI时,永远不需要包装或者转换这些Java对象,反之亦然。所有这些Kotlin提供的丰富的API在运行时没有任何的额外开销。
  Kotlin工具也对跨语言项目提供了全面支持。它可以编译任意混合的Java和Kotlin源码,不管它们之间是怎样互相依赖的。IDE的特性也能跨语言工作,允许:
  (1)自由地在Java和Kotlin源码文件之间切换。
  (2)调试混合语言的项目,可以在不同语言编写代码之中单步调试。
  (3)重构Java方法的时候,Kotlin代码中的对它们的调用也会得到正确的更新,反之亦然。

  希望我们已经说服你尝试一下Kotlin,现在,你要如何开始使用它?在接下来的一节中,我们将从命令行和其他不同工具的使用两方面讨论和运行Kotlin代码的过程。

1.5 使用Kotlin工具(此处全部借鉴《Kotlin实战》中文版)

  和Java一样,Kotlin也是编译型语言,这意味着你必须先编译,然后才能执行Kotlin代码。让我们来讨论一下编译过程,然后看看帮助你完成这个过程需要的不同工具。如果你需要关于如何搭建开发环境的信息,请参考Kotlin官方网站的“Tutorials”(教程)一节(https://kotlinlang.org/docs/tutorials)。

1.5.1 编译Kotlin代码

  Kotlin的源代码存放在后缀名为.kt的文件中。Kotlin编译器会分析源代码并生成.class文件,这和Java编译器做的没什么不同。然后按照你正在处理的应用程序类型的标准过程打包和执行生成的.class文件。最简单的情况下,只需要使用kotlinc命令就可以从命令行编译代码,然后就可以用Java命令执行你的代码:

kotlinc <source file or directory> -include-runtime -d <jar name>  
java -jar <jar name>  

  图1.1展示了Kotlin构建过程的简单描述。


  用Kotlin编译器的代码依赖Kotlin运行时库。它包括了Kotlin自己的标准库类的定义,以及Kotlin对标准Java API的扩展。运行时库需要和你的应用程序一起分发。
  在大多数实际工作的例子中,你会使用像Maven,Gradle或者这样的构建系统来编译你的代码。Kotlin和所有这些构建系统都兼容,我们会在附录A中讨论相关细节。所有这些构建系统也支持在同一代码库中既有Kotlin也有Java的混合语言项目。此外,Maven和Gradle还会帮你把Kotlin运行时库作为依赖加入到你的应用程序中。

1.5.2 IntelliJ IDEA 和 Android Studio 插件

  IntelliJ IDEA的Kotlin插件和语言同步开发的,它是Kotlin可用的功能最全面的开发环境。它成熟且稳定,提供了Kotlin开发所需的全套工具。
  IntelliJ IDEA 15及其后续版本不需要额外的设置,Kotlin插件就可以开箱即用。可以选择免费开源的IntelliJ IDEA Community版,也可以选择IntelliJ IDEA Ultiamte。在“New Project”(新建项目)对话框中选择“Kotlin”,然后就可以开始工作了。
  如果你用的是Android Studio,可以从“plug-in manager”(插件管理器)中安装Kotlin插件。打开“Settings”(设置)对话框,选择“Plugins”(插件),单击“Install JetBrains Plugin”(安装JetBrains插件)按钮,然后从列表中选择“Kotlin”。

1.5.3 交互式shell

  如果你想快速地尝试小段的Kotlin代码,可以使用交互式shell(也叫REPL3)。在REPL中,可以逐行地输入Kotlin代码并立即看到其执行结果,可以使用不带任何参数的kotlinc命令启动REPL,也可以从IntelliJ IDEA的“Kotlin”菜单中选择启动REPL。

1.5.4 Eclipse插件

  如果你是Eclipse用户,同样可以选择在你的IDE中使用Kotlin。Kotlin的Eclipse插件提供了必要的IDE功能,如导航和代码补全。该插件可以在Eclispe Marketplace 中找到。要安装它,请选择“Help>Eclipse Markerplace”菜单项,然后在列表中搜索“Kotlin”。

1.5.5 在线playground

  尝试Kotlin的最简单的方式,是不需要任何安装和配置。可以在http://try.kotl.in找到在线的playground,可以在上面编写,编译及运行Kotlin的小程序。Playground上还展示了Kotlin特性的代码示例,其中包括了本书所有例子。还有一系列交互式学习Kotlin的练习。

1.5.6 Java 到 Kotlin 的转换器

  要熟练掌握一门新语言总是要费尽力气的。幸运的是,我们开辟了一条很棒的小捷径,让你可以借助现有的Java知识来加快学习和运用Kotlin的速度。这个工具就是Java到Kotlin的自动转换器。
  当你开始学习Kotlin的时候,如果你还没有记住准确的语法,转换器能帮你表达一些内容,可以先用Java写出相应的代码片段,然后把他粘贴到Kotlin文件中,转换器会自动地将代码转换成Kotlin。转换的结果不一定总是符合语言习惯,但是它一定是可以工作的代码,这样就可以让你的任务更进一步了。
  在现有的Java项目中引入Kotlin时,转换器也很好用。当你写一个新类时,可以从一开始就用Kotlin。但是如果你要在一个现有的类上做重大的个更改时,可能也想在这个过程中使用Kotlin,这时转换器就派上用场了。首先把这个类转换成Kotlin,然后就可以利用现代编程语言的所有优势来添加更改了。
  在IntelliJ IDEA 中使用转换器再简单不过了要么复制一段Java代码粘贴到Kotlin文件中,要么触发“Convert Java File to Kotlin File”(转换Java文件到Kotlin文件)动作来转换整个文件。也可以在Eclipse中或者线上使用转换器。

1.6 小结

1.Kotlin是静态类型语言并支持类型推导,运行维护正确性与性能的同时保持源代码的整洁。

2.Kotlin支持面向对象和函数式两种编程风格,通过头等函数使更高级别的抽象成为可能,通过支持不可变值简化了测试和多线程开发。

3.在服务器端应用程序中它工作得很好,全面支持所有现存的Java框架,为常见的任务提供了新工具,如生成HTML和持久化。

4.在Android上它可以工作,这得益于紧凑的运行时,对Android API特殊的编译器支持以及丰富的库,为常见Android开发任务提供了Kotlin友好的函数。

5.它是免费和开源的,全面支持主流的IDE和构建系统。

6.Kotlin是务实的,安全的,简洁的,与Java可互操作性,意味着它专注于使用已经证明果的解决方案处理常见的任务,防止常见的像NullPointException这样的错误,支持紧凑和易读的代码,以及提供与Java无限制的集成。

本篇文章内容全部是《Kotlin实战中文版》第一章的内容,在写此篇文章之前,笔者已经将《Kotlin实战中文版》看了个大概,内容还是非常全面的,是值得一买的Kotlin学习好书籍,所以建议还是购买一本,笔者花了70元左右从网上购买的,相比于知识,这点钱不算啥。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容