Спец. символы (операторы) вместо функций - любите?
От: Shmj Ниоткуда  
Дата: 13.08.24 13:52
Оценка:
Вот в C++ любят делать кастомные операторы и вполне неплохо все продумано. Хотя список возможных операторов не такой уж большой, по сравнению с тем же Haskell (там можно даже >>== делать и прочие изрвраты).

В Java изначально отказались от операторов кастомных — ибо нефиг. Мало ли какой смысл ты вкладываешь в += или в << — лучше понятная и однозначная функция с читабельным именем.

В C# том же вроде и есть перегрузка, но настолько ущербная что смысла в ней нет, можно сказать что ее нет. И практически не используется.

И вопрос — вы любите эти значки разные или же лучше буквы?
=сначала спроси у GPT=
Re: Спец. символы (операторы) вместо функций - любите?
От: Нomunculus Россия  
Дата: 13.08.24 14:31
Оценка:
Здравствуйте, Shmj, Вы писали:

Не люблю, но иногда библиотеки или шаблоны требуют шоб було
Re: Спец. символы (операторы) вместо функций - любите?
От: Osaka  
Дата: 13.08.24 15:10
Оценка:
S>И вопрос — вы любите эти значки разные или же лучше буквы?
Некоторые вон даже begin end пишут вместо "значков разных"
Друга ищи не того, кто любезен с тобой, кто с тобой соглашается, а крепкого советника, кто полезного для тебя ищет и противится твоим необдуманным словам.
Re: Спец. символы (операторы) вместо функций - любите?
От: pagid_ Россия  
Дата: 13.08.24 16:28
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>И вопрос — вы любите эти значки разные или же лучше буквы?

Так это смотря для чего. Если по логике работы объекта есть подобие взятия по индексу, пусть какому-нибудь ассоциативному или еще неочевидному, почему бы и не использовать "[]" Наверно операция аналогичная по смыслу сложению к чему-то применима, хотя конкретного примера из работы что-то не припоминаю. Ну и остальные еще экзотичнее, но вдруг. Только ради того чтобы закорючку поставить вместо слова конечно не нужно, глупо и вредно.
Но вроде как Кэпом послужил
Re: Спец. символы (операторы) вместо функций - любите?
От: mike_rs Россия  
Дата: 13.08.24 16:45
Оценка:
Здравствуйте, Shmj, Вы писали:

S>И вопрос — вы любите эти значки разные или же лучше буквы?


далеко не всегда функция может заменить оператор. см. lvalue / rvalue
Отредактировано 13.08.2024 16:45 mike_rs . Предыдущая версия .
Re: Спец. символы (операторы) вместо функций - любите?
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.24 18:17
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Вот в C++ любят делать кастомные операторы и вполне неплохо все продумано. Хотя список возможных операторов не такой уж большой, по сравнению с тем же Haskell (там можно даже >>== делать и прочие изрвраты).


- Гиви, ты памыдоры лубиш?
— Ест лублу, а так — нэт!


Все хорошо в меру. В C++ можно перегрузить оператор запятая. То-то новички будут удивляться, если придать этому оператору нетривиальный смысл. Много ли кто вообще знает, что в Си и C++ запятая — это оператор?
Re[2]: Спец. символы (операторы) вместо функций - любите?
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.24 18:19
Оценка: +2
Здравствуйте, pagid_, Вы писали:

_>Наверно операция аналогичная по смыслу сложению к чему-то применима, хотя конкретного примера из работы что-то не припоминаю.


Конкатенация строк.
Re: Спец. символы (операторы) вместо функций - любите?
От: vsb Казахстан  
Дата: 13.08.24 19:03
Оценка:
Здравствуйте, Shmj, Вы писали:

S>И вопрос — вы любите эти значки разные или же лучше буквы?


В общем случае — не люблю.

Есть ситуации, где перегрузка уместна. Самый очевидный пример: вместо BigDecimal.add() писать +. Т.е. для объектов, которые представляют из себя числа.

В С++ считаю сделано максимально отвратительно. Какое отношение битовый сдвиг имеет к вводу-выводу — я никогда не понимал и не пойму.

