第3回 メッセージの詳細(4月26日)

今日の課題

■ ブロック

ブロックは、1個以上のステートメントを束ね持つオブジェクトである。大括弧で1個以上のステートメントを囲むことで表記する。C言語では、ステートメントを中括弧{ }で囲み、{ }をすぐに実行するが、Smalltalk では、動けと言われるまでは実行されず、また、何度も実行することができる。

準備

下記の例題1の準備として、下記のオブジェクトを定義しよう。

例題1

下記を1行ずつ評価してみよう。

b := Commet new
b appear
x := [ b perform: 500. b perform: 200. b perform: 50 ]
x value

(ブロックには引数を渡すことができる。)

z := [: tm | b perform: tm. b perform: (tm + 400). b perform: (tm / 2)]
z value: 400
z value: 1000

■ メッセージによる制御構造

プログラムの制御は、以下のメッセージを送ることで実現される。

例題2

ifTrue: の使用例

c := Commet new
c appear
( 100 < 200 ) ifTrue: [ c perform: 100 ]
( 100 > 200 ) ifFalse: [ c perform: 100 ]
( 100 > 200 ) ifTrue: [ c perform: 100 ] ifFalse: [ c perform: 2000 ]

whileTrue: の使用例(whileTrue: の左側がブロックであることに注意)

i := 1.
[ i < 10 ] whileTrue: [ c perform: ( i * 100 ). i := i + 1 ]

■ 小レポート

流れ星のクラス Commet を次のように改良しよう。

ヒント

小レポート作成要領

次回、演習の開始時に集めます。


(C) 2007.4.22 by tokuhisa