Здравствуйте, kaa.python, Вы писали:
KP>Попалась на глаза довольно интересная (правда пока что глючная) библиотечка для C++, позволяющая делать, например, так:
KP>[ccode] KP> vec — 2; KP> vec << 4; KP>[/code]
и что это значит?
Здравствуйте, omgOnoz, Вы писали:
O>Это не печаль, без просмотра http://volnitsky.com/project/ro/ — в написанном коде черт ногу сломит
А вот Scala-разработчики с тобой бы не согласились. В целом, ощущение двоякие, с одной стороны можно лаконичнее написать код, так v.push_back(foo) выглядит не так красиво как vec << foo, а с другой стороны, дополнительные потенциальные ошибки и усложнение гугления.
Здравствуйте, kaa.python, Вы писали:
KP>В целом, ощущение двоякие, с одной стороны можно лаконичнее написать код, так v.push_back(foo) выглядит не так красиво как vec << foo, а с другой стороны, дополнительные потенциальные ошибки и усложнение гугления.
я понимаю что автор кода идиот, но как же печально, что находятся люди которым нравится писать угловые скобочки и прочие закорючки вместо нормальных человеческих слов.
кулхацкеры млин.
Здравствуйте, Abyx, Вы писали:
A>я понимаю что автор кода идиот, но как же печально, что находятся люди которым нравится писать угловые скобочки и прочие закорючки вместо нормальных человеческих слов. A>кулхацкеры млин.
А ты понимаешь, что бывает мнение отличное от твоего? И то что в ряде языков, подобный синтаксис считается нормальным, а не проявленим "кулхацкерства млин".
KP>А ты понимаешь, что бывает мнение отличное от твоего? И то что в ряде языков, подобный синтаксис считается нормальным, а не проявленим "кулхацкерства млин".
Щас прибегут Vamp или enji скажут, что ты не прав :D
Здравствуйте, UA, Вы писали:
UA>Как то нелогично -2 и << 4, почему не + 4? UA>или уже делали >> 2 и << 4
Согласен, так было бы более однообразно. Думаю что автор берет в качестве аналогий аналогичные операторы из библиотеки в каком-то другом, знакомом ему языке.
Посмотрел примеры. Неплохо.
Но не понравился мап (*), если типы совпадают то исходный контейнер изменяется, если разные — то создается новый. Вроде фильтр (|) тоже изменяет исходный контейнер. Не функционально, не иммутабельно, опасно.
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, UA, Вы писали:
UA>>Как то нелогично -2 и << 4, почему не + 4? UA>>или уже делали >> 2 и << 4
KP>Согласен, так было бы более однообразно. Думаю что автор берет в качестве аналогий аналогичные операторы из библиотеки в каком-то другом, знакомом ему языке.
Просто в С++ перегрузка операторов не настолько гибкая чтобы навешивать произвольные операции. Это хорошо и плохо одновременно.
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, Abyx, Вы писали:
A>>я понимаю что автор кода идиот, но как же печально, что находятся люди которым нравится писать угловые скобочки и прочие закорючки вместо нормальных человеческих слов. A>>кулхацкеры млин.
KP>А ты понимаешь, что бывает мнение отличное от твоего? И то что в ряде языков, подобный синтаксис считается нормальным, а не проявленим "кулхацкерства млин".
конечно бывает.
есть идиоты, и да, у них тоже есть какие-то мнение.
я надеюсь что ты понимаешь что мнения бывают правильные и неправильные.
если какие-то люди несколько десятков лет назад решили что << это такая красивая стрелочка-елочка, и лучшее использовать ее, чем `shl`. это нормально. на один символ короче, меньше зарезервированных слов.
потом в С++ была проблема с A<B<C> >, но ктож знал про С++
потом когда в IO library стали использовать <<, это тоже было нормально. variadic templates не было, и это был единственный нормальный способ писать в поток. cout.write(1).write(2); как-то не смотрится.
люди повозмущались (что за cout shift-left 1), но в конце концов привыкли.
хотя мнения есть разные. кто-то вроде А. Степанова считает что математические операторы надо использовать только пол назначению, и никак иначе.
и тут в 2013 году на форум притаскивают какую-то говнобиблиотеку, где автор предлагает писать
vector<T> x; x << y;
я это читаю и думаю, это логический сдвиг каждого элемента влево, или сдвиг элементов вектора влево?
а оказывается это push_back.
при этом много лет назад люди изобрели Boost.Assignment
vector<T> x; x += y;
который популярностью вроде особо не пользовался, но кто-то может привык к такому применению +=.
причем в Boost.Assignment была перегружена запятая, и можно писать
x += y, z;
что несколько короче чем x << y << z; в Range Operators
btw, в С++11 добавление нескольких элементов можно реализовать очень просто, без expression-trees — через initializer list
1. Тут ведь всегда проход по всем элементам (ибо упорядоченность видимо не предполагается)? Слишком много для такой краткой нотации — в итоге на ровном месте будет плодится неэффективность — которую ты даже не заметишь
.
2. Если нужна краткая нотация для часто используемых операций — имхо лучше завести отдельные типы, а не делать ad-hoc'и.
3. В документации автор приводит "аналог":