Про хаскель не помню. Но скорей всего мне это тоже не понравится. Я дитя западной цивилизации, мне привычны слова, а не иероглифы.
Отредактировано 13.08.2024 19:08 vsb . Предыдущая версия .
Re[2]: Спец. символы (операторы) вместо функций - любите?
От: пффф  
Дата: 13.08.24 19:05
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>Все хорошо в меру. В C++ можно перегрузить оператор запятая. То-то новички будут удивляться, если придать этому оператору нетривиальный смысл. Много ли кто вообще знает, что в Си и C++ запятая — это оператор?


Неновичков это тоже может удивить
Re[3]: Спец. символы (операторы) вместо функций - любите?
От: vsb Казахстан  
Дата: 13.08.24 19:06
Оценка: +1
Здравствуйте, 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]: Спец. символы (операторы) вместо функций - любите?
От: пффф  
Дата: 13.08.24 19:08
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>В С++ считаю сделано максимально отвратительно. Какое отношение битовый сдвиг имеет к вводу-выводу — я никогда не понимаю и не пойму.


Почему именно битовый сдвиг? Это у тебя просто привычка такая. А так: вполне логично сдвинуть (вдвинуть) в поток, выдвинуть из потока


vsb>Про хаскель не помню. Но скорей всего мне это тоже не понравится. Я дитя западной цивилизации, мне привычны слова, а не иероглифы.


Математику, видимо, тоже не любишь. Кстати, современную математику в основном разработала западная цивилизация, если что
Re[3]: Спец. символы (операторы) вместо функций - любите?
От: vsb Казахстан  
Дата: 13.08.24 19:11
Оценка:
Здравствуйте, пффф, Вы писали:

vsb>>В С++ считаю сделано максимально отвратительно. Какое отношение битовый сдвиг имеет к вводу-выводу — я никогда не понимаю и не пойму.


П>Почему именно битовый сдвиг? Это у тебя просто привычка такая. А так: вполне логично сдвинуть (вдвинуть) в поток, выдвинуть из потока


Потому, что C++ это надстройка над C. В которой у сочетания символов << есть вполне определённое значение — битовый сдвиг. И без перегрузки оператора в С++ у этого сочетания символов ровно такое же значение.

Я не вижу в этом ничего логичного. Для меня логично писать print. Никто в юниксе ничего никуда не сдвигает.

vsb>>Про хаскель не помню. Но скорей всего мне это тоже не понравится. Я дитя западной цивилизации, мне привычны слова, а не иероглифы.


П>Математику, видимо, тоже не любишь. Кстати, современную математику в основном разработала западная цивилизация, если что


К программированию математика не имеет никакого отношения.
Re[4]: Спец. символы (операторы) вместо функций - любите?
От: пффф  
Дата: 13.08.24 19:18
Оценка: +2
Здравствуйте, vsb, Вы писали:

vsb>Потому, что C++ это надстройка над C. В которой у сочетания символов << есть вполне определённое значение — битовый сдвиг. И без перегрузки оператора в С++ у этого сочетания символов ровно такое же значение.


В C у каждого оператора ровно одно значение


vsb>Я не вижу в этом ничего логичного. Для меня логично писать print. Никто в юниксе ничего никуда не сдвигает.


Очень даже в юниксе сдвигают. '<' — перенаправление ввода из файла, '>' — перенаправление вывода в файл с перезаписью, '>>' — перенаправление вывода в файл с дозаписью в конец. Как могли эти юниксоиды использовать сишечный битовый сдвиг? Кто это придумывал, сами на сишечке писали, если что


vsb>>>Про хаскель не помню. Но скорей всего мне это тоже не понравится. Я дитя западной цивилизации, мне привычны слова, а не иероглифы.


П>>Математику, видимо, тоже не любишь. Кстати, современную математику в основном разработала западная цивилизация, если что


vsb>К программированию математика не имеет никакого отношения.


