2022年1月23日 星期日

IF_ELSE的判斷式



時間大概2014年左右吧!那時,前公司欲進軍健康手環市場,
很幸運地,我參予過那個案子,影響我到現在,不過這不是主題,以後有機會談。
現在要說的是至今仍回憶深刻的事(希望我聊完就忘記),
而只有寫過程式的人才能明白當中奇怪之處在哪。

那時,我們選的MCU的RAM不夠用,
因此,寫程式時,盡可能地將宣告的變數合併著用,並且Byte要省著點。
(例如:不能再宣告布林函數,雖然它的數值僅TRUE、FALSE,讓人以為是1 bit,
 可是,事實上,使用最小單位就是8 bit)

要具體描述我是怎麼合併著用,有點困難,但可以想像成類似計算BMI的判斷式:
if (YourBMI > 27)  printf("肥胖\n");
else if (YourBMI > 24) printf("過重\n");
else if (YourBMI > =18) printf("體重正常\n");
else printf("過輕\n");

(我不知道Review中文要怎麼翻比較準確,便用英文說)
Review我程式的同僚,我就不透漏是誰了,他來問我:
你這樣寫,假如數值是28,那不就同時會印(printf):肥胖、過重、體重正常三項。
我一時語塞,不曉得是否該說IF_ELSE判斷式是什麼,
不過,我最後沒說,就講:第一個if成立,後面的if便不再判斷(註1)。
他神情顯然有些懷疑,卻仍是回到自己座位。

間接得知他在這公司當十年軟體/韌體工程師,我感到詫異,
又加上,之後他說要做的實驗...。
所以,他後來提的建議,我都是看著辦、快點思考另一個方向,少走冤枉路。
後來的事實也證明:他說的,即便不是全然沒用,但多數幫助不大。


我記得許主任曾問我,你覺得你們公司主X寫程式的程度如何?
我的回答是:「我不好意思說」,他應該能心領神會吧!



------------------------------------------------------------------------------------------------------
「if…elseif…else…運算式」具有多重判斷的功能,
其中elseif可以有很多個,也就是可以有多種條件,
else反而可以省略(如果條件都不成立就略過)。
在執行本運算式時,愈前面的條件愈先被執行,條件一優先,再來是條件二…。
一旦條件成立,就會執行該條件下的子句,其他的條件就不管了。