程式架構

本週的教學影片檔:請點我

本週的初始程式碼:請點我

在前兩週的課程,我們學會了許多基本的資料型態和控制指令的方式,也成功的幫me物件新增了左轉和一次前進很多步的指令,現在大家手上的程式碼應該長的像上面的連結這樣,如果你手邊沒有程式碼,現在也請先把它打開。

上一週的最後,身為設計者的我們想到了一個問題:當初設計me物件並且新增了一個的時候,我們的目的只是做一些指令測試,但未來真的要寫出有明確目的的程式時,我們可能需要很多個me物件(例如我們的世界裡可能有很多NPC:機器人、怪物、旅店老闆...),目前的命名方式顯然十分容易讓人誤會。

在本章一開始,我們先調整一下設計,讓程式碼更容易被看懂。

// 刪除 struct me { 
struct 角色 {
    var 面向:方向
    var 座標:}

var 一號機器人 = 角色(面向: 方向.北方, 座標:原點)
var 二號機器人 = 角色(面向: 方向.北方, 座標:原點)

在我們這麼做的同時,叫我左轉()叫我前進幾步()指令也失效了,因為它們相應的程式碼是尋找物件,並且執行它的前進()右轉()指令,在這個物件的名稱消失了(現在的全新角色物件有兩個,分別叫做一號機器人二號機器人),電腦就無法找到這個角色來執行指令了。

這不禁讓我們開始思考:為什麼要新增自訂指令?其出發點是讓程式碼更容易閱讀、操作更方便,在只有一個角色物件的時候,我們原先的寫法是沒有問題的,但有很多個不同的角色物件時,如果我們必須為了讓一號機器人蛇行,就寫一個自訂指令,要讓二號機器人來回巡邏,又寫一個自訂指令,以後還有三號、四號、五號機器人...這顯然違反了「操作更方便」這個需求。

為什麼幫一號機器人新增左轉指令的時候,二號機器人不知道這個指令?為什麼我們不能像我.右轉()一樣去寫我.左轉(),而必須寫成叫我左轉()?其實是我們的架構設計出了問題,前兩週的課程我們比較專注在理解程式設計的「程式」兩字,而本週的課程重點,將會把重心轉移到「設計」,介紹正確的架構觀念。

results matching ""

    No results matching ""