Инфиксные функции
Понятные вызовы функций
«Инфиксные функции» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Что такое инфиксная функция
Инфиксную функцию можно вызывать без точки и скобок: a func b. Для этого пометьте её ключевым словом infix.
infix fun Int.times2(factor: Int) = this * factor
fun main() {
println(3 times2 4)
}Правила для инфиксных функций
Инфиксная функция должна быть методом-членом или функцией-расширением, принимать ровно один параметр, причём этот параметр не должен быть переменным или иметь значения по умолчанию.
infix fun Int.plusBy(other: Int) = this + other
fun main() {
println(5 plusBy 7)
}Встроенные инфиксные функции
Многие стандартные функции являются инфиксными: to (создаёт пару), and, or, shl, а также until, downTo и step для диапазонов.
fun main() {
val pair = "key" to 42
println(pair)
for (i in 1 until 4) print(i)
}Создание пары с помощью to
Знакомый синтаксис отображения "a" to 1 — это всего лишь инфиксная функция to, возвращающая пару.
fun main() {
val map = mapOf(1 to "one", 2 to "two")
println(map[2])
}Инфиксная функция как метод-член
Инфиксные функции могут быть методами-членами, что позволяет записывать выразительные выражения предметной области.
class Money(val cents: Int) {
infix fun add(o: Money) = Money(cents + o.cents)
}
fun main() {
val total = Money(100) add Money(50)
println(total.cents)
}Сначала — читаемость
Инфиксные функции особенно полезны, когда вызов читается как предложение. Выбирайте имена, похожие на глаголы, чтобы конструкция a name b звучала естественно.
infix fun String.repeatedTimes(n: Int) = this.repeat(n)
fun main() {
println("ab" repeatedTimes 3)
}Приоритет инфиксных вызовов
Инфиксные вызовы имеют более низкий приоритет, чем арифметические операции, но более высокий, чем сравнения. При смешивании операций добавляйте скобки для ясности.
infix fun Int.combine(o: Int) = this * 10 + o
fun main() {
println(1 combine 2 + 3)
}Получатель this
В инфиксном расширении this является левым операндом, а параметр — правым.
infix fun Int.minus2(o: Int) = this - o
fun main() {
println(10 minus2 3)
}Цепочки инфиксных вызовов
Инфиксные вызовы ассоциативны слева, поэтому их можно объединять в цепочки.
infix fun Int.then(o: Int) = this + o
fun main() {
println(1 then 2 then 3)
}Не злоупотребляйте инфиксными функциями
Инфиксная запись убирает точки и скобки, что может ухудшить ясность для неочевидных операций. Используйте её только там, где она делает код более понятным.
infix fun Int.power(exp: Int): Int {
var r = 1
repeat(exp) { r *= this }
return r
}
fun main() {
println(2 power 5)
}Пример выразительной записи
Инфиксные функции могут сделать утверждения или построители почти похожими на обычный английский текст.
infix fun String.shouldStartWith(prefix: String) =
this.startsWith(prefix)
fun main() {
println("kotlin" shouldStartWith "kot")
}Быстрая проверка
Проверьте, насколько хорошо Вы поняли инфиксные функции.
Итоги
Вы изучили инфиксные функции:
- Помечайте их ключевым словом
infixи вызывайте какa func b. - Такая функция должна быть методом-членом или расширением с одним параметром без переменного числа аргументов и значения по умолчанию.
to,untilиdownTo— встроенные инфиксные функции.- Используйте их там, где они действительно повышают читаемость.
infix fun Int.add(o: Int) = this + o
fun main() {
println(4 add 6)
}Изучай Kotlin с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 51
- Уроки
- 203
Часто задаваемые вопросы
Урок «Инфиксные функции» бесплатный?
Да — полный текст урока «Инфиксные функции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Инфиксные функции»?
Понятные вызовы функций Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Инфиксные функции»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Инфиксные функции
- Создание API в стиле DSL
- Функции tailrec
- Когда что использовать