パラメータ 5. 川を渡る

キャラクターをステージの好きな位置に移動する.placeメソッドに向きを指定できるプロパティが追加されました。同じ.placeでも
前ステージやったのはこういう形でした。

今回はこうです。

facing:が2番目のパラメータとして追加されていますね。facingにもたせるべき値は向きを示す東西南北の情報ですが、説明文によるとDirection.east、Direction.west、Direction.north、Direction.southという「列挙」という形式で指定するとあります。列挙がなにかはここではあまり気にしなくて良いでしょう。Bool型がtrueとfalseしか受け付けないように、予め決まった候補だけを指定できるものと考えておいてください。ただしDirectionは省略して、.west、.southなどドット以降だけで大丈夫とも書かれています。というか、予測候補には単にwest、southとドットもなしで出てくるし、実際それでエラーにもならないみたいですね。まぁ、これは.placeメソッドの設計がたまたまそうであるということで、常にメソッドのパラメーターはそういうものである、ということではないので、ここではそういうものだと思っておきましょう。いつか自分でメソッドを設計することになったら、自分でその辺りも決めることになります。

今回、expertと打つのがめんどくさいので省略してexとしました。その場合、他のあらゆる部分でもそれに統一していることに注目してください(もちろんいままで通りexpertとしてもいいですし、全然別の名前をつけてみてもOKです)。

ナビゲーションとしては、「行き止まりまで進みつつ、途中見つけた宝石を取っていく」と「それをした後、突き当たりにあるスイッチを操作。また左右曲がれる方向に曲がる」という2つの関数を作成しました。スイッチ操作は上げるべき箇所と下げるべき箇所があるので、さっそくパラメータをもたせる技を活用してみました。以前のステージであったように、func文の先頭行にある()にup:boolと書いておきます。

そうするとupという名前でtrueかfalseのどちらかを受け付けるようになります。そして関数内の処理で実際にturnLockする時のupにupを指定します。

ややこしいですが、ひとつめのupはturnLockメソッドのパラメーターを区別する名前、:の後の2つ目のupはfunc文で決めた変数の名前です。赤字部分同士が対応付いています。

もし、区別しやすくするなら、それぞれisUpと変えてもOKです。

これで、上げるか下げるかだけは都度変更できる関数が実現し、一箇所違うだけなのにわざわざ別々の関数を用意する必要がなくなりました。

改善希望!役に立った! (+3 rating, 3 votes)
読み込み中...

“パラメータ 5. 川を渡る” への1件の返信

  1. ワープを使ってみました

    ———————————————–
    let expert = Expert()
    var count = 1

    func gem(Column:Int, Row:Int) {
    world.place(expert, facing: .west, atColumn: Column, row: Row)
    expert.collectGem()
    }
    func warp(roop:Int, C:Int, R:Int) {
    var count = R
    for i in 1 … roop {
    gem(Column: C, Row: count)
    count += 1
    }
    }

    warp(roop: 5, C: 5, R: 1)
    warp(roop:1, C:4, R:5)
    warp(roop:4, C:1, R:5)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です