學習軌道
/
Groovy
Groovy
/
練習
/
機器人模擬器
機器人模擬器

機器人模擬器

簡單

說明

撰寫一個機器人模擬器。

某間機器人工廠的測試設施需要一支程式來驗證機器人的移動。

機器人有三種可能的移動:

  • 向右轉
  • 向左轉
  • 前進

機器人會被放在一個假想的無限網格上,面朝某個特定方向(北、東、南或西),並位於一組 {x,y} 座標上,例如 {3,8},座標值往北和往東遞增。

接著機器人會收到一連串指令,此時測試設施會驗證機器人的新位置,以及它面朝哪個方向。

  • 字母字串 "RAALAL" 的意思是:
    • 向右轉
    • 前進兩次
    • 向左轉
    • 前進一次
    • 再一次向左轉
  • 假設機器人從 {7, 3} 出發,面朝北方。 那麼執行這串指令後,它應該會停在 {9, 4},面朝西方。

Groovy 的屬性和欄位

在這道練習中,你可能會注意到骨架程式碼定義了 getter,例如 getX(),但測試卻直接以 .x 存取這個值。這是因為 Groovy 定義屬性的方式。我們來拆解一下:

  • 欄位是類別、介面或特質的成員,用來儲存資料。
  • 屬性是類別對外可見的特性。

關於 Groovy 屬性的重點:

  • Groovy 會自動為非私有欄位產生 getter 和 setter(如果欄位標記為 final,則只會產生 getter)。
  • 屬性可以透過名稱存取(就像這道練習的測試那樣),而且會透明地呼叫 getter 或 setter。
  • 依照慣例,即使沒有對應的底層欄位,只要存在 getter 或 setter,Groovy 仍會辨識出屬性。

在這道練習中,我們只指定了必要的 getter(因此依照上述說明,也就指定了對應的屬性),以確保你正確實作。你可以自由決定哪些欄位(以及它們的型別)最適合你的解法。

如果你想進一步探索欄位和屬性的主題,請參閱 Groovy 文件中的 第 3.3 章 欄位與屬性。


出處

靈感來自某知名公司的面試題目。
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Groovy Exercism

準備好開始 機器人模擬器 了嗎?

註冊 Exercism,透過 66 個練習 和真人引導來學習並精通 Groovy,全部免費。