一個程式的運作,基本上是根據程式碼依次序一句一句的執行,通常只有在兩個情況下才會改變執行的次序,便是遇上選擇結構(Selection)或重覆(Repetition)。兩者通常都會有一個條件作測試,如果測試結果為是的,便會執行一段程式碼,部分選擇結構會有另一部分的程式碼於測試結果為非時執行。所以程式員必須對編寫測試條件有所認識。當測試條件是一個單一的條件,結果為是或為非是很清楚的,但是如果測試條件是由多過一個簡單條件所組成,我們便要知道在什麼時候,選擇結構的兩個程式部分,那一個部分會被執行。

舉個例子,如果選擇結構的條件是由兩個簡單條件,甲和乙,所組成,而我們希望甲和乙都同時為是才執行首段程式部分,程式員會以,甲和乙(即A and B)為測試條件,例如我們以此作選擇結構的條件,即:

IF (A and B) THEN
當條件為是時的程式碼
ELSE
 當條件為非時的程式碼
END IF


(甲和乙)為是,則需要甲為是和乙也為是。想一想,如果「當條件為非時的程式碼」被執行時,這代表了什麼?是不是:甲為非和乙為非?這時,我們便要看看一門處理對錯運算的數學,邏輯代數(Boolean Algebra)。邏輯代數當中的德摩根定律(De Morgan's laws)指出:

非(P 且 Q)=(非 P)或(非 Q)
非(P 或 Q)=(非 P)且(非 Q)


所以如果(甲和乙)為非時,表示甲為非或乙為非。德摩根定律可以應用到超過兩個以上的簡單條件之上,即是「所有簡單條件為是,而測試的整體結果為非時,表示其中一個簡單條件為非。」

舉個生活上的例子來解釋,主題公園的某些機動遊戲不適合年幼的小童,便會在場外貼出告示說「只適合年過十二歲和身高超過一點五米高的小童」。想一想,被拒絕使用這機動遊戲的小童,可能只是不足十二歲或身高不超過一點五米,而不一定是既不足十二歲以及身高不超過一點五米,只要不附合其中一個條件,便不能使用這機動遊戲了。

我們日常跟別人說話時,其實也不自覺地用了組合條件,例如跟別人說:「永遠愛你。」其實國際解讀是今天愛你,且明天愛你,且後天愛你,即以後每一天都愛你。根據德摩根定律,只要有一天不愛你,而就算其他的每一天都愛你,「永遠愛你」這句說話都不成立了。另外,如果跟別人說:「我定會有天找你飲茶食飯。」意思是,我今天找你,或明天找你,或後天找你,即總會有一天找你。根據德摩根定律,如果從此之後都沒有找過對方,即今天不找你,且明天不找你,且後天不找你,如此類推,這句說話也不成立了。

由此可見,當我們說「永遠會如此如此」時,只要被別人找出有一次不能做到,我們便打破了自己的承諾,所以真的要小心和想清楚是絕對一次也不會如此,才能說出「永遠」。否則,給別人找出自己有一次做不到,從此便會給別人冠以「沒有信用的人」,是很容易的。Never say never,實在非常有意思。

Credit


圖片來源:互聯網

此文章之主持/專欄作家介紹:Herbert
資訊科技界資深工作者,學生時代受蘋果二代所啟蒙,沉迷電腦科技,尤其是軟件編程,大學時代主修計算機科學,最後以獲得哲學博士作完美終結。從事資訊科技行業超過二十年,對資訊科技界充滿憧憬和好奇,至今仍在追趕各項電腦新知,盼望能以資訊科技知識,令這個世界更美好。

版權所有©2013 創動力媒體 Dynamix