導入
「Pharo でコードを書いてみよう(1)」で BlockClosure を紹介しましたが、実際にどのような場面で使用されているのかを示します。BlockClosure を使って実行を遅延するとどんなメリットがあるのか、より理解できると思います。
Smalltalk における判断のしかた
Smalltalk にも「if 文のようなもの」があります。どうしてそんな言い方をするかというと他言語で言う if 文とはちょっと実装方法が違うのです。
まずは以下の文を Playground で Do it してください。
3 = 3
ifTrue: [Transcript show: 'O'; cr]
ifFalse: [Transcript show: 'X'; cr]
Transcript に O が表示されたと思います。
3 = 4
ifTrue: [Transcript show: 'O'; cr]
ifFalse: [Transcript show: 'X'; cr]
今度は、Transcript に X が表示されたと思います。
よく観察すると、いわゆる if 文ではなく、ifTrue:ifFalse: メッセージであること、BlockClosure が使用されている事に気づくと思います。
Smalltalk における真偽値の扱い
3 = 3
これを Inspect it すると、True オブジェクトであることがわかります。
3 = 4
これを Inspect it すると False オブジェクトであることがわかります。
つまり先程示した「if 文のようなもの」は、実は True もしくは False オブジェクトに ifTrue:ifFalse: メッセージを送っているのです。System Browser でそれぞれ見てみましょう。
まず True クラスからです。

True クラスの ifTrue:ifFalse: メソッドは、trueAlternativeBlock に value メッセージを送るように実装されています。
次に False クラスです。

False クラスの ifTrue:ifFalse: メソッドは、falseAlternativeBlock に value メッセージを送るように実装されています。
ついでに Boolean クラスの ifTrue:ifFalse: メソッドも見ておきましょう。

自身のオブジェクトに subclassResponsibility メッセージを送っています。これは「サブクラスで応答しなければいけません」というエラーになります。Smalltalk はデバッガーを起動してエラーがあった事をあなたに伝えてきます。
現状は True クラスも False クラスも ifTrue:ifFalse: メソッドを実装しており、メッセージに応答できるので問題ありませんが、もし Boolean クラスのサブクラスに ifTrue:ifFalse: メソッドが実装されていないと、メソッドサーチによりスーパークラスである Boolean クラスの ifTrue:ifFalse: メソッドが実行されてしまいます。Boolean クラスの ifTrue:ifFalse: メソッドが実行されると subclassResponsibility メッセージが送信されてエラーになります。
おわりに
ifTrue:ifFalse: メソッドのように実装するクラスによって動作が変わることを「多態性(ポリモーフィズム)」と言い、オブジェクト指向言語において重要なテクニックです。
Smalltalk の「if 文らしきもの」の正体について理解できたでしょうか? Smalltalk において if 文は構文ではなく、オブジェクトへのメッセージ送信、BlockClosure による遅延実行、そしてクラスによって動作(ふるまい)を変える多態性によって実現されています。