Kotlin 中缀函数表示法
在本文中,我们将学习 Kotlin 函数中使用的中缀表示法。在 Kotlin 中,用中缀关键字标记的函数也可以使用中缀表示法调用,即不使用括号和点进行调用。
Kotlin 中有两种类型的中缀函数表示法——
- 标准库中缀函数表示法
- 用户定义的中缀函数符号
标准库中缀函数符号 –
当我们调用像 and、or、shr、shl 等运算符时,编译器会查找函数并调用所需的函数。有许多标准库中缀符号函数,但我们将在这里讨论其中的一些。
让我们一一讨论一些中缀符号。
1. 使用位和运算符的 Kotlin 程序 –
Kotlin
fun main(args: Array) {
var a = 15
var b = 12
var c = 11
// call using dot and parenthesis
var result1 =(a > b).and(a > c)
println("Boolean result1 = $result1")
// call using infix notation
var result2 =(a > b) and (a > c)
println("Boolean result1 = $result2")
}
Kotlin
fun main(args: Array) {
var a = 8
// // call using infix notation
var result1 = a shr 2
println("Signed shift right by 2 bit: $result1")
// call using dot and parenthesis
var result2 = a.shr(1)
println("Signed shift right by 1 bit: $result2")
}
Kotlin
fun main(args: Array) {
var a = 8
var b = 4
println(++a) // call using infix notation
println(a.inc()) // call using dot and parenthesis
println(--b) // call using infix notation
println(b.dec()) // call using dot and parenthesis
}
Kotlin
class math {
// user defined infix member function
infix fun square(n : Int): Int{
val num = n * n
return num
}
}
fun main(args: Array) {
val m = math()
// call using infix notation
val result = m square 3
print("The square of a number is: "+result)
}
Kotlin
class check{
// user defined infix member function
infix fun dataType(x: Any):Any{
var i = when(x){
is String -> "String"
is Int -> "Integer"
is Double -> "Double"
else -> "invalid"
}
return i
}
}
fun main(args: Array){
var chk = check()
// call using infix notation
var result = chk dataType 3.3
println(result)
}
输出:
Boolean result1 = true
Boolean result1 = true
解释:
在这里,我们使用中缀( a 和 b )调用了a.and(b)函数。
两者都在标准输出中产生相同的结果。
2. Kotlin 程序使用带符号的右移(shr)运算符–
科特林
fun main(args: Array) {
var a = 8
// // call using infix notation
var result1 = a shr 2
println("Signed shift right by 2 bit: $result1")
// call using dot and parenthesis
var result2 = a.shr(1)
println("Signed shift right by 1 bit: $result2")
}
输出:
Signed shift right by 2 bit: 2
Signed shift right by 1 bit: 4
解释:
在上面的程序中,我们使用了带符号的移位运算符。首先,使用中缀符号执行操作,然后使用点和括号执行操作。
如果我们用符号将值移位 2 位,则2 3 =8变为2 (3-2=1) =2 。
3. Kotlin 程序使用递增和递减运算符——
科特林
fun main(args: Array) {
var a = 8
var b = 4
println(++a) // call using infix notation
println(a.inc()) // call using dot and parenthesis
println(--b) // call using infix notation
println(b.dec()) // call using dot and parenthesis
}
输出:
9
10
3
2
解释:
在这里,我们使用了使用中缀符号的递增和递减运算符。
++a 代表 a(8) + 1 所以它打印 9
a.inc() 也代表 a(9) + 1 所以它打印 10
–b 代表 b(4) – 1 = 3
b.dec() 也代表 b(3)- 1 = 2
用户定义的中缀函数符号 –
如果函数满足以下要求,我们可以使用中缀表示法创建自己的函数:
- 必须是成员函数或扩展函数
- 它必须接受单个参数
- 参数不能接受可变数量的参数并且不能有默认值
- 必须用中缀关键字标记
使用中缀符号创建平方函数的 Kotlin 程序 -
科特林
class math {
// user defined infix member function
infix fun square(n : Int): Int{
val num = n * n
return num
}
}
fun main(args: Array) {
val m = math()
// call using infix notation
val result = m square 3
print("The square of a number is: "+result)
}
输出:
The square of a number is: 9
解释:
在上面的程序中,我们创建了自己的中缀符号函数( m square 3 )。
1.首先,我们在数学类中定义了中缀中缀符号函数,因为它必须是成员函数。
2.中缀关键字用于标记函数。
3.它只包含一个参数,没有默认值,函数返回类型也是Integer。
square(n : Int):Int
然后,我们为类math()创建一个对象
并使用中缀表示法调用该函数-
m square 3
它计算数字的平方并返回值 9
Kotlin 程序用中缀符号检查变量的数据类型 -
科特林
class check{
// user defined infix member function
infix fun dataType(x: Any):Any{
var i = when(x){
is String -> "String"
is Int -> "Integer"
is Double -> "Double"
else -> "invalid"
}
return i
}
}
fun main(args: Array){
var chk = check()
// call using infix notation
var result = chk dataType 3.3
println(result)
}
输出:
Double
解释:
我们创建了一个中缀符号函数来查找变量的数据类型。
数据类型已作为中缀调用中的参数传递-
chk dataType 3.3
when 检查传递参数的数据类型并返回所需的值。
在这里,它将Double返回到标准输出。
中缀函数与运算符的优先级 -
执行指令时优先级很重要。中缀函数调用的优先级低于算术运算运算符、类型转换和 rangeTo运算符。
以下表达式是等价的:
2 shr 1 + 2 and 2 shr (1 + 2)
1 until n * 2 and 0 until (n * 2)
xs union ys as Set<*> and xs union (ys as Set<*>)
另一方面,中缀函数调用的优先级高于布尔运算符&& 和 ||、is- 和 in-checks 以及其他一些运算符。
以下表达式也是等价的:
a xor b || c and a xor (b || c)
a in b xor c and a in (b xor c)