Вот в C++ любят делать кастомные операторы и вполне неплохо все продумано. Хотя список возможных операторов не такой уж большой, по сравнению с тем же Haskell (там можно даже >>== делать и прочие изрвраты).
В Java изначально отказались от операторов кастомных — ибо нефиг. Мало ли какой смысл ты вкладываешь в += или в << — лучше понятная и однозначная функция с читабельным именем.
В C# том же вроде и есть перегрузка, но настолько ущербная что смысла в ней нет, можно сказать что ее нет. И практически не используется.
И вопрос — вы любите эти значки разные или же лучше буквы?
=сначала спроси у GPT=
Re: Спец. символы (операторы) вместо функций - любите?
S>И вопрос — вы любите эти значки разные или же лучше буквы?
Некоторые вон даже begin end пишут вместо "значков разных"
Друга ищи не того, кто любезен с тобой, кто с тобой соглашается, а крепкого советника, кто полезного для тебя ищет и противится твоим необдуманным словам.
Re: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, Shmj, Вы писали:
S>И вопрос — вы любите эти значки разные или же лучше буквы?
Так это смотря для чего. Если по логике работы объекта есть подобие взятия по индексу, пусть какому-нибудь ассоциативному или еще неочевидному, почему бы и не использовать "[]" Наверно операция аналогичная по смыслу сложению к чему-то применима, хотя конкретного примера из работы что-то не припоминаю. Ну и остальные еще экзотичнее, но вдруг. Только ради того чтобы закорючку поставить вместо слова конечно не нужно, глупо и вредно.
Но вроде как Кэпом послужил
Re: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, Shmj, Вы писали:
S>Вот в C++ любят делать кастомные операторы и вполне неплохо все продумано. Хотя список возможных операторов не такой уж большой, по сравнению с тем же Haskell (там можно даже >>== делать и прочие изрвраты).
- Гиви, ты памыдоры лубиш?
— Ест лублу, а так — нэт!
Все хорошо в меру. В C++ можно перегрузить оператор запятая. То-то новички будут удивляться, если придать этому оператору нетривиальный смысл. Много ли кто вообще знает, что в Си и C++ запятая — это оператор?
Re[2]: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, pagid_, Вы писали:
_>Наверно операция аналогичная по смыслу сложению к чему-то применима, хотя конкретного примера из работы что-то не припоминаю.
Конкатенация строк.
Re: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, Shmj, Вы писали:
S>И вопрос — вы любите эти значки разные или же лучше буквы?
В общем случае — не люблю.
Есть ситуации, где перегрузка уместна. Самый очевидный пример: вместо BigDecimal.add() писать +. Т.е. для объектов, которые представляют из себя числа.
В С++ считаю сделано максимально отвратительно. Какое отношение битовый сдвиг имеет к вводу-выводу — я никогда не понимал и не пойму.
Про хаскель не помню. Но скорей всего мне это тоже не понравится. Я дитя западной цивилизации, мне привычны слова, а не иероглифы.
Pzz>Все хорошо в меру. В C++ можно перегрузить оператор запятая. То-то новички будут удивляться, если придать этому оператору нетривиальный смысл. Много ли кто вообще знает, что в Си и C++ запятая — это оператор?
Неновичков это тоже может удивить
Re[3]: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, Pzz, Вы писали:
_>>Наверно операция аналогичная по смыслу сложению к чему-то применима, хотя конкретного примера из работы что-то не припоминаю.
Pzz>Конкатенация строк.
На мой взгляд это плохое применение оператора сложения. Из-за него код print("a + b = " + a + b) не будет работать, как ожидается, а это достаточно частый юз-кейс. А если бы для конкатенации строк использовался отдельный оператор, например как в Lua, было бы проще: print("a + b = " .. a + b).
Ещё лучше использовать интерполяцию строк: print("a + b = \(a + b)"). С ней оператор сложения строк не нужен вообще. Любая операция вида a concatenate b заменяется на "\(a)\(b)".
Re[2]: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, vsb, Вы писали:
vsb>В С++ считаю сделано максимально отвратительно. Какое отношение битовый сдвиг имеет к вводу-выводу — я никогда не понимаю и не пойму.
Почему именно битовый сдвиг? Это у тебя просто привычка такая. А так: вполне логично сдвинуть (вдвинуть) в поток, выдвинуть из потока
vsb>Про хаскель не помню. Но скорей всего мне это тоже не понравится. Я дитя западной цивилизации, мне привычны слова, а не иероглифы.
Математику, видимо, тоже не любишь. Кстати, современную математику в основном разработала западная цивилизация, если что
Re[3]: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, пффф, Вы писали:
vsb>>В С++ считаю сделано максимально отвратительно. Какое отношение битовый сдвиг имеет к вводу-выводу — я никогда не понимаю и не пойму.
П>Почему именно битовый сдвиг? Это у тебя просто привычка такая. А так: вполне логично сдвинуть (вдвинуть) в поток, выдвинуть из потока
Потому, что C++ это надстройка над C. В которой у сочетания символов << есть вполне определённое значение — битовый сдвиг. И без перегрузки оператора в С++ у этого сочетания символов ровно такое же значение.
Я не вижу в этом ничего логичного. Для меня логично писать print. Никто в юниксе ничего никуда не сдвигает.
vsb>>Про хаскель не помню. Но скорей всего мне это тоже не понравится. Я дитя западной цивилизации, мне привычны слова, а не иероглифы.
П>Математику, видимо, тоже не любишь. Кстати, современную математику в основном разработала западная цивилизация, если что
К программированию математика не имеет никакого отношения.
Re[4]: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, vsb, Вы писали:
vsb>Потому, что C++ это надстройка над C. В которой у сочетания символов << есть вполне определённое значение — битовый сдвиг. И без перегрузки оператора в С++ у этого сочетания символов ровно такое же значение.
В C у каждого оператора ровно одно значение
vsb>Я не вижу в этом ничего логичного. Для меня логично писать print. Никто в юниксе ничего никуда не сдвигает.
Очень даже в юниксе сдвигают. '<' — перенаправление ввода из файла, '>' — перенаправление вывода в файл с перезаписью, '>>' — перенаправление вывода в файл с дозаписью в конец. Как могли эти юниксоиды использовать сишечный битовый сдвиг? Кто это придумывал, сами на сишечке писали, если что
vsb>>>Про хаскель не помню. Но скорей всего мне это тоже не понравится. Я дитя западной цивилизации, мне привычны слова, а не иероглифы.
П>>Математику, видимо, тоже не любишь. Кстати, современную математику в основном разработала западная цивилизация, если что
vsb>К программированию математика не имеет никакого отношения.
Очень даже имеет.
Re[4]: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, vsb, Вы писали:
vsb>На мой взгляд это плохое применение оператора сложения. Из-за него код print("a + b = " + a + b) не будет работать, как ожидается, а это достаточно частый юз-кейс. А если бы для конкатенации строк использовался отдельный оператор, например как в Lua, было бы проще: print("a + b = " .. a + b).
Это, наверное, очень индивидуально. Я ни разу в жизни не сделал такую описку. А кто-то может делает постянно.
Re[3]: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, пффф, Вы писали:
Pzz>>Все хорошо в меру. В C++ можно перегрузить оператор запятая. То-то новички будут удивляться, если придать этому оператору нетривиальный смысл. Много ли кто вообще знает, что в Си и C++ запятая — это оператор?
П>Неновичков это тоже может удивить
А чтобы было еще интереснее программировать, операторы ||, && и запятая имеют гарантии порядка исполнения, слева направо. Т.е., выражение p != NULL && *p != 0 безопасно, оно сначала проверит указатель на NULL и только потом полезет в память, на которую он указывает.
Но это пока они не перегружены. А перегруженные эти операторы теряют гарантии порядка исполнения, и будут исполняться в том порядке, в котором компилятору сегодня показалось удобно.
Re[2]: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, mike_rs, Вы писали: _>далеко не всегда функция может заменить оператор. см. lvalue / rvalue
В языках с поддержкой ссылок функция возвращает lvalue ровно так же, как и кастомный оператор.
Я вот по невежеству своему не знаю таких языков, в которых бы одновременно была перегрузка операторов и не было бы ref типов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Спец. символы (операторы) вместо функций - любите?
Здравствуйте, Shmj, Вы писали:
S>И вопрос — вы любите эти значки разные или же лучше буквы?
Смотря какой код пишется.
Алгебраический стиль написания кода подразумевает построение цепочек выражений. Запись этих цепочек в виде префиксных функций получается очень громоздкой.
"Мало ли какой смысл" — это страшилка для новичков. На практике операторы очень редко перегружаются неожиданным образом, и ещё реже — контринтуитивным.
Затраты на обучение тому, что + обозначает конкатенацию строк, а [] — доступ к словарю по ключу, с лихвой окупаются экономией времени на разбор кода.
Что понятнее?
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, mike_rs, Вы писали: _>>далеко не всегда функция может заменить оператор. см. lvalue / rvalue S>В языках с поддержкой ссылок функция возвращает lvalue ровно так же, как и кастомный оператор.
а вот тут уже на первый план выходит компактность записи и удобство использования.
std::cout << "some data: " << a << "eeg: " << b << functionCallI() << " done";
запиши без перегруженного оператора <<, чисто на функциях?
Re[4]: Спец. символы (операторы) вместо функций - любите?