函式命名的中綴呼叫
kotlin允許我們事先一些我們自定義型別的運算子實現,這些運算子有固定的表示和固定的優先順序。為實現這樣的運算子,餓哦們提供了固定名字的數字函式和擴充套件函式。比如二元運算子的左值和一元運算子的引數型別
一元運算子
表示式轉換
+aa.pluns()
-aa.minus()
!aa.not()
決定a的型別,假設為t注意這些操作符合其他的一樣,都是被優化為基本型別並且不會產生多餘的開銷尋找接受者是t的無參函式
plus()
,比如數字函式或者擴充套件函式如果這樣的函式缺失或不明確,則返回錯誤
如果函式是當前函式或返回型別是
r
則表示式+a
是r
型別
表示式轉換a++
a.inc()+see below
b–b.dex()+see below
這些操作符允許修改接收者和返回型別
編譯器是這樣解決有字尾的操作符的,如a++
:
決定a的型別,假設t尋找無參函式計算表示式的效果是:inc()
,作用在接收者t如果返回型別是r必須是t的子類
把a的初始值儲存在a()中a—、++a、—a 的步驟是一樣的把a.inc()的結果作用在a上
把a()作為表示式的返回值
表示式轉換
a+ba.plus(b)
a-ba.minus(b)
a*ba.times(b)
a/ba.div(b)
a%ba.mod(b)
a…ba.rangeto(b)
表示式只是解決了該表中翻譯為列的表示式
表示式轉換a in b
b.contains(a)
a !in b
!b.contains(a)
in和!in的產生步驟是一樣的,但是引數順序是相反的標誌
轉換a[i]
a.get(i)
a[i,j]
a.get(i,j)
a[i_1,…,i_n]
a.get(i_1,…i_n)
a[i]=b
a.set(i,b)
a[i,j]=b
a.set(i,j,b)
a[i_1,…,i_n]=b
a.set(i_1,…,o_n,b)
方括號被準換為get set函式
標誌轉換
a(i)
a.invoke(i)
a(i,j)
a.invoke(i,j)
a(i_1,…,i_n)
a.invoke(i_1,…,i_n)
括號被準換為帶有正確引數的invoke引數
表示式轉換
a+=b
a.plusassign(b)
a-=b
a.minusassign(b)
a*=b
a.timesassign(b)
a/=b
a.divassign(b)
a%=b
a.modassign(b)
在分配a+=b時編譯器是下面這樣實現的:
右邊列的函式是否可用表示式對應的二元函式是否也可用,不可用報告錯誤
確定它的返回值是
unit
是否報告錯誤生成
a.plusassign(b)
否則試著生成a=a+b**
轉換a==b
a?.equals(b) ?: b.identityequals(null)
a!=b
!(a?.equals(b) ?: b.identityequals(null))
注意=== 和!==是不允許過載的
==操作符有兩點特別:
它被翻譯成乙個複雜的表示式,用於篩選空值,而且null==null是真它需要帶有特定簽名的函式,而不僅僅是特定名稱的函式,下面這樣:
fun
equals
(other:any?
):boolean
或者用相同的引數列表和返回型別的擴充套件功能標誌
轉換a>b
a.compareto(b)>0
aa.compareto(b)<0
a>=b
a.compareto(b)>=0
a<=b
a.compareto(b)<=0
所有的比較都轉為compareto
的呼叫,這個函式需要返回int
值
函式用infix
關鍵字標識的函式,叫中綴函式。
中綴函式必須符合以下幾點:
必須是成員函式或者是擴充套件函式必須只有乙個引數
這個引數必須是可變引數型別,而且不能有預設值
必須使用infix關鍵字修飾
//中綴函式
infix
fun string.
add(str:string)
:string
funtestinfix()
")}
輸出
my name is wangyong
第二十九課 邏輯「與」運算子
與 的異同點 相同點 二者都表示與操作,當且僅當運算子兩邊的運算元都為true時,其結果才為true,否則為false。不同點 在使用 進行運算時,不論左邊為true或者false,右邊的表示式都會進行運算。如果使用 進行運算時,當左邊為false時,右邊的表示式不會進行運算,因此 被稱作短路與,在...
Kotlin展開運算子
當你需要傳遞乙個陣列引數時,在kotlin中需要你解包陣列,以便每個陣列元素在函式中能作為單獨的引數來呼叫。我們使用 號來展開這個陣列。fun main one,two,three,four 下面這為錯誤的 fun main type mismatch inferred type is listbu...
Kotlin學習2 3 運算子
算術運算子用於數值型別的運算,kotlin語言支援基本的算術運算 加法 減法 乘法 除法 取餘 以及自增自減運算。如 var inta int 5 5 10 val intb int 10 2 8 val intc int 3 4 12 val intd int 10 5 2 val inte in...