Kotlin初級(3)- - - 基礎函數.md

函數的聲明和使用

Kotlin中函數的聲明使用關鍵字 fun 格式爲:可見性修飾符 fun 函數名(參數名 :類型):返回值{}

例如:

fun main(){
    
}
  • 上面的例子沒有可見性修飾符,因爲Kotlin中默認爲public
  • 函數沒有返回值時可以省略

函數的作用範圍

1.成員函數

成員函數是指在類或對象中的內部函數 例如:

class Demo{
    fun main(){}
}

2.本地函數

本地函數允許把小函數聲明在其他函數內部,甚至可以多層嵌套

例如

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。這在實現一個大函數時隱藏實現的細節是非常有用的。除此之外,本地函數還有一個好處就是可以訪問嵌套住函數中的變量,例如:

fun printArea(w: Int,h: Int){
    fun area() = w * h
    
    val area = area(w,h)
    print(area) 
}

3.頂層函數

所謂頂層函數,即這些函數不屬於任何源碼文件的小集團(class,對象,interface),而是直接定義在源碼文件中的。他們在所有小集團的層級之上。 在定義通用性的工具欄和幫助類函數時非常有用,源碼的各個部分可能都需要用它。

命名參數和默認參數

1.命名參數

可以在調用函數時把參數的名字寫出來。好處是一旦參數衆多,調用時會看的比較清楚,代碼可讀性高。

例如:

fun printPerson(p: Person){
    print(p.match(age = 20,
    name = "hankkin",
    nickname = "xxx",
    sex = "男",
    weight = "120"))
}

當然在AS中,默認會顯示參數的hint,很方便了,所以一般很少用。

2.默認參數

在Kotlin中可以定義一個或者多個默認參數,在被調用時如果不指定,則使用默認值。

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個參數,第一個很顯然是實例,第二個是函數的參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章