Re: [閒聊] 尋求比nest-if更優美的解決辦法
※ 引述《yauhh (喲)》之銘言:
: ※ 引述《wowtiger (小虎)》之銘言:
: : 兩三年前會用這個怪格式寫 XD
: : (data == NULL) ? printf("Data not found."):
: : (checkData(data) != 0) ? printf("Data is invaild."):
: : (modifyData(data) != 0) ? printf("Data modification failed."):
: : (fireDataChanged(data) != 0) ? printf("Observer call failed."):
: : (saveDataIntoFile(data) != 0) ? printf("Data storage failed."):
: : /* success */ ? printf("Finally succeed...");
: : 不過後來發現很多人看不懂就沒用了
: : code 還是簡單明瞭最好
: 當然善用shortcut-circuit evaluation寫邏輯句子很容易:
: (data == NULL) && printf("Data not found.")
: || (checkData(data) != 0) && printf("Data is invaild.")
: || (modifyData(data) != 0) && printf("Data modification failed.")
: || (fireDataChanged(data) != 0) && printf("Observer call failed.")
: || (saveDataIntoFile(data) != 0) && printf("Data storage failed.")
: || printf("Finally succeed...");
: 邏輯運算一般是 && 優先權高於 ||.
: 使用 ? : 還可以把stage埋進去,或者把部份處理完的資料傳回來.
: 至於看起來是不是簡單明瞭,邏輯句基本上是最簡單明瞭的,
: 看不懂這種句子的人是自己基礎學科沒有學好.
我看到這個東西彷彿看到有人用英文寫了
"You dare then give me try try see" (你敢就給我試試看)
然後嗆了一句看不懂這種句子的人是自己基礎英文字彙沒有學好
?: 運算子仍然是大眾所認知的 branch operator
雖然很少人會這樣連用, 但語意仍然不會差別太大
而且很明顯的可以知道 ? 之後會跟著 :
基本上也不太有寫錯的機會
當然, 常在 C_and_CPP 看文章的人應該都知道你很懂得邏輯 XD
基本的 A && B 可以表示 if A then B, 這也不是什麼需要炫耀的知識
但是語言裡面本該指涉 logic operator 的東西
大部份的人第一眼看到都不會把他當作 branch operator
即使很有經驗的 developer 也用慣了 short-circuit evaluation 了
但沒有人跟你一樣會把 logic 和 branch 傻傻分不清楚
我知道你很喜歡把各種東西都當成大一統的東西
那可能對很多人來說真的是一件很炫的事情
branch 可以是 function, 現在 logic 可以是 branch
不過很抱歉, 現實社會中沒什麼人這麼做, 這麼講
也許你可以極力呼籲大家使用你的想法
比如說你可以講講這個做法的好處在哪裡 ?
畢竟說精簡, 你的 byte count 還是輸給 ?: 的用法
說一目了然, 也沒什麼人覺得這樣寫比較看得懂
說效率, 你也只贏過前面那個 multiple function call 的 case
我個人覺得純 if else 組起來的最容易看懂, 對團隊的傷害也最少
如果你有在開發多人合作的程式專案, 善待你的同事吧
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.51
※ 編輯: ledia 來自: 140.112.30.51 (12/08 11:47)
→
12/08 12:46, , 1F
12/08 12:46, 1F
→
12/08 12:47, , 2F
12/08 12:47, 2F
※ 編輯: ledia 來自: 140.112.30.51 (12/08 13:18)
推
12/08 17:32, , 3F
12/08 17:32, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 16 之 21 篇):