为了账号安全,请及时绑定邮箱和手机立即绑定

Kotlin入门笔记一:方法、变量、类

标签:
Java

kotlin简介

webp

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")

这里我们发现声明变量虽然是变量名在前,但是增加了varval修饰符,这两者有何区别和联系呢?

  • 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类,并且声明了两个属性:idtext,类中有一个showText()方法,打印了Button属性的信息.输出结果为Button id is: 1,Text is: buttonThis button text is: button

我们可以看到,声明类的时候并没有修饰符,这是因为kotlin中类的修饰符默认为public,所以可以省略它.其中的idtext是直接写在了类名后面,在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: buttonThis 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的访问器方法来访问的,也就是大家熟悉的settergetter,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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消