Kotlin(四) 方法
LanyuanXiaoyao's Blog ヽ(✿゚▽゚)ノ

Kotlin(四) 方法

2017-11-03

概述

kotlin使用的是和Java非常类似的一种方法声明格式,包括参数及其类型,以及返回值类型,由于我们知道的kotlin的语法,类型是放在后面的,所以我们可以看到方法返回值的类型也被写在了后面,同样使用冒号分隔

fun max(a: Int, b: Int): Int {
    // 这是的if是一种和Java的三元操作符(a > b ? a : b)非常类似的一种if语句的写法,当然啦,kotlin没有三元操作符
    return if (a > b) a else b
}

基本方法声明

可以从概述中看出Kotlin方法声明的基本结构

fun 方法名(参数1: 参数1类型, 参数2: 参数2类型...): 返回值类型 { }

方法参数

默认参数

Kotlin允许方法的参数带有默认值,带了默认值的参数,在调用这个方法的时候可以不传这个参数,然后方法中使用的就是这个参数的默认值

/**
 * 这里的c后面带着的是kotlin允许的c的默认值,指定了默认值的参数,在调用方法的时候可以不传这个参数
 */
fun max(a: Int, b: Int, c: Int = 1): Int {
    return if (a > b) a else b
}

可变长参数

Kotlin的可变长参数,使用vararg关键字指定,一个方法只能有一个不变长参数,但是不必一定是最后一个参数,如果可变长参数在中间的话,后面的参数需要显式指定

fun max(vararg c: String): String {
    return c[0]
}

参数名字

让我们尝试调用一下上例的max方法,我们很容易可以写出这样的代码

max(1, 2)

至少Java时代我们都是这么写的,但是这样的一个方法调用,可以让你清晰地知道方法的参数是怎么样的吗?可以知道调用的是什么参数吗?不能,但是在Kotlin里,我们可以把参数的名字一并写上

max(a = 1, b = 2)

扩展方法

声明

我们都知道在Java的时候,我们经常需要写很多的Util工具类来封装一些Java本身没有的通用的功能,尤其是在一些字符串处理的时候,反正我常常幻想要是String类本身就有XX功能就好了
所以Kotlin满足了我们这个愿望,通过写扩展方法,我们可以把我们自己的方法扩展到其他类本身,而不需要改变这个类,当然也不需要这个类的源码,甚至不需要这个类是Kotlin写的,只要是被编译成Java字节码来运行就可以了
下面就是在系统的String类中扩展出一个自定义的方法

// this关键字作为调用被扩展类对象本身
fun String.doSomething(): String {
    return this + " do something"
}

然后我们可以直接调用

// 调用扩展方法
println("Kotlin".doSomething())

当然结果就是

Kotlin do something

使用

实际上,当你定义完一个扩展方法的时候,它是不会在整个项目中自动随处可以调用的,在同包下的其他文件里,必须要通过导入import来使其生效,这有利于避免命名冲突,例如

import Learning_2_Function.doSomething

val c = "Kotlin".doSomething()

但是如果出现了冲突怎么办呢?就比如定义了两个同名的扩展方法在同一个类上,这时候我们可以帮导入的方法改个名字来避免冲突,使用as关键字

import Learning_2_Function.doSomething as do

val c = "Kotlin".do()

相似文章

评论