Kotlin Academy · Урок

Инфиксные функции

Понятные вызовы функций

Урок 1 из 413 шагов

«Инфиксные функции» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Инфиксные функции
  2. Создание API в стиле DSL
  3. Функции tailrec
  4. Когда что использовать
← Назад к Kotlin Academy