Очень даже имеет.
Re[4]: Спец. символы (операторы) вместо функций - любите?
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.24 19:45
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>На мой взгляд это плохое применение оператора сложения. Из-за него код print("a + b = " + a + b) не будет работать, как ожидается, а это достаточно частый юз-кейс. А если бы для конкатенации строк использовался отдельный оператор, например как в Lua, было бы проще: print("a + b = " .. a + b).


Это, наверное, очень индивидуально. Я ни разу в жизни не сделал такую описку. А кто-то может делает постянно.
Re[3]: Спец. символы (операторы) вместо функций - любите?
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.24 19:48
Оценка:
Здравствуйте, пффф, Вы писали:

Pzz>>Все хорошо в меру. В C++ можно перегрузить оператор запятая. То-то новички будут удивляться, если придать этому оператору нетривиальный смысл. Много ли кто вообще знает, что в Си и C++ запятая — это оператор?


П>Неновичков это тоже может удивить


А чтобы было еще интереснее программировать, операторы ||, && и запятая имеют гарантии порядка исполнения, слева направо. Т.е., выражение p != NULL && *p != 0 безопасно, оно сначала проверит указатель на NULL и только потом полезет в память, на которую он указывает.

Но это пока они не перегружены. А перегруженные эти операторы теряют гарантии порядка исполнения, и будут исполняться в том порядке, в котором компилятору сегодня показалось удобно.
Re[2]: Спец. символы (операторы) вместо функций - любите?
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.08.24 03:39
Оценка:
Здравствуйте, mike_rs, Вы писали:
_>далеко не всегда функция может заменить оператор. см. lvalue / rvalue
В языках с поддержкой ссылок функция возвращает lvalue ровно так же, как и кастомный оператор.
Я вот по невежеству своему не знаю таких языков, в которых бы одновременно была перегрузка операторов и не было бы ref типов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Спец. символы (операторы) вместо функций - любите?
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.08.24 03:59
Оценка: +5
Здравствуйте, Shmj, Вы писали:

S>И вопрос — вы любите эти значки разные или же лучше буквы?

Смотря какой код пишется.
Алгебраический стиль написания кода подразумевает построение цепочек выражений. Запись этих цепочек в виде префиксных функций получается очень громоздкой.
"Мало ли какой смысл" — это страшилка для новичков. На практике операторы очень редко перегружаются неожиданным образом, и ещё реже — контринтуитивным.
Затраты на обучение тому, что + обозначает конкатенацию строк, а [] — доступ к словарю по ключу, с лихвой окупаются экономией времени на разбор кода.
Что понятнее?
orders[orderId].TotalAmountUSD += line.Quantity*line.Price*currencyRate;

или
orders.get(id).setTotalAmountUSD(orders.get(id).getTotalAmountUSD().add(line.getQuantity().multiply(line.getPrice()).multiply(currencyRate));
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Спец. символы (операторы) вместо функций - любите?
От: so5team https://stiffstream.com
Дата: 14.08.24 04:41
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Потому, что C++ это надстройка над C.


Нет, это Simula, в которую добавили подмножество C.

vsb>Никто в юниксе ничего никуда не сдвигает.


Перенаправление ввода-вывода в командной строке смотрит на вас с недоумением.
Re[3]: Спец. символы (операторы) вместо функций - любите?
От: mike_rs Россия  
Дата: 14.08.24 07:25
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, mike_rs, Вы писали:

_>>далеко не всегда функция может заменить оператор. см. lvalue / rvalue
S>В языках с поддержкой ссылок функция возвращает lvalue ровно так же, как и кастомный оператор.

а вот тут уже на первый план выходит компактность записи и удобство использования.
std::cout << "some data: " << a << "eeg: " << b << functionCallI() << " done";

запиши без перегруженного оператора <<, чисто на функциях?
Re[4]: Спец. символы (операторы) вместо функций - любите?
От: Doom100500 Израиль  
Дата: 14.08.24 08:31
Оценка:
Здравствуйте, vsb, Вы писали:


vsb>Я не вижу в этом ничего логичного. Для меня логично писать print. Никто в юниксе ничего никуда не сдвигает.


"std::cout <<" в юниксе больше не работает?
Спасибо за внимание
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.