× 無料のユーザー登録をすると学習状況を管理することができるようになります

Smalltalk入門 (全16回)

純粋オブジェクト指向言語として他言語に大きな影響を与えたSmalltalkについて解説していきます。

このレッスンでは Pharo 1.4 を使用しています。

#01 Smalltalkとはなにか?
2013年2月21日
Smalltalkは「Small Talk」や「SmallTalk」ではないので間違えないようにしましょう。
2013年2月21日
今回のレッスン動画作成にあたっては、津田塾大学の阿部和広先生、合同会社ソフトウメヤの梅澤真史様、山梨学院大学の伊藤栄一郎先生にご協力いただきました。この場を借りてお礼を申し上げます。
#02 Pharoを起動してみよう
2013年2月21日
Imageを保存すると「イメージ名.image」「イメージ名.changes」の2つのファイルが作られます。イメージの実行にはどちらも必要なのでこれらを移動したりコピーするときは必ず両方揃っているか確認するようにしましょう。
2013年2月21日
なお、Pharoはそのままでは日本語が表示できません。使えるようにするには「Worldメニュー→System→Settings→Apperance→Standard fonts」へ進み、Fontボタンをクリック、そこで現れるウィンドウで「Update」ボタンを押すと日本語フォントが現れるので好きなフォントを選択していただければ日本語が表示されるようになります。
2013年2月21日
マウスクリックで出るメニューは実はもう一つあります。「Option(ALT)+Shift+Click」でオブジェクトの「ハロー」が現れます。これを使えばそのオブジェクトを回転させたり、といった外観を操作することができます。ただ、今回のレッスンでは範囲外としました。興味がある方は調べてみてください。
#03 はじめてのSmalltalkプログラミング
2013年2月21日
Pharoにはチュートリアルも用意されています。Workspaceで「ProfStef go.」と入力して「do it」すれば始まりますのでさらに理解を深めたい方はお試しください。
2013年2月21日
Workspaceで何も選択せずに「do it」した場合、その行にあるコマンドが実行されます。
#05 変数を使ってみよう
2013年2月21日
今回説明した変数は「ローカル変数」と呼ばれるもので、この変数は必ず小文字から始まります(共有変数と呼ばれるものは大文字から始まります)。また_が使えないのに注意してください。変数名が複数の単語からなる場合、2語目以降の頭文字を大文字にしてあげましょう(例:myMessage)。
#06 メッセージの種類と優先順位
2013年2月21日
キーワードメッセージのセレクタが複数ある場合、その順番が違えばまったく違うメッセージとして認識されます。「to:from」と「:from:to」は別々に定義されていると考えておきましょう。
#08 System Browserを使ってみよう (1)
2013年2月21日
System Browserでは既存のクラスを見るだけでなく、自分でクラスを作ることもできます。アプリケーションを作る際にはこのブラウザを使って開発を行っていきます。
2013年2月21日
すべてのクラスには継承関係があり、最上位のクラスは「ProtoObject」です。すべてのクラスはそこから継承されており、System Browserの「Hierarchy」でその関係を見ることができます。
#09 System Browserを使ってみよう (2)
2013年2月21日
なお、どのメッセージがどのクラスで実装されているかを調べるにはメッセージをWorkspaceで記述して「Cmd+m(WindowsだとALT+m)」すれば一覧を見ることができます。
#10 数値を使ってみよう
2013年2月21日
(と)で囲むときは、あらかじめ内側を選択しておいて(を入力すると、閉じ括弧が自動的に付けられます。
#13 ブロックを使ってみよう
2013年2月21日
Smalltalkでは文の区切りは「.」なので、適宜改行を入れても動作には支障はありません。
[:x :y | x * y] value:10 value:20
は、
[:x :y | x * y] 
  value:10 
  value:20
と書いてもOKです。
#14 条件分岐をしてみよう
2013年2月21日
条件分岐において、あらかじめ取りうる値の候補が決まっている場合は次のような処理も可能です。他の言語でいうところのcase文になります。
#('red' 'green' 'yellow') atRandom caseOf: {
  ['red'] -> ['stop'].
  ['green'] -> ['go'].
  ['yellow'] -> ['caution']
} otherwise: ['n.a.']
2013年2月21日
なお、「=」は「値が同じかどうか」を調べます。一方「==」は「オブジェクトが同じかどうか」を調べるメッセージになります。
"例"
'ab' = ('a', 'b') --> true
'ab' == ('a', 'b') --> false
#16 配列の要素を処理してみよう
2013年2月21日
この命令で使っている:eachは変数名なので好きな名前をつけても問題ありません。
#(1 3 5) do:[:i | Transcript show:i; cr].
でもOKです。