Size: a a a

2020 July 29

DF

Dollar Føølish in pro.cxx
Правда потом можно нечаянно приписать один тег двум методам
источник

DF

Dollar Føølish in pro.cxx
Но это в любой схеме с ручным трудом подобная ошибка возможна
источник

В

Владимир in pro.cxx
Александр Караев
https://godbolt.org/z/4MKb9s
постановка задачи и мой вариант решения
Тут свинья напрашивается, вдруг у класса нет метода id
источник

AK

Alexey Kuznetsov in pro.cxx
А вам обязательно иметь статический метод? Проще ж можно решить просто ассертящим темплейтом template < typename T > struct ID и специализациями. Пишем тип в одном месте, если забыли, ломается компиляция
источник

АК

Александр Караев... in pro.cxx
Владимир
Тут свинья напрашивается, вдруг у класса нет метода id
свинья не нужна, остановка компиляции меня более чем устраивает
источник

АК

Александр Караев... in pro.cxx
Alexey Kuznetsov
А вам обязательно иметь статический метод? Проще ж можно решить просто ассертящим темплейтом template < typename T > struct ID и специализациями. Пишем тип в одном месте, если забыли, ломается компиляция
статический метод, чтобы вся информация была внутри класса, исключительно вопрос эстетики (кстати, в реальном кейсе там не число возвращается, а некоторое рантайм вычисление)
источник

В

Владимир in pro.cxx
Александр Караев
свинья не нужна, остановка компиляции меня более чем устраивает
Ясно.
источник

VS

Vlad Serebrennikov in pro.cxx
кто-нибудь знает, из каких соображений в русской документации майкрософта statement адаптировано как «оператор»? например, expression statement это оператор-выражение (оператор выражений)
источник

VS

Vladimir SHCHerba in pro.cxx
Зуев по-моему что-то про это рассказывал, можешь его доклады посмотреть.
источник

АК

Александр Караев... in pro.cxx
Vlad Serebrennikov
кто-нибудь знает, из каких соображений в русской документации майкрософта statement адаптировано как «оператор»? например, expression statement это оператор-выражение (оператор выражений)
@webreh у нас специалист по операторам
источник

VS

Vlad Serebrennikov in pro.cxx
Vladimir SHCHerba
Зуев по-моему что-то про это рассказывал, можешь его доклады посмотреть.
спасибо
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Vlad Serebrennikov
кто-нибудь знает, из каких соображений в русской документации майкрософта statement адаптировано как «оператор»? например, expression statement это оператор-выражение (оператор выражений)
Это устоявшийся еще в прошлом веке перевод
источник

VS

Vlad Serebrennikov in pro.cxx
чего еще я не знаю о русской терминологии...
я так-то ожидал «высказывание», как в логике. хотя бы ради того, чтобы не мешать statement и operator
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Они не мешаются
источник

VS

Vlad Serebrennikov in pro.cxx
Artöm Bakri Al-Sarmini
Они не мешаются
какое тогда определение у понятия «оператор»? «в зависимости от контекста это конструкция потока управления или символ, обозначающий действие»?
источник

VS

Vladimir SHCHerba in pro.cxx
operator в русском переводе это операция, насколько я помню.
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Именно
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
operator в литературе никогда не переводится как оператор
источник

ПК

Побитый Кирпич... in pro.cxx
Александр Караев
статический метод, чтобы вся информация была внутри класса, исключительно вопрос эстетики (кстати, в реальном кейсе там не число возвращается, а некоторое рантайм вычисление)
Это не только вопрос эстетики. Со статик методами ты просираешь ADL, например.
источник

ПК

Побитый Кирпич... in pro.cxx
Ofee
Да, это возможно, но есть существенная разница.

В случае с исключениями, пользователь функции g() может и не знать, прилетит ли ему исключение, а если да – то какое и откуда, из func1(), func2()?

По сути, автор функции g() может просто взять и забить переложить ответственность за обработку ошибок вызываемых им функций на пользователя функции g(), по сути, оставляя прямое взаимодействие между пользователем функции и частью внутренней имплементации – func1(), func2(). Это не очень красиво, у нас протекла абстракция в случае, если требуется хоть сколько-нибудь нетривиальная обработка ошибки.

В случае же с монадами... Ну, автор функции g(), в идеале, явно укажет тип возвращаемого значения. А ещё ему придется позаботиться, чтобы в случае ошибок, возвращался один и тот же тип ошибки, ведь func1() и func2() могут вернуть разные монады для обработки разных типов ошибок. В любом случае, у пользователя больше понимания о том, как может себя вести функция g(), её контракт выражен возвращаемым типом и способов его нарушить (в идеале) у автора g() просто нет.

А насколько внимателен к обработке ошибок будет пользователь... это его выбор, самое главное, что он не вынужден следить за чужими ошибками и не создаёт их кому-то ещё по стеку выше или ниже, о ком он даже не знает

Ещё не стоит забывать и о том, что монады – не только про обработку ошибок, их функционал несколько шире, это, например, возврат какой-то дополнительной информации или даже возврат полноценного лога. Или более сложный пример – корутины, по сути, тоже монады, просто другая их форма, предназначенная для другой цели
Что насчёт оверхеда? Если там на каждый вызов в итоге происходит проверка успех/провал, то это то же самое что и коды ошибки, и это медленнее исключений в общем случае
источник