Re: [閒聊] 尋求比nest-if更優美的解決辦法
※ 引述《yauhh (喲)》之銘言:
: 當然善用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...");
: 邏輯運算一般是 && 優先權高於 ||.
: → bdvstg:我看不懂... >"< 判斷&&列印||判斷&&列印...; 12/07 09:12
班門弄斧一下:
這樣的邏輯判斷其實只要知道"||"跟"&&"運算子的行為,其實並不難理解。
||運算子的情況:
A || B A和B只要其中一個成立(為TRUE),運算式即成立
如果A成立 => 運算式成立 (不做B,B會直接被忽略)
A不成立 => 檢查B是否成立(做B)
&&運算子的情況:
A && B A和B兩者皆必須成立(皆為TRUE),運算式才成立
如果A成立 => 檢查B是否也成立(做B)
A不成立 => 運算式不成立 (不做B,B會直接被忽略)
再回到yauhh板友的sample:
因為&&優先度高於||,所以你可以這樣看
╭ A1╮ ╭ B1╮ ╭ A2╮ ╭ B2╮
( 判斷(1) && 列印(1) ) || ( 判斷(2) && 列印(2) ) ...下略
╰────α────╯ ╰────β────╯
&&運算子的情況:
如果A1成立 => 檢查B1是否也成立(做B1)
判斷(1)成立 => 印錯誤訊息
(data == NULL) printf("Data not found.")
如果A1不成立 => 運算式α不成立(不做B1,B1會直接被忽略)
(data != NULL)
但是因為後面還有||運算子,所以
||運算子的情況:
α不成立 => 檢查β是否成立(做β)
而運算式β又是一個&&運算式,所以又回到上面 &&運算子的情況
依此類推
--
打完之後才發現光用文字解釋沒有想像中的容易orz
真是佩服板上的圖文詳解強者...
--
╭──╮┌──╮╭──╮╭──╮╭──╮╭─╮╮╭─╭╮
│ ││ ││ ││ ││ ││ │││ ││ NO16
│ ├╮│ ─┤│ ┘││ ││ ─ ││ ││ │█ █nyctenvoy
│ ││ ─┤│╮╭╯│││││╭╮│││ │╰╮╭╯█ ██ ██ ███
╰──╯└──╯╰╯╰ ╰╯╯╯╰╯╰╯╰╯─╯ ╰╯ ██ █▆◢ ▉█ ▊▊█
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.136.254.32
→
12/07 12:15, , 1F
12/07 12:15, 1F
→
12/07 12:15, , 2F
12/07 12:15, 2F
推
12/07 12:41, , 3F
12/07 12:41, 3F
→
12/07 13:43, , 4F
12/07 13:43, 4F
→
12/07 13:44, , 5F
12/07 13:44, 5F
→
12/07 13:44, , 6F
12/07 13:44, 6F
推
12/07 15:56, , 7F
12/07 15:56, 7F
→
12/07 19:42, , 8F
12/07 19:42, 8F
→
12/07 19:43, , 9F
12/07 19:43, 9F
→
12/07 19:43, , 10F
12/07 19:43, 10F
推
12/07 19:51, , 11F
12/07 19:51, 11F
推
12/08 10:05, , 12F
12/08 10:05, 12F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 12 之 21 篇):