看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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埋進去,或者把部份處理完的資料傳回來. : 至於看起來是不是簡單明瞭,邏輯句基本上是最簡單明瞭的, : 看不懂這種句子的人是自己基礎學科沒有學好. 原本原PO希望nest-if能夠不要愈寫愈深,尋求更優美的作法, 但y版友寫深shortcut-circuit的方法,我直覺也是不太優美, 我直覺認為優美的程式應該是好維護好管理, 在這裡我會希望邏輯判斷和動作應該分開, 前面已經很多高手提供很棒的方法 肉腳的我也提供一個我直覺會使用case-switch的方法 //動作放一邊 switch(condition()) { case 'data': printf("Data not found."); break; case 'checkData(data)': printf("Data is invaild."); break; case 'modifyData(data)': printf("Data modification failed."); break; case 'fireDataChanged(data)': printf("Observer call failed."); break; case 'saveDataIntoFile(data)': printf("Data storage failed."); break; } //邏輯放一邊 int condition() { . . . } 這樣感覺就算半年後再打開這個程式,也會很快進入狀況。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.131.148
ledia:這...?! 囧 12/08 15:14
purpose:很少見 12/08 15:14
ledia:而且大概也無法 compile 過 orz 12/08 15:15
tcling:我知道這不會過,大致的作法是這樣 12/08 15:20
tomnelson:compile當然不會過,但他是把這當pseudo code來說明概念. 12/08 15:31
tomnelson:他這概念也是我比較prefer的,也有這樣實作過. 12/08 15:32
holymars:!?!?...這樣你最後還不是要用nested if來設你要switch的 12/08 16:14
holymars:變數.... 12/08 16:15
holymars:如果你要switch某個result來印出不同字串 那個result還是 12/08 16:15
holymars:要用上篇各篇提到的其中一種方法來得到吧.. 12/08 16:16
tcling:所以我會希望把難看的邏輯判斷放一邊 12/08 16:27
tcling:凸顯要處理的動作 12/08 16:28
ledia:你還是全寫出來吧 12/08 16:33
bleed1979:單引號內的技巧是用巨集嗎? 12/08 19:08
aecho:記得C#是支援switch用字串…但很顯然的C/C++是不能這樣做吧 12/08 20:49
aecho:不過概念上,應該用enum可以做到同樣的事情才是。 12/08 20:53
sandr1983:什麼樣的狀態或案例,會需要邏輯和動作分開呢? 12/09 00:32
awashharp:大概就像是將一個動作包裝成function 然後可以再利用吧? 12/09 00:33