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埋進去,或者把部份處理完的資料傳回來.
: 至於看起來是不是簡單明瞭,邏輯句基本上是最簡單明瞭的,
: 看不懂這種句子的人是自己基礎學科沒有學好.
原本原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
推
12/08 15:14, , 1F
12/08 15:14, 1F
推
12/08 15:14, , 2F
12/08 15:14, 2F
→
12/08 15:15, , 3F
12/08 15:15, 3F
→
12/08 15:20, , 4F
12/08 15:20, 4F
→
12/08 15:31, , 5F
12/08 15:31, 5F
→
12/08 15:32, , 6F
12/08 15:32, 6F
推
12/08 16:14, , 7F
12/08 16:14, 7F
→
12/08 16:15, , 8F
12/08 16:15, 8F
→
12/08 16:15, , 9F
12/08 16:15, 9F
→
12/08 16:16, , 10F
12/08 16:16, 10F
→
12/08 16:27, , 11F
12/08 16:27, 11F
→
12/08 16:28, , 12F
12/08 16:28, 12F
推
12/08 16:33, , 13F
12/08 16:33, 13F
→
12/08 19:08, , 14F
12/08 19:08, 14F
推
12/08 20:49, , 15F
12/08 20:49, 15F
推
12/08 20:53, , 16F
12/08 20:53, 16F
推
12/09 00:32, , 17F
12/09 00:32, 17F
推
12/09 00:33, , 18F
12/09 00:33, 18F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 17 之 21 篇):