Foreach文
コレクション do: [ :変数 | 文 ].
SmalltakはLispの影響を受けており、言語構文として反復構文が存在しない。そのため、#do:セレクターとブロックオブジェクトを使ったメッセージで表現する。上記ではメッセージを受け取るレシーバーをコレクションと表記しているが、#do:は#do:を実装しCollectionあるいはIterableを継承していれば良く、入力ストリームや高々1回しか実行しないオブジェクト、無限数列などもレシーバーとして指定できる。また、イテレーターのような反復状態を持つ専用のクラスが必要なく#do:のメソッドだけで完結するため、C++のような方式に比べ実装が単純になっている。またフィルターも容易であり、フィルター用のクラスも多数存在する。
:for 変数 in イテレータブルコレクション : 文1 if 条件式: 文2 break 文3 else 文4
条件式が真であった場合、文2が実行された後のbreak文で、for文のループを中断する。
elseのブロック文4は、for文のループを完走した場合のみ実行され、breakで中断した場合は実行されない。