函数

作者: warmingood | 来源:发表于2018-05-17 15:48 被阅读0次

    1.函数的定义

    有名字的一段代码块,执行和名字有关的功能

    // 函数
    fun add(x:Int, y:Int):Int{
      return x+y
    }
    // 可以简写为
    fun add(x: Int, y: Int) = x+y
    

    2.可变参数修饰符 vararg

    输入的参数个数可变

    fun add(vararg x: Int):Int{
      var total = 0
      for(i in x){
        total+=i
      }
      return total
    }
    // 调用
    var num = add(1, 2, 3, 4, 5)
    // 调用方式2,如果参数是可变参数类型,那么可以传入一个数组(前面加一个*)解包
    var array = arrayOf(1,2,3,4,5)
    var num2 = add(*array)
    

    3.函数的作用域

    3.1 成员函数

    定义在类,object或者接口内的函数,也成为方法

    3.2 本地函数

    Kotlin允许把函数声明在其他函数的内部,称之为本地函数或者嵌套函数
    内部的函数只有在外部函数内才能生效
    内部函数可以访问嵌套主函数的变量,不需要重新声明

    fun printArea(w: Int, h:Int){
      // 声明在函数内部的函数
      // fun area(w:Int, h:Int) = w * h
      // 可以访问嵌套主函数的变量
      fun area = w * h
      val area = area()
      print(${area})
    }
    
    3.3 顶层函数

    不属于任何源码文件的小集团(class interface 对象),就像java中的静态帮助类

    4.命名参数和默认参数

    4.1命名参数

    调用函数传参时指出参数的名称

    fun area(weight: Int, height: Int) = weight*height
    area(height = 2, weight = 3)
    
    4.2 默认参数

    定义函数时给出默认值
    fun add(x:Int = 1, y:Int = 2) = x+y

    5.操作符重载

    有一组固定的操作符可以用作函数,但是不能组合使用
    要进行操作符重载的话,需要在前面添加operator关键字,对应的操作符英文单词作为函数的名称

    class Matrix(val a: Int, val b:Int, val c:Int, val d:Int){
       operator fun plus(m: Matrix): Matrix{
         return Matrix(a+m.a, b+m.b, c+m.c, d+m.d)
      }
    }
    // 调用
    val m1 = Matrix(1,2,3,4)
    val m2 = Matrix(2,3,4,5)
    val m1m2 = m1+m2
    

    6.基础操作符

    操作 函数名
    a + b a.plus(b)
    c - d c.minus(d)
    e * f e.times(f)
    g / h g.div(h)
    i % j i.mod(j)
    k..m k.rangeTo(m)
    6.1 in 和 contains()
    6.2 invoke 和 ()

    圆括号也是操作符 对应函数名为invoke

    7.函数扩展

    像顶层函数一样定义,直接举例

    fun Int.square() = this*this
    // 调用
    val num = 3
    num.square()
    

    操作符重载加上扩展方法

    operator fun String.times(int:Int):String{
      var stringBuilder = StringBuilder()
      // 0..100就是[0,100]
      // 0 until 100 就是[0,100) 不包含结束的范围
      for(i in 0 util int){
        stringBuilder.append(this)
      }
      return stringBuilder
    }
    
    var a = "min"
    printLn(a*13)
    

    8.泛型函数

    使用泛型可以让函数接收任意类型的参数

    fun <T> outputString(a:T, b:T):String{
      return "$a和$b" 
    }
    

    相关文章

      网友评论

          本文标题:函数

          本文链接:https://www.haomeiwen.com/subject/efhvdftx.html