Takunojiのプログラミング・プレイグラウンド(遊び場)

Javaプログラミングを基本にして、ゲーム作成に必要なことの調査結果、やったら面白そうなことなどを記載します。プログラミングのススメ的なことも記載します。プログラミングで楽しく遊ぶために色々と記載して行きます。

Microbit & Swift Play Grounds 〜ボタン押下イベント処理〜

https://blog.hatena.ne.jp/Takunoji/takunoji.hatenablog.com/edit?sidebar=category

今回は、マイクロビットのボタンを押下した時の処理を行います、処理内容としては以下の2パターンを作成します。

1. Aボタンを押下

LEDの部分に「Hello World」を表示します。

 

2. Bボタンを押下

ハートマークを表示します。

<実行結果>

ここのコードを見てみます。

 

clearScreen()

onButtonPressed(.A, handler: {

    let textToDisplay = "Hello World"

    showString(textToDisplay)

})

onButtonPressed(.B, handler: {

    let imageToDisplay = iconImage(.heart)

    imageToDisplay.showImage()

})

 

こんな感じになります、「onButtonPressed()」の引数に「.A」と「handler」にメソッド(関数)を渡しています。

JavaとかJSなどでよく使用する「ラムダ式」の様なものでSwiftでは「クロージャ」と呼ぶ様です。WikiPedia参照

つまり「『.A』のイベントを受けたらhandlerの処理を行います」という処理になります。

下に続く処理も同様です。

「let」に関して

以前、letは定数を示すもので値を下の様に変更するとエラーになります。と記載しました。

let value = "定数"

value = "他の値"

 

しかし、上のコードlet imageToDisplay = iconImage(.heart)の様に変数「imageToDisplay」にオブジェクトを代入している場合は固定値「オブジェクト」が変わらないので中身の値を変更しても大丈夫という虚をついた様なルールがあるので注意です。

余談

Javaでの定数の宣言方法は「final」という予約語を使用します。

コードに書くと下の様になります。

<エラーになるケース>

final String value = "定数";

https://blog.hatena.ne.jp/Takunoji/takunoji.hatenablog.com/edit?sidebar=category

value = "他の値";

<エラーにならないケース>

final MyClass cls = new MyClass();

cls.setValue("定数");

cls.setValue("他の値");

 

上の様にオブジェクト(クラスのインスタンス)を設定している場合はエラーになりません。「cls」の中にはオブジェクト(クラスのインスタンス)が入っていて、そのオブジェクト自体を変更したわけではないのでOKということです。

自分はここに気がつくのに結構な時間を要しました。。。

 

でわでわ。。。