トラック
/
Groovy
Groovy
/
演習
/
ロボットシミュレーター
ロボットシミュレーター

ロボットシミュレーター

初級

説明

ロボットシミュレーターを書いてみましょう。

ロボット工場の試験施設では、ロボットの動きを検証するプログラムが必要です。

ロボットにできる動きは3つあります。

  • 右に曲がる
  • 左に曲がる
  • 前進する

ロボットは、無限に広がる仮想のグリッド上に置かれ、{x,y}座標(たとえば{3,8})の位置で、north、east、south、westのいずれかの方向を向いています。座標は北と東に向かって大きくなります。

その後、ロボットはいくつかの命令を受け取り、試験施設はロボットの新しい位置と、向いている方向を検証します。

  • 文字列"RAALAL"は、次の意味です。
    • 右に曲がる
    • 2回前進する
    • 左に曲がる
    • 1回前進する
    • もう一度左に曲がる
  • たとえば、ロボットが{7, 3}でnorthを向いてスタートするとします。この一連の命令を実行すると、ロボットは{9, 4}でwestを向いているはずです。

Groovyのプロパティとフィールド

この演習では、スタブがgetX()のようなゲッターを定義しているのに、テストは.xのように値へ直接アクセスしていることに気づいたかもしれません。これはGroovyがプロパティを定義する仕組みによるものです。順を追って見てみましょう。

  • フィールドとは、クラス、インターフェース、トレイトのメンバーで、データを格納するために使われるものです。
  • プロパティとは、クラスの外部から見える特徴です。

Groovyのプロパティのポイント:

  • Groovyは、privateでないフィールドに対してゲッターとセッターを自動生成します(フィールドがfinalの場合はゲッターのみです)。
  • プロパティには名前でアクセスでき(この演習のテストのように)、透過的にゲッターやセッターが呼び出されます。
  • 慣例として、Groovyはゲッターやセッターさえあれば、それを裏付けるフィールドがなくてもプロパティとして認識します。

この演習では、適切な実装を促すために、必要なゲッター(つまり上記のとおりプロパティ)だけを指定しています。解答にとってどのフィールド(とその型)が最適かは、自由に決めてかまいません。

フィールドとプロパティについてさらに深く知りたい場合は、Groovyのドキュメントにある3.3 フィールドとプロパティを参照してください。


出典

とある有名企業の面接の質問に着想を得たもの。
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Groovy Exercism

ロボットシミュレーターを始める準備はできましたか?

Exercismに登録すれば、66個の演習、そして本物の人間によるメンタリングとともに、Groovyを学んでマスターできます。すべて無料です。