函數(shù)

1.函數(shù)的定義

有名字的一段代碼塊,執(zhí)行和名字有關(guān)的功能

// 函數(shù)
fun add(x:Int, y:Int):Int{
  return x+y
}
// 可以簡寫為
fun add(x: Int, y: Int) = x+y

2.可變參數(shù)修飾符 vararg

輸入的參數(shù)個(gè)數(shù)可變

fun add(vararg x: Int):Int{
  var total = 0
  for(i in x){
    total+=i
  }
  return total
}
// 調(diào)用
var num = add(1, 2, 3, 4, 5)
// 調(diào)用方式2,如果參數(shù)是可變參數(shù)類型,那么可以傳入一個(gè)數(shù)組(前面加一個(gè)*)解包
var array = arrayOf(1,2,3,4,5)
var num2 = add(*array)

3.函數(shù)的作用域

3.1 成員函數(shù)

定義在類,object或者接口內(nèi)的函數(shù),也成為方法

3.2 本地函數(shù)

Kotlin允許把函數(shù)聲明在其他函數(shù)的內(nèi)部,稱之為本地函數(shù)或者嵌套函數(shù)
內(nèi)部的函數(shù)只有在外部函數(shù)內(nèi)才能生效
內(nèi)部函數(shù)可以訪問嵌套主函數(shù)的變量,不需要重新聲明

fun printArea(w: Int, h:Int){
  // 聲明在函數(shù)內(nèi)部的函數(shù)
  // fun area(w:Int, h:Int) = w * h
  // 可以訪問嵌套主函數(shù)的變量
  fun area = w * h
  val area = area()
  print(${area})
}
3.3 頂層函數(shù)

不屬于任何源碼文件的小集團(tuán)(class interface 對象),就像java中的靜態(tài)幫助類

4.命名參數(shù)和默認(rèn)參數(shù)

4.1命名參數(shù)

調(diào)用函數(shù)傳參時(shí)指出參數(shù)的名稱

fun area(weight: Int, height: Int) = weight*height
area(height = 2, weight = 3)
4.2 默認(rèn)參數(shù)

定義函數(shù)時(shí)給出默認(rèn)值
fun add(x:Int = 1, y:Int = 2) = x+y

5.操作符重載

有一組固定的操作符可以用作函數(shù),但是不能組合使用
要進(jìn)行操作符重載的話,需要在前面添加operator關(guān)鍵字,對應(yīng)的操作符英文單詞作為函數(shù)的名稱

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)
  }
}
// 調(diào)用
val m1 = Matrix(1,2,3,4)
val m2 = Matrix(2,3,4,5)
val m1m2 = m1+m2

6.基礎(chǔ)操作符

操作 函數(shù)名
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 和 ()

圓括號(hào)也是操作符 對應(yīng)函數(shù)名為invoke

7.函數(shù)擴(kuò)展

像頂層函數(shù)一樣定義,直接舉例

fun Int.square() = this*this
// 調(diào)用
val num = 3
num.square()

操作符重載加上擴(kuò)展方法

operator fun String.times(int:Int):String{
  var stringBuilder = StringBuilder()
  // 0..100就是[0,100]
  // 0 until 100 就是[0,100) 不包含結(jié)束的范圍
  for(i in 0 util int){
    stringBuilder.append(this)
  }
  return stringBuilder
}

var a = "min"
printLn(a*13)

8.泛型函數(shù)

使用泛型可以讓函數(shù)接收任意類型的參數(shù)

fun <T> outputString(a:T, b:T):String{
  return "$a和$b" 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)和對象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句,而且...
    道無虛閱讀 4,950評論 0 5
  • 原文鏈接:https://github.com/EasyKotlin 值就是函數(shù),函數(shù)就是值。所有函數(shù)都消費(fèi)函數(shù),...
    JackChen1024閱讀 6,338評論 1 17
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,692評論 9 118
  • 函數(shù)參數(shù)的默認(rèn)值 基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。 上面代碼檢查函數(shù)l...
    呼呼哥閱讀 3,703評論 0 1
  • 轉(zhuǎn)眼,年齡的末位數(shù)就要輪到5了,呀!又一個(gè)5年,又一個(gè)10年,又一段那么不一樣的旅途。比起以往對自己的失望,嫌自己...
    Amy222閱讀 411評論 0 1

友情鏈接更多精彩內(nèi)容