Попытка глубоко разобраться в инфиксных функциях. Не могли бы вы привести пример решения из Java, которое можно решить с помощью инфикса из Kotlin. PS Пожалуйста, дайте мне знать, если мой вопрос некорректен, если вы хотите его посвятить. Это помогает мне лучше задавать вопросы





В Java нет аналогичной концепции. Как объясняется в официальная документация, он просто позволяет вам вызывать функцию без . и (), что делает ее более чистой и менее подробной. Например:
infix fun Int.shl(x: Int): Int { ... }
// calling the function using the infix notation
1 shl 2
// is the same as
1.shl(2)
Как видите, это не решает ничего, чего нельзя было бы решить с помощью обычного вызова функции. Это просто синтаксический сахар.
Kotlin поддерживает перегрузка оператора и инфиксные функции, Java тоже не поддерживает.
Эти особенности языка — всего лишь синтаксический сахар. Все, что вы делаете с операторами или инфиксными функциями, можно обойтись и без них, но они могут значительно улучшить читабельность вашего кода.
Инфиксная функция подобна именованному оператору и может вызываться без точки и круглых скобок. Пример из документации выглядит так:
infix fun Int.shl(x: Int): Int { ... } // calling the function using the infix notation 1 shl 2 // is the same as 1.shl(2)
Другой пример для корректировки времени. Мне нравится определять инфиксные функции, такие как
infix fun TemporalAmount.before(instant: Instant): Instant =
instant.minus(this)
Что позволяет мне писать
val yesterday = Period.ofDays(1) before Instant.now()
вместо
val yesterday = Instant.now().minus(Period.ofDays(1))
Это просто для удобства чтения, никаких других преимуществ, о которых я знаю.
В чем преимущество написания первого варианта вместо второго? Просто покраснение?