Перефразируя мудрого старого Криса, когда я был молодым разработчиком, замечательная особенность 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")) }
На самом деле вы можете написать код, который будет делать то, что показано на фотографии вверху.