Kotlin!这个词想必作为一名Android开发者的你已经不陌生,无论是初级新人还是资深大佬,多多少少有听说过甚至已经开始用起来了,毕竟我们都是跟着Google爸爸混的,最近2年Google一直在和Kotlin搞事情。
相信很多同学在来这里之前心中已经有来很多疑惑,问号。
——这个语言难不难学啊?我Java都还没精通,又来一门新语言。
——这玩意比起Java优势在哪?值不值我花精力去研究?我Java用的麻溜,学他干嘛。
——才推出不久,性能会不会有问题,稳不稳啊!先观望再说。
——现在技术更新太快了,我学不过来啊!崩溃ing……
如果你心中有以上疑惑还在纠结,还没下定决心要不要开始上手这门Google新宠的话。没关系,现在就给您安排上。
PS:这篇文章旨在带站在门口观望的同学大概了解一下Kotlin,没有任何深入的东西(暴露了我也是初学,哈哈),希望看完后心中对Kotlin有个大概的概念,然后下定决心走进来!
Kotlin:“我是谁?,我哪来的?”
由JetBrains(IntelliJ IDEA就是他们家的)公司设计开发并开源的一种在 Java 虚拟机上运行的静态类型编程语言。支持多种平台,包括移动端、服务端以及浏览器端。
好了!简单的介绍一下出生,下面开始正式揭下Kotlin的神秘面纱。
Kotlin:“Hello World”
回到过去,我们Coding之启蒙都是从Hello World开始。现在让我们来看下Kotlin的Hello World
1 | package org.kotlinlang.play // 1 |
我们来解析一下这三行代码:
首先从字面上来看,这段代码就是打印”Hello, World!”字符串。没错,Kotlin零基础的你也猜对了。
第一行:package
关键字指定当前类所在的包,和Java完全一样。
第二行:声明方法,Kotlin中所有方法声明都使用fun
关键字。
第三行:打印语句,和Java的“System.out.printlin()” 一样。
不知道心细的你发现了没,第三行打印语句结束,句尾没有任何标点符号。这就是Kotlin语法的特性之一,句尾不需要加任何标点符号。可能习惯了Java语法句尾以;
结束的小伙伴刚开始有些不习惯,甚至会触发你的强迫症。但是后来你会发现,不要;
简直不要太舒服。
看完“Hello World”是不是还是觉得Kotlin平平无奇。接下来就要讲点厉害的了。
Kotlin: “ 我真的超diao的”
空安全
使用Java的你是不是经常被空指针异常所困扰,Kotlin和Swift一样巧妙的解决了这个问题,具体语法是什么样子,先不着急,后面会讲到。
支持Lambda表达式
体验过Java8 Lambda的同学肯定知道,这会让你的代码看上去更加简洁,可读性更高。
- 高度互操作性,完全兼容Java
看到这个是不是有点小惊喜。Kotlin的这个特性意味着你的项目可以使用Java和Kotlin两种语言混编。对于担心现有项目是Java,使用Kotlin改造会带来巨大工作量的同学你们安心啦,你完全可以在原来的Java工程基础上使用Koltin来开发新的功能,可以继续使用Java所编写的代码和库。
- 支持扩展
这个特性可以让你对现有的类进行特性扩展。
Java老哥:“我滴龟龟这个厉害了,我Java听都没听说过。那到底啥是扩展呢?”
扩展就是在不使用继承的前提下,对现有的类进行方法,属性新增等操作。这个特性的好处就是对原有类没有入侵,仅在使用时进行动态扩展。如:使用某个SDK内部的某个类,你的需要需要新增一个方法,但是SDK不会为你的特殊场景新增这个方法,这时候扩展这个特性就可以大显身手了。 - 代码量更少
Kotlin语法相对于Java来说更加简洁,让你的工程代码量大幅减少。这里就不吹代码量是少3倍还是多少了,谁用谁知道啊。
看到这里是不是有点小心动了,你的Android Studio已经按耐不住啦!
先别急,正所谓万丈高楼平地起,地基最重要。走路之前我们先学会怎么爬。
Kotlin:“来搞(xue)基(ji)啊(chu)”
首先Koltin文件都是以.kt
为后缀。
包声明
1 | package com.kotlin.hello |
Kotlin文件的包声明使用package
关键字,包导入使用import
关键字。
变量声明
Kotlin的变量声明使用var
,val
关键字。
- var:声明变量,默认为
private
。
1 | var a: String = "initial" // 1 |
语法解析:Kotlin声明变量格式如示例代码所示var 变量名称 :变量类型
Koltin支持自动推断类型,如示例代码第二行所示,直接给变量赋值会自动推断对应类型。
- val:声明常量,默认为
private
。
1 | val b: Int = 1 // 1 |
语法解析:Kotlin声明常量与声明常量语法格式一致。这里说的常量即变量为只读,只可赋值一次。
方法声明
Koltin方法声明使用fun
关键字。
定义无参无返回值方法
1 | fun sayHello():Unit{ |
语法解析:Kotlin定义方法格式为fun 方法名():返回类型{}
。
无返回类型使用Unit
关键字描述,Unit
返回类型可省略,如示例代码sayGoodbye方法所示。
定义带参有返回值方法
1 | fun sum(a: Int, b: Int): Int { |
语法解析:方法定义格式与无参无返回值方法一致,参数声明与变量定义格式一样,参数名在前,参数类型在后。fun 方法名(参数名:参数类型):返回类型{}
Kotlin自动类型推断特性,以上的方法可以这样写
1 | fun sum(a: Int, b: Int) = a + b |
将表达式作为函数体、返回值类型自动推断
可见性修饰符
变量,方法都会声明了,那现可以了解一下Kotlin中对于变量和方法都有哪些可见性修饰符来描述变量和方法的作用域。
Kotlin中修饰可见性一共四个关键字:
- public
默认修饰符,全局可见。
- private
作用域仅为当前所在源文件。
val
常量和var
变量,默认都是private
的。 - internal
作用域为当前模块。同一模块都可见。
- protected
作用域为当前所在类以及其子类
数据类型
- 数字
Kotlin 提供了如下的内置类型来表示数字(与 Java 很相近)。
Type | Bit width |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
这里要说明一下,Kotlin 处理数字在某种程度上接近 Java,但是并不完全相同。如不支持数字隐式拓宽转换,即自动向上转型(如 Java 中 int 可以隐式转换为long)。
字符
字符用Char
类型表示。它们不能直接当作数字.字符字面值用单引号括起来: ‘1’。 特殊字符可以用反斜杠转义。 支持这几个转义序列:\t、 \b、\n、\r、\’、\”、\ 与 \$。 编码其他字符要用 Unicode 转义序列语法:’\uFF00’。布尔
布尔用Boolean
类型表示,它有两个值:true 与 false。这个和Java是一样的。数组
数组在 Kotlin 中使用Array
类来表示,它定义了 get 与 set 函数(按照运算符重载约定这会转变为 [])以及 size 属性,以及一些其他有用的成员函数
好啦,看到这里想必你对Kotlin已经有了大致的概念了。那我们现在可以搞点事情了。
Kotlin:“来创建你的第一个Kotlin应用吧”
你的Android Studio已经饥渴难耐,快打开她。
这里说一下Android Studio 3.0 以上版本已经自带对Kotlin的支持,3.0以下版本可在Setting里找到Plugin选项,搜索Kotlin插件,安装重启即可。
- step1:新建一个Android项目。
- step2:在app的gradle文件中添加:
1 | apply plugin: 'kotlin-android' |
- step3:在project的gradle文件中添加:
1 | ext.kotlin_version = '1.2.71' |
Android Studio 3.0 以上版本不需要手动添加,只需在创建项目时勾选Include Kotlin support
即可
以上操作完成就成功创建了你的第一个Kotlin Android项目了。
上面提到的Kotlin和Java的高互操作性你的项目可以使用Java和Kotlin两种语言混编,Android Studio 3.0以上版本也提供了Java语法转Kotlin语法的功能,可以快速将你原来使用Java来实现的类转换为Kotlin语法。这个适合在初学时遇到Kotlin不会写的语法时可以先用Java实现,然后拷贝到Kotlin文件中就能转换成对应的语法。
以上就是本文介绍的Kotlin一些基础的语法和基本的使用方法。文章虽然到这里就结束了,但是我们的Kotlin之旅才刚刚开始。
参考文献:
https://www.kotlincn.net/
http://www.runoob.com/kotlin/kotlin-basic-syntax.html