1 Kotlin:定义和目的

首先呢,你们要的妹纸图:


うずまき ナルト.jpg

1.1 Kotlin 初体验

/**
 * 代码示例:
 * data 数据类
 * maxBy 函数 (查找列表中年纪最大的人)
 * lambda表达式  it.age (使用 it 作为这个参数的默认名称)
 * Elvis运算符 ?:  ( ?: 0 的意思是,如果age属性为null,会返回0)
 * 
 */

data class Person(val name : String,val age : Int ?= null)

fun main(args: Array) {
    val persons = listOf(Person("lily"),Person("Bob",age = 29))
    val oldest = persons.maxBy{it.age ?: 0}
    println("The oldest is : $oldest")
}
//运行结果:
//The oldest is : Person(name=Bob, age=29)

1.2 Kotlin 的主要特征

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

Kotlin最常用的应用场景:

  • 编写服务端代码(典型的代表是Web应用后台)
  • 创建 Android 设备上运行的移动应用

除了 Java 外,Kotlin 还可以编译成 JavaScript,允许在浏览器中运行 Kotlin代码

1.2.2 静态类型

Kotlin 和 Java 都是静态类型的编程语言

静态类型语言的优点:

  • 性能——方法调用速度更快,因为不需要在运行时才判断调用的是哪个方法
  • 可靠性——编译器验证了程序的正确性,因而运行时崩溃的概率更低
  • 可维护性——陌生代码更易维护,因为可以看到代码中用到的对象的类型
  • 工具支持——静态类型是 IDE 能提供可靠的重构,精确的代码补全及其他功能

再说一下动态类型的编程语言,比如在JVM上的 Groovy 和 JRuby

什么是动态类型语言?

  • 允许定义可以存储任何数据类型的变量,或者返回任何数据类型的函数,并在运行时才解析方法和字段引用

动态类型语言的特点:

  • 优点——减少代码量并增加创建数据结构的灵活性
  • 缺点——在编译器不能发现像名字拼写错误这样的问题,进而导致运行时的错误

Kotlin的类型推导

与Java不同,Kotlin不需要在源代码中显式的声明每个变量的类型。

//举例,声明一个变量
val x=1

在声明这个变量时,由于变量初始化为整型值,Kotlin自动判断出它的类型是整型。
编译器这种从上下文推断变量类型的能力被称作类型推导

Kotlin的新概念

可空类型的支持
函数类型的支持
...
后续文章详细介绍...

1.2.3 函数式和面向对象

函数式编程的核心概念:

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

Kotlin建议采用函数式(当然也支持面向对象,看各人喜好了)

函数式编程的好处:

  • 简洁——lambda表达式
  • 多线程安全——不可变数据结构&纯函数
  • 测试更加容易——没有副作用的函数

Kotlin 拥有丰富的特性集,一开始就支持函数式编程:

  • 函数类型,允许函数接受其他函数作为参数,或者返回其他函数
  • lambda表达式
  • 数据类,提供了创建不可变值对象的简明语法
  • 标准库中包括了丰富的API集合,让你用函数式编程风格操作对象和集合
// lambda 表达式
fun findBob() = findPerson{it.name == "Bob"}

1.3 Kotlin 应用

1.3.1 服务端的Kotlin

与现有Java代码无缝的互操作性,是其胜任的一大优势。
使系统的代码更紧凑、更可靠、更易于维护。

Kotlin特性之一 HTML生成库

// HTML 生成库的的简单用例,生成HTML页面
fun renderPersonList(persons:Collection)=createHTML().table{
    for(person in persons){
        tr{
            td { +person.name}
            td { +person.age}
        }
    }
}

Kotlin特性之二 持久化框架

例如,Exposed框架

1.3.2 Android 上的 Kotlin

Anko库的一个简单例子如下:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

// 通过下面代码,无需XML文件布局,直接生成界面
        verticalLayout {
            val name = editText()
            button("Say Hello") {
                onClick { toast("Hello, ${name.text}!") }
            }
        }

    }
}

运行结果:


Anko_test.jpg

Kotlin 较于 Java 的优势:

  • 类库特性(举例如上)
  • 更好的应用可靠性(空指针校验等)
  • 性能方面,Kotlin 编译器生成的代码和普通Java代码效率一样;使用lambda时,会被许多Kotlin标准库函数内联,确保不会创建新对象,因此应用程序也不必忍受额外的GC暂停

1.4 使用Kotlin工具

和 Java 一样,Kotlin 也是编译型语言。必须先编译才能运行Kotlin代码。

1.4.1 编译 Kotlin 代码

Kotlin 构建过程简介.jpeg

1.4.2 IntelliJ IDEA 和 AndroidStudio 插件

IntelliJ IDEA 的 Kotlin 插件是同步开发的,它是 Kotlin 可用的功能最全面的开发环境。提供了Kotlin开发所需的全套工具。


安装Kotlin插件.jpeg

1.4.3 交互式 shell (又称REPL)

快速的试验Kotlin代码小片段,可以逐行输入Kotlin代码来查看它的执行结果。
也可以运行不带参数的 kotlinc 命令或者使用IntelliJ IDEA插件中的响应式菜单按钮。

1.4.4 Eclipse 插件

请选择Help > Eclipse Marketplace 菜单项,然后在列表中搜查Kotlin。

1.4.5 在线 playground

1.4.6 Java 到 Kotlin 的转换器

转换器将会自动的帮你把代码翻译成Kotlin

1.5 小结

  • Kotlin 是静态类型语言并支持类型推导,允许维护正确性与性能的同时保持代码简洁
  • Kotlin 支持面向对象和函数式两种编程风格,通过头等函数使更高级别的抽象成为可能,通过支持不可变值简化了测试和多线程开发
  • 服务端开发,全面支持所有现存的Java框架,为常见的任务提供了新工具,如 生成HTML 和 持久化
  • Android端开发,紧凑的运行时、对 Android API 特殊的编译器支持以及丰富的库,为常见的 Android 开发任务提供了 Kotlin 友好的函数
  • 免费和开源,全面支持主流的 IDE 和 构建系统
  • Kotlin是务实的、安全的、简洁的,与Java可互操作,意味着它专注于使用已经证明的解决方案处理常见任务,防止常见的像NullPointerException ,支持紧凑和易读的代码,以及提供与Java无限制的集成

你可能感兴趣的:(1 Kotlin:定义和目的)