看板 Marginalman 關於我們 聯絡資訊
※ 引述《Wardyal (滿穗的小狗)》之銘言: : 這排版我感覺可讀性不太好 : 但是我把這些單行的 early return 都展開 : 又覺得可讀性還是很爛 : 反而更醜了 : 哪個好啊 : == 函數式流派:Monadic Operations (C++23 風格) 如果你們在討論的是如何避免寫 if,並且像生產線一樣把函數串起來,那麼 and_then ( 類似 Rust 的 ? 或 flatMap) 就是答案。 這通常用於將錯誤往上拋,而不是吞掉錯誤變成 bool。 // 假設 func1, func2 都回傳 Result<T, E> return func1(...) .and_then([&](auto val1) { // 只有 func1 成功時才會進來 return func2(val1); }) .and_then([&](auto val2) { // 只有 func2 成功時才會進來 par = val2; return Result<bool, Error>(true); }) .or_else([&](const Error& err) { // 只要上面任何一步出錯,就會直接跳到這裡 (Early Return 的變體) spdlog::error("Error: {}", err.unwrap_str()); return Result<bool, Error>(false); // 或是把錯誤轉換後往上拋 }); 優點: 非常像 Rust 或 JavaScript Promise,完全沒有 if,錯誤自動短路(Short- circuiting)。 缺點: 這是「回傳表達式」,對於單純想賦值 (par = x) 的指令式代碼來說,這樣寫反 而變複雜了,且 Debug 難度稍高。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.123.162 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1770275193.A.625.html
Wardyal: 我docker環境只有c++20 02/05 15:09
yam276: 鍛鍊你手刻標準庫的時間到了... 02/05 15:10