kotlin简介
kotlin.jpeg
说起kotlin,不得不提到17年谷歌I/O大会了,在大会最后,谷歌宣布将kotlin语言作为Android开发的一级编程语言.这一消息在Android开发界引起了轩然大波,随后kotlin在各大语言排行榜上猛然前进.
kotlin由JetBrains公司开发,与Java100%互通,并具备诸多Java尙不支持的新特性,但是大家要注意,在Android Studio3.0上才支持kotlin语言.
笔者在17年开始关注kotlin,但是一直没有学习,在今年的夏天,发现越来越多的开源框架都是从kotlin语言来编写,这时候才意识到是时候来学习一波了.下面开始跟着笔者一起来接触下kotlin大法吧.
kotlin函数、变量和方法
1.Hello World
接触一门语言,那我们就从最基础的Hello World!
开始吧.
fun main(args:Array<String>){ println("Hello World!") }
关键字
fun
用来声明一个函数.参数的声明也和java有所不同,参数名在前面,类型在后面,后面声明变量都是如此.
同时kotlin也使用了
println
来取代java的System.out.println()
,kotlin的标准库中提供了很多简便的写法,我们后面会慢慢的接触到.这时候不知道大家发现没,kotlin在
println()
结束后并没有';'这和JavaScript.Python等都是同样的写法.
2.变量
接下来我们来学习变量的声明:
val val_num:Int = 1 var var_num:Int = 1 var_num = 2 println("val: $val_num,var: $var_num")
这里我们发现声明变量虽然是变量名在前,但是增加了var和val修饰符,这两者有何区别和联系呢?
val:不可变引用,使用val修饰符声明的变量不能在初始化之后再次赋值.它跟java的final是同理的.
var:可变引用,这种变量的值是可以被改变的,不受限制.
我们在Java中如果想要打印一个变量的值,写法应该是println("val: " + val_num)
,但是在kotlin中完全不必要这么写了,在kotlin中使用'$'转义符,就可以实现打印的效果,是不是更简洁更方便了.
3.函数
在Hello World中我们就知道如何声明一个函数了,那么我们再学习下如何声明一个带返回值的函数
fun main(args: Array<String>) { println(max(1, 2)) }fun max(a: Int, b: Int): Int { return if (a > b) a else b }
可以看到max函数的作用就是取两个值中最大值,然后将最大值返回,这跟Java的写法就有所不同了,Java是把返回值放在了函数名前面,所以大家要习惯两者之间的区别.
其实这种方法体只有一句话的可以更加简便的表达,如下:
fun main(args: Array<String>) { println(max(1, 2)) }fun max(a: Int, b: Int): Int = if (a > b) a else b
这种被称为表达式函数体,因为它的函数提是由单个表达式构成的,直接可以去掉()
和return
,看了这个写法是不是觉得kotlin的语法真心的很简洁,不急,我们继续简写下上面的代码,大家有没有发现函数体返回了一个int
型的数值,那么kotlin可以通过类型推导来确认返回值的类型,这时候我们的返回值都可以省略了,见下面代码:
fun main(args: Array<String>) { println(max(1, 2)) }fun max(a: Int, b: Int) = if (a > b) a else b
这里注意了,这种有kotlin类型推导来确认返回值类型的只能用在表达式函数中,对于代码块函数来说,必须显式的写出返回值类型和return
语句.
4.类
我们通过声明一个Button类,来熟悉下kotlin中类的写法.
class Button(val id: Int, val text: String) { fun showText() { println("Button id is: $id,Text is: $text") } }fun main(args: Array<String>) { val button: Button = Button(1, "button") button.showText() println("This button text is: " + button.text) }
上面代码中我们声明了一个Button类,并且声明了两个属性:id
和text
,类中有一个showText()
方法,打印了Button属性的信息.输出结果为Button id is: 1,Text is: button
和This button text is: button
我们可以看到,声明类的时候并没有修饰符,这是因为kotlin中类的修饰符默认为public
,所以可以省略它.其中的id
和text
是直接写在了类名后面,在Java中,如果我们要定义类的属性,可以在构造函数中声明,而kotlin却简化了这一步,当然你也可以跟Java写法一致,代码如下:
class Button { val id: Int val text: String constructor(id: Int, text: String) { this.id = id this.text = text } fun showText() { println("Button id is: $id,Text is: $text") } } fun main(args: Array<String>) { val button: Button = Button(1, "button") button.showText() println("This button text is: " + button.text) }
打印输出结果:Button id is: 1,Text is: button
和This button text is: button
,和上面是一样的,但是这个写法明显的很繁琐,没有在函数名后面直接定义属性的写法简便.
对比了kotlin和Java属性的写法之后,我们再来看看在main中调用Button
构造方法的写法,val button: Button = Button(1, "button")
这里并不像Java需要new
一个Button
对象,kotlin中是不需要new
一个新的对象,直接写对象名就行了,有默认属性加上默认属性.
最后我们说说类的属性问题,我们试着去调用下Button中的text
属性,看看如何使用.对于一个val
修饰的属性,在调用这个属性的时候只是可读的,并不可写,如果你需要对这个属性加以写操作,你必须是var
修饰.下面看看代码:
class Button(val id: Int, var text: String) fun main(args: Array<String>) { val button: Button = Button(1, "button") println("This button text is: " + button.id) println("This button text is: " + button.text) button.text = "new button" println("This button text is: " + button.text) }
输出结果:
This button text is: 1This button text is: button This button text is: new button
如果你给id
重新赋值,编辑器将会报错,它只是可读并不可写,而text
就可以重新赋值.
无论是读还是写,都是通过kotlin的访问器方法来访问的,也就是大家熟悉的setter
和getter
,button.id
对应的是setter
,button.text = "new button"
对应的就是getter
.
如果我们不想使用默认的访问器,那么我们就可以自定义一个访问器来满足我们的需求.比如我们想知道这不button
是否有字体显示,我们定义一个isShow
属性来代表它有没有显示的内容,代码如下:
class Button(val id: Int, var text: String) { val isShow: Boolean get() { return !text.isEmpty() } } fun main(args: Array<String>) { val button: Button = Button(1, "button") println("button isShow: " + button.isShow) val button1: Button = Button(1, "") println("button1 isShow: " + button1.isShow) }
输出结果:
button isShow: truebutton1 isShow: false
通过重写get()方法就可以自定义一个访问器方法啦.
这期就介绍到这里啦,下期将为大家介绍kotlin的选择处理:when、for等等
作者:Taonce
链接:https://www.jianshu.com/p/feb7a0b4dc41
共同学习,写下你的评论
评论加载中...
作者其他优质文章