この記事はSmalltalk Advent Calendar 201614日目の記事です。
ある程度プログラミング経験がある人を対象にしています。特に、一度触ってみたがよくわからなかった、という人向けです。
環境構築
まず最初は、Squeak Smalltalkの、有志によって日本語化された4.4-jaをオススメします。
環境構築は、ダウンロードしてzipを解凍、起動するだけでお手軽です。
最新版の5.1は4.4に比べて非常に高速になっているので、本格的に使用する場合は乗り換えた方が良いです。Windows/Linuxでの日本語表示・インライン入力対応は以下の記事を参照してください。
- Squeak5 on Windows7で日本語インライン入力に対応させる - レガシーコード生産ガイド
- Squeak5.1 / fcitx / Linux Mint で日本語インライン入力 - レガシーコード生産ガイド
なお、Pharo Smalltalkという処理系も、特に本格的なソフトウェア開発にはオススメです。しかし、macOS以外での日本語入力は現時点では厳しいようです。
はじめに取り組むこと
自由自在Squeakプログラミングの1〜8章と10章を読むことで、簡単なツールとゲームなら作れるようになると思います。10年前に出版された本ですが、現時点でも問題ありません。
この書籍は著者によってPDFが公開されていたのですが、現在繋がらないようです。PDFファイル置き場にはまだ残っています。
イライラしないために
他のプログラミング言語・環境の延長線上のつもりでSmalltalkを触ると、かなりイライラしてやめたくなる人も多いと思います。実際に、少し触ってやめてしまった方もちらほら見かけます。
次に挙げるいくつかのアドバイスは、Smalltalkに早めに慣れて、そのイライラを極力短くするためのものです。実際にプログラミング初心者数名に取り組んでもらい、効果があったものを選んでいます。
完全に慣れて、もはや必要ないと思ったら無視して構いません。
用語などは上記「自由自在Squeakプログラミング」を参照してください。
printデバッグはやらない
Transcript
を使うことでprintデバッグのようなことはできますが、やらないようにしましょう。コード実行時の値を知りたい場合は、self halt.
を差し込んだり、対象のオブジェクトにinspect
メッセージを送ります。REPLのような事がしたい場合も、print it
ではなくinspect it
を使ってください。
これによって、実際に生きているオブジェクトを覗きこんでいくという感覚を得ることができます。
ただし、Morphicの一部メソッドなど、self halt
やinspect
を使うとまずいことになるものもあります。どうまずくなるか、は体験した方が楽しいです。イメージのセーブはこまめにしておきましょう。
デバッガをすぐ閉じない
何らかのエラーが出てデバッガが開いた場合、すぐに閉じずに、表示されたリストから実行したメソッドを選んで覗いて見てください。(わかる人へ:スタックトレースから選んでください)
デバッガの画面から、メッセージが送られたオブジェクトのインスタンス変数等を選択し、inspectして覗いてください。
これによって、エラーをその場で詳細に分析できるという感覚を得ることができます。また、null安全についての別の見方も得られるでしょう。(参考:null 安全が叫ばれるのを横目に nil の賢さを競う - Qiita)
どこまでもブラウザで開いていってみる
普通のプログラミング言語・環境では、コアのライブラリのコードを覗いたり、書き換えて使うことはあまり気軽にはできないと思います。しかし(Squeak)Smalltalkでは、コアライブラリもユーザが書いたコードも、同様にその場で読んで書き換えることができます。
使い方がわからないメソッドがあったり、「こういうメソッドは無いのか」というものがあれば、どんどん調べて読んでいきましょう。また、不満があれば書き換えてしまっても問題ありません。(変更前にセーブはしておきましょう)
クラス・メソッド・変数を定義する前に使ってみる
他のプログラミング言語なら、定義していないクラスやメソッドを扱おうとしたり、宣言が必要なタイプの変数を宣言無しで扱おうとすると、コンパイルエラーや実行時エラーになります。(Squeak)Smalltalkでも同様にエラーにはなりますが、そのエラー時に「まだ定義されてないけど、作る?」「タイプミスみたいだけど、修正する?」と聞いてきてくれます。
それをミスと捉えず、むしろ積極的に引き起こして、定義はSmalltalk環境にやらせてみましょう。いちいちブラウザでカテゴリやクラスを開くより早いので、慣れると事前に定義することの方が少なくなります。
また、徹底的に遅延結合させるという、Smalltalk Wayの一つに慣れ親しむきっかけになると思います。(参考:「ソフトウェア工学」は矛盾語法か?)
その後
ある程度書けるようになった時点(自由自在Squeakの8章あたりまで)で、Happy Squeaking!! -オブジェクト指向再入門- [第五回:デザインパターン事始め]と使わないと損をするModel-View-Controller、余裕があればSmalltalk ベストプラクティス・パターンに目を通しておくと良いでしょう。
Webアプリケーションなどを作りたくなったら、現時点ではPharoの方が有利かもしれません。Pharo by Exampleの日本語訳が役に立つでしょう。
何か作ったら、是非公開してみてください。楽しみにしています。
ほな、また……。