Перефразируя мудрого старого Криса, когда я был молодым разработчиком, замечательная особенность C++, позволяющая вам создавать свои собственные схемы операторов, заключается в том, что вы можете сделать что-то, что прекрасно подходит вам и вашему варианту использования, и хуже всего то, что это делают все остальные. это тоже, так что тогда вам придется иметь дело со всеми их сумасшедшими, бессмысленными пожарами в мусорных баках.

C++ позволит вам определять встроенные операторы, используя любой из предопределенных наборов символов (+, -, *, % и многие другие) без каких-либо реальных ограничений или даже указаний, так что тогда вы будете читать чужой код, который они использовали. соло-йоло слишком долго, и вы столкнетесь с махинациями, такими как умножение массива файлов на строку, а затем добавление результата в итератор базы данных. Или, разделив пользователя по дате. Что это вообще значит? Это добавляет время для понимания кода. Оглядываясь назад, можно сказать, что все в C++ было пушкой, если только вы явно не были очень осторожны.

Кажется, Kotlin перенес эти махинации в 2020-е годы. По крайней мере, это заставляет вас читать и вводить имена, которые вызовут у вас некоторый когнитивный диссонанс, если вы заставите оператора делать что-то, что не соответствует словам на вашем экране. Например. если вы создаете оператор +, вам нужно вызвать функцию plus().

Это все еще потенциально ножной пистолет, но, возможно, в меньшей степени. В наши дни, вероятно, также существует более высокая премия за читаемый код.

data class Person(private val name: String)
data class People(private val people: List<Person>)
inline operator fun Person.plus(somebodyElse: Person) = listOf(this, somebodyElse)
fun printPeople() {
    println(Person("me") + Person("you"))
}

На самом деле вы можете написать код, который будет делать то, что показано на фотографии вверху.