Smalltalker の FizzBuzz
しつこく Fizz-Buzz。Smalltalker が FizzBuzz 問題をどう解くか、Smalltalker の 頭の中を解りやすく大公開というエントリーに酷く心地よさを感じたので。
あたしも一発目に頭に浮かんだのはこんなんでした。(ちと・・いやかなり中途半端な Smalltalk度 ですが(^^;)
(1 to: 100) collect: [:each | each asFizzBuzz ]
Integer >> #asFizzBuzz (self \\ (3 * 5)) isZero ifTrue: [^'FizzBuzz']. (self \\ 3) isZero ifTrue: [^'Fizz']. (self \\ 5) isZero ifTrue: [^'Buzz']. ^ self
コレクションクロージャメソッド なのは あんまり珍しくはなくなっちゃいましたが、Smalltalker は Integer に #asFizzBuzz を追加したくなっちゃうのがミソです。
Smalltalk 上での プログラミングは、 環境そのものを自分好みに変えていくことです。だからInteger だろうが String だろうがお構いなしに変えちゃいます。それが心地よくもあり、(普段暮らしている OS 上でなんかやろうとすると)不便でもあるところです。