Kotlin初级(3)- - - 基础函数.md

2018-09-30 10:45:31 浏览数 (1)

函数的声明和使用

Kotlin中函数的声明使用关键字 fun 格式为:可见性修饰符 fun 函数名(参数名 :类型):返回值{}

例如:

代码语言:javascript复制
fun main(){
    
}
  • 上面的例子没有可见性修饰符,因为Kotlin中默认为public
  • 函数没有返回值时可以省略

函数的作用范围

1.成员函数

成员函数是指在类或对象中的内部函数 例如:

代码语言:javascript复制
class Demo{
    fun main(){}
}

2.本地函数

本地函数允许把小函数声明在其他函数内部,甚至可以多层嵌套

例如

代码语言:javascript复制
fun printArea(w: Int,h: Int){
    fun area(w: Int,h: Int){
        return w * h
    }
    val area = area(w,h)
    print(area)
}

area函数在printArea外部无效,它只服务于printArea。这在实现一个大函数时隐藏实现的细节是非常有用的。除此之外,本地函数还有一个好处就是可以访问嵌套住函数中的变量,例如:

代码语言:javascript复制
fun printArea(w: Int,h: Int){
    fun area() = w * h
    
    val area = area(w,h)
    print(area) 
}

3.顶层函数

所谓顶层函数,即这些函数不属于任何源码文件的小集团(class,对象,interface),而是直接定义在源码文件中的。他们在所有小集团的层级之上。 在定义通用性的工具栏和帮助类函数时非常有用,源码的各个部分可能都需要用它。

命名参数和默认参数

1.命名参数

可以在调用函数时把参数的名字写出来。好处是一旦参数众多,调用时会看的比较清楚,代码可读性高。

例如:

代码语言:javascript复制
fun printPerson(p: Person){
    print(p.match(age = 20,
    name = "hankkin",
    nickname = "xxx",
    sex = "男",
    weight = "120"))
}

当然在AS中,默认会显示参数的hint,很方便了,所以一般很少用。

2.默认参数

在Kotlin中可以定义一个或者多个默认参数,在被调用时如果不指定,则使用默认值。

代码语言:javascript复制
fun valueOf(unscaledVal: Int = 0,scale: Int,prec: Int = 1)

函数操作符

函数操作符用了一个符号来表示。Kotlin中的函数有很多内置的操作符。例如array[1],[1]就相当于数组的.get(1)方法

1.操作符重载

Kotlin允许为预定义操作符提供自定义的实现。这些操作符具有固定符号表示(如 - * /),固定的优先级precedence。有相应的成员函数member function或扩展函数extension function,重载操作符的函数必需要用operator修饰符标记

2.基础操作符

操作

函数名

!x

x.not()

-y

y.unaryMinus()

z

z.unaryPlus()

a…b

a…rangeTo(b)

c d

c.plus(d)

e - f

e.minus(f)

g * h

g.times(h)

m % n

m.mod(n)

i/j

i.div(j)

函数扩展

1.扩展函数的优先级

扩展函数不能重载类或者接口中已经定义的函数。如果你定义了一个与既有函数一摸一样的扩展函数,名字一样,参数一样,这个扩展时无效的。

2.扩展函数的作用范围

通常我们用顶层函数做扩展,但也可以在类中做扩展

3.扩展函数在子类中的重载

子类中可以重载成员扩展函数,前提是这个类是open,即可重载的。在这种情况下,子类的函数接受者类型是由运行时的实例决定的,而扩展的接受者类型始终时编译时就确定的,也就是静态的

4.infix中缀函数

中缀函数跟赋值操作符有点像,不同的是名称可以是任意的。例如Kotlin自带的to函数,可以把两个变量凑成一个二元祖。Kotlin中可以把成员函数定义成中缀。因为中缀函数是二元的,必须有2个参数,第一个很显然是实例,第二个是函数的参数

0 人点赞