Здравствуй, дорогой читатель!
Сегодня мы поговорим зачем нужно ключевое слово infix в Котлине.
А нужно оно чтобы сделать красивый код на Kotlin еще красивее:)
👉 Допустим вы хотите возвести некоторое число в степень, и у вас есть функция для этого:
fun Int.raise(n : Int) = this.toDouble().pow(n).toInt()
Обычно вы вызываете её вот так:
fun main() {
val result = 2.raise(3)
println(result)
}
Всё хорошо, но можно сделать красивее и нагляднее, например вообще избавиться от точки и скобок. Для этого нам понадобится пометить нашу функцию ключевым словом infix:
infix fun Int.raise(n : Int) = this.toDouble().pow(n).toInt()
И теперь мы можем вызывать ее вот так:
fun main() {
val result = 2 raise 3
println(result)
}
Вы видите, что ушли скобки, точка, а сам вызов функции выглядит как какая-то операция встроенная в сам Kotlin :) Но — нет, она полностью наша.
👉 Рассмотрим ещё пример. Допустим у нас есть функция, которая считает количество определенных символов в строке. Сразу пометим ее как infix-ную:
infix fun String.count(char : Char) = this.count { it == char }
Мы можем вызвать ее вот так :
fun main() {
val result = "Vasya Petya Masha " count 'a'
println(result)
}
И узнать сколько букв «а» в строке. Ну разве это не красиво? :)
👉 Кстати, infix-ной можно сделать не любую функцию. Подходят функции расширения или же функции классов, кроме того можно писать такие функции внутри других функций. Но важно знать что, параметр у такой функции может быть только один, он не должен быть vararg, и не должен иметь значения по умолчанию.
Вот пример где используется infix-функция в классе:
class MyMath {
infix fun cubing(n : Int) = n * n * n
}
fun main() {
val math = MyMath()
val result = math cubing 2
print(result)
}
👉 Здесь важно отметить, что такая функция должна иметь получателя, а не только параметр. В примере выше, им выступает переменная math.
Пока на этом всё. Спасибо что читали, если есть вопросы то задайте их в комментариях.
Ставте лайк и подписывайтесь на канал, это действительно помогает для продвижения.
А я пока поищу про какие ещё фишки Котлин вам рассказать :)