はじめてのMorphicチュートリアル(第6回)「initializeメソッド」

前回MyMorphに追加したinitializeメソッドを見てみよう。

initialize
    super initialize.
    self extent: 16@16

1行目は何のメソッドの定義なのか示しており、この場合は追加したい単項メッセージのinitializeを書いている。

2行目はsuper initializeとなっている。第4回で説明したように、モーフとしての性質をMorphから受け継ぐために、MyMorphの親クラスをMorphに設定している。initializeメッセージを受け取ったときにモーフとして行うことは、Morphクラスのinitializeが定義しているので、super initializeというメッセージを送って利用している。このように、MyMorphの親クラス(この場合Morph)で定義されたメソッドを使う場合にはsuperに対してメッセージを送るようにする。

3行目は、第2回で学んだモーフの大きさを変えるメッセージ extent: を用いて、モーフの大きさを16×16ピクセルにしている。

以上、メソッド本体の2行によって、モーフの初期化を完了させつつ大きさを設定していることがわかる。

続いてモーフの色も変えてみよう。モーフの色は、colorメッセージを用いて取得し、色を引数としてcolor:メッセージを送ることで設定できる。

Morph new color. "Color blue"

MyMorphの色を赤に変えたければ、initializeメソッドを以下のように変更すればよい。

initialize
    super initialize.
    self extent: 16@16.
    self color: Color red

今まで明示的には述べてこなかったが、モーフ(や他のオブジェクトに)メッセージを送る式をメッセージ式と呼ぶ。例えば、super initializeやself extent: 16@16などがメッセージ式にあたる。複数のメッセージ式は、ピリオド(.)によって区切る必要がある。最後のメッセージ式についてはピリオドを省略しても良いため、上のself color: Color redの後にはピリオドがない。

なお、1行目のメッセージの定義部分や、後で紹介する値を返却する部分などにはピリオドを付けてはいけない。

PlaygroundでいつものようにMyMorphを生成すれば、画面上に小さな赤い正方形が現れるだろう。

MyMorph new openInWorld.

blueやredのように、Colorクラスに送って作りだせる色の種類は以下のようにして知ることができる。

Color class selectorsInProtocol: 'defaults'.

上記を選んでCommand-P(Alt-P)を押すと、コメントアウトされたメッセージ名が表示される。

"#(#black #blue #brown #cyan #darkGray #defaultColors #defaultColors2 #defaultColors3 #defaultColors4 #gray #green #lightBlue #lightBrown #lightCyan #lightGray #lightGreen #lightMagenta #lightOrange #lightRed #lightYellow #magenta #orange #paleBlue #paleBuff #paleGreen #paleMagenta #paleOrange #palePeach #paleRed #paleTan #paleYellow #pink #purple #red #tan #transparent #veryDarkGray #veryLightGray #veryPaleRed #veryVeryDarkGray #veryVeryLightGray #white #yellow)"

蛇足だが、固定的な色ではなく毎回異なる色にしたい場合には、Color randomを用いる。

initialize
    super initialize.
    self extent: 16@16.
    self color: Color random

こうすると、MyMorphを生成するたびにいろんな色で正方形が表示される。

(第6回おわり)