尋找共同點與變數點

有了上一篇的說明,對於流程規劃應該有不錯的了解。再來我們必須了解的是流程圖的初步「程式化」。試著用流程分析「各花十塊錢分別操作投幣式洗衣機與投幣式飲料機的流程」並找出共通點。

完成之後會發現「投十元」這個動作重複了,但以程式的角度來看,真正的共通點只有「投幣」並沒有「十元」,如果把題目改成「花十元操作投幣式洗衣機 & 花二十元操作投幣式販賣機」就會瞭解了,投幣這個動作是固定的,但金額是有可能變化的,所以共同點只有「投幣」而沒有「十元」。

在先前的範例中,兩者都是必須完成「投幣」這個動作但金額只是剛好相同而已,如果我們很叛逆硬是把「投十元」寫成一個程式的區塊,漸漸會因為需要而出現「投二十元」「投三十元」「投五十元」等各種不同的程式區塊,然後根據不同的時機填入不同的區塊,這些看似重複性很高卻又無法省略的東西,對程式而言並不會影響運作,而是會影響後續的自由性、擴增性。(還有影響除錯時的時間與血壓...)

其實在程式化的過程中,一個很重要的部分是「找到相同處」,但這個相同處不能包含「變數」,上述的例子來說,相同處就是「投幣」,變數就是剛好相同的「十元」。當然,若今天付費的方式不只一種(比方說刷卡、悠遊卡),那可能連「投幣」這個動作都變成一個變數了。

以上面的例子來說,如果我們走錯了路該怎麼辦? 會因為我們的堅持出現了一堆「投XX元」的區塊,這時候我們就必須把所有的「投XX元」改成「投幣」然後輸入XX元,如果我們今天只有兩個流程圖,可能一分鐘就改完了,但現實是有幾張流程圖都不知道,必須一張張檢查、修正,還好現在有大量取代功能可以省去很多的功夫,但也有一些地方比較特殊是無法搜尋的,這時就要靠人工慢慢找了。(如果沒有修正每一個地方都修正過來,未來會是另一種災難...)

分辨「相同處」與「變數」不是一件容易的事情,許多寫程式數年的老手也會犯下這樣的錯誤導致程式碼必須花時間重新整理與撰寫。但如果你的流程圖設定的夠完整,將流程圖「程式化」之後就會得到一份完整的程式。


 

初步程式化

我們選擇與之前相同的題目來當成程式化的範例,首先我們必須先定義一個「格式」,Function 是固定字,表示「函數」,函數名稱可以自己取,每一種語言對於函數名稱都有不同的規則,大多都不能以數字開頭、不能帶有空白及特殊符號(底線可以)。參數可以依據自己的需要增減,如果都不需參數則空括弧「()」即可。而大括弧之間就是我們的函數內容,也是表示程式真正要做的事情。

 

Function 函數名稱(參數1,參數2...)
{
    內容...
}

 

此外,參數的「有效範圍」只在大括弧之內,也就是說這個參數「只存在」於這個Function中,出了這個Function(大括弧區間)就會完全失效。不同的Funcion不能有同樣的名字,就像班上有兩個「小明」老師會很頭痛...我們以第一個函數"投入硬幣"當作範例如下,其中名稱為Insert_Coin,參數是mycoin表示要投入的金額。內容就是「Insert mycoin coin(s)」(投入"mycoin"這麼多的金額)

Function Insert_Coin(mycoin)
{
     Insert mycoin coin(s)
}

 

以下提供全部完成的範例,如果你的函數名稱、變數名稱、內容跟我不太一樣是正常的,畢竟每個人都有不一樣的邏輯。(如果全部都一樣,老師就會把你叫過去...咳咳)

 

Function 主流程()
{
    Insert_Coin(mycoin)
    Choose_Drink(mydrink)
    Pick_Up_Drink(mydrink)
    Pick_Up_Change(mychange)
}

Function Insert_Coin(mycoin)
{
    Insert mycoin coin(s)
}

Function Choose_Drink(mydrink)
{
    Choose Drink mydrink.
}

Function Pick_Up_Drink(mydrink)
{
    Pick up Drink mydrink.
}

Function Pick_Up_Change(mycharge)
{
    Pick up Change(mychange)
}

 

題外話,最近一直考慮要換個平台發布這些關於技術型的文章,畢竟跟我當初創立這裡的目的不一樣,但最主要的還是閱讀性跟舒適程度。其實已經不是一次想要更換平台,但在支持國貨的情況下還是選擇了Pixnet...

arrow
arrow

    Vincent 發表在 痞客邦 留言(0) 人氣()