今日から使おうSmalltalk
第26回 Smalltalk勉強会
吉田 翔
1
第26回Smalltalk勉強会
Smalltalkのインストール
Squeak 4.1-ja(All in one)がおすすめ
Mac, Linux, Windows全てに対応
http://swikis.ddo.jp/umejava/48
zipファイルを解凍してすぐに使える
使い方は環境編を参照
2
第26回Smalltalk勉強会
Smalltalkが分からない
文法 開発環境
array := Array with:-1 with:1 with:100.
array inject:  Float infinity negated
into:[:v1 :v2 | v1 max: v2 ].
3
第26回Smalltalk勉強会
Smalltalkのプログラミングの流れ
Workspace,SytemBrowserを起動
プログラムを記述
プログラム実行
開発環境編
文法編
開発環境編
4
基本文法編
第26回 Smalltalk勉強会
吉田 翔
5
第26回Smalltalk勉強会
コメント
ダブルクオーテーションで囲む
"0 notNil"
ダブルクオーテーションをコメントに含める場合
" このように「""」2回記述します"
6
第26回Smalltalk勉強会
文の区切りと代入
文の区切り
代入(assignment)
.
:=
ピリオド
コロン,イコール
昔のSmalltalkのコードではアンダーバー_
7
第26回Smalltalk勉強会
リテラル(数字)
5.
1.414.
-1.
122244567.
10e7.
2r100. "2進数 "
8r12. "8進数"
16rFF. "16進数"
8
第26回Smalltalk勉強会
文字
文字列
リテラル(文字と文字列)
$a "文字の前に$を付けます"
$b
$-
'Smalltalk' "シングルクオーテーションで囲む"
"「'」を文字列に含める場合は2回続けて書く "
" 文字列結合は「,」 "
9
第26回Smalltalk勉強会
リテラル
シンボル
配列
#apple.
#pineapple.
システム内に1つしか存在しない文字列
#($a 'smalltalk' 42.19).
#(#(1 2) 3).
#(a b c) ===> #(#a #b #c)
要素のオブジェクトは統一しなくてもいい
10
第26回Smalltalk勉強会
擬変数
true
false
nil
self
super
thisContext
自身を表す
メソッドの検索の際,スーパークラスのものを表す
自身実行中のコンテキスト(システムの実行状態)を表す
11
第26回Smalltalk勉強会
メッセージ式
3 negated -3
オブジェクト メッセージ
オブジェクトにメッセージを送る
Smalltalkのプログラム
1. 単項メッセージ式
2. 2項メッセージ式
3. キーワードメッセージ式
12
第26回Smalltalk勉強会
単項メッセージ(Unary messages)
4 sqrt. "平方根"
12 i. "虚数"
1 asFloat. "浮動小数とする"
#(1 2 3) first. "最初の要素を取り出す"
引数を取らないメッセージ
13
第26回Smalltalk勉強会
2項メッセージ(Binary Messages)
4 + 1.
10 / 2.
8 // 3.
1 < 2.
'Small','talk'.
記号 +, -, ,,!, /, &, =, >, ¦, <, , @を組み合わせた名前を
もつメッセージ
主に数学の2項演算子(2つのデータに対する演算)を
表すためのもの
14
第26回Smalltalk勉強会
キーワードメッセージ(Keyword Messages)
"3番目の要素を取り出す"
#($z $y $x) at: 3.
"10から100の間の数ならばtrueを返す"
11 between: 10 and: 100. 11.between(10,100)
"2番目の要素をhelloに置き換える"
#($a $b $c) at: 2 put: 'hello'.
1 to: 10 by: 2 do:[:v | Transcript cr; show:v ].
引数を取るメッセージのうち, 2項メッセージ以外.
メッセージの終わりにはコロン(:)が必ず付く
15
第26回Smalltalk勉強会
メッセージの優先順位
四則演算の優先順位がない.
優先順位を付けるには括弧を付ける.
単項 > 2項 > キーワード
基本は左優先順
単項,2項,キーワードメッセージが,
1つの文に含まれていた場合には以下の優先順位で実行
16
第26回Smalltalk勉強会
メッセージの優先順位(例)
基本は左優先
単項 > 2項 > キーワード
3 + 4 sqrt
(3 + 4) sqrt
1 2
21
17
第26回Smalltalk勉強会
練習問題
3 + 4 * 5.
3 + 4 sqrt.
50 + 4 sqrt between: 10 and: 100.
実行順序と実行結果を考えましょう
18
第26回Smalltalk勉強会
ブロック
block := [:x :y | x + y].
block value: 1 value: 2.
block valueWithArguments: #(3 4)
主に制御構造に用いられる
任意の時点で実行可能なプログラムの固まり
•function(x){x + 1}のようなもの
•(lambda (x) (+ x 1))
実行する際には,引数の数に応じて
value,value:等を送信する
19
第26回Smalltalk勉強会
カスケード
Transcript
show: 'Hello ';
cr;
show:'Squeak'.
Transcript show: 'Hello '.
Transcript cr.
Transcript show: 'Squeak'.
先頭オブジェクトに対してメッセージを連続的に
送信する際に用いる
; セミコロンを用いる
20
第26回Smalltalk勉強会
リターン
^
値を返す
キャレット
^ 1 + 2.
^ true.
21
第26回Smalltalk勉強会
制御文(条件分岐)
Float infinity > 0
ifTrue:[ Transcript show:'Yes!'. ]
ifFalse:[ Transcript show: ' NO... ' ].
22
第26回Smalltalk勉強会
制御文(繰り返し)
1 to: 10 by: 2 do:[:v | Transcript cr;show:v ].
| i | "一時変数"
i := 1.
[i < 10] whileTrue:[:v |
Transcript cr; show:v.
i := i + 2. ].
for(int i=1; i<=10; i=i+2)
int i=1;
while(i<10;){
i=i+2;
}
23
第26回Smalltalk勉強会
制御文(繰り返し)
#(1 2 3) do:[:v | Transcript cr; show:v ].
3 timesRepeat:[
Transcript show:‘Hello’].
24
第26回Smalltalk勉強会
Smalltalkのポイント
変数名にアンダーバーやダラーは使えない
擬変数には代入できない
算術演算の時は優先順位を注意する
whileTrue:はブロックオブジェクトに送る
配列の添字は1からはじまる
25
開発環境編
第26回 Smalltalk勉強会
吉田 翔
26
第26回Smalltalk勉強会
ワールドメニュー(World menu)
背景(ワールド)をクリック
開き方
27
第26回Smalltalk勉強会
Smalltalkの開発環境
ワークスペース(Workspace)
トランスクリプト(Transcript)
システムブラウザ(System Browser)
インスペクタ(Inspector)
メソッドファインダ(Method Finder)
デバッガ(Debugger)
覚えて欲しいツール
28
第26回Smalltalk勉強会
ワークスペース(Workspace)
プログラムを記述するためのエディタ
開き方
ワールドメニュー (World menu)の開く
開く メニュー
ワークスペース(Workspace)
29
第26回Smalltalk勉強会
トランスクリプト(Transcript)
実行結果を出力するためのウィンドウ
開き方
ワールドメニュー (World menu)の開く
開く メニュー
トランスクリプト(Transcript)
30
第26回Smalltalk勉強会
使いたくてたまらない人のために
Hello Smalltalkを表示してみましょう
必要なツール
ワークスペース
トランスクリプト
Transcript show: 'Hello Smalltalk'.
ワークスペースに以下のコードを記述
トランスクリプトにHello Smalltalkを出力する
31
第26回Smalltalk勉強会
プログラムの実行方法
do it
1.実行するプログラム
を選択して ALT(右ク
リック)+ クリック
2.「式を評価」を選択
使い方
32
第26回Smalltalk勉強会
プログラム結果の出力方法
print it
Transcriptに出力
1 + 3.
Transcript show: 1 + 3.
「式を表示」を選択
33
第26回Smalltalk勉強会
システムブラウザ
クラス検索,クラス定義を行なう
開き方
ワールドメニュー (World menu)の開く
開く メニュー
システムブラウザ(Browser)
34
第26回Smalltalk勉強会
インスペクタ
オブジェクトを調べるツール
xをインスペクタで確認
オブジェクトを選択,ALT(右クリック)押し
ながらクリック.
「式をインスペクト」を選択
35
第26回Smalltalk勉強会
インスペクタを使ってみよう
"配列の要素をランダムで取り出す"
x := #(#(7 9) #(3 1)) atRandom.
x. "インスペクト"
x inspect. "Do It"
どちらの配列がxに代入されたか調べてみる
または
36
第26回Smalltalk勉強会
メソッド・ファインダ(Method Finder)
メソッド検索をするツール
ワールドメニュー (World menu)の開く
開く メニュー
メソッド・ファインダ(method finder)
37
第26回Smalltalk勉強会
ノーティファイア
デバッカを開く
エラーの際に開く警告表示
最初は,中止ボタン(Abandon)でも構わない
38
第26回Smalltalk勉強会
デバッガ(Debugger)
使い方は「自由自在Squeak プログラミング」を参考にしてください
39
第26回Smalltalk勉強会
ショートカット
Mac Windows
ワークスペース
を開く
CMD + k ALT + k
トランスクリプト
を開く
CMD + t ALT + t
システムブラウザ
を開く
CMD + b ALT + b
do it CMD + d ALT + d
print it CMD + p ALT + p
CMD(ALT) + ピリオド(.)
強制終了(割り込み)
40
第26回Smalltalk勉強会
終了方法
ワールドメニューの「保存して終了」または「終了」
実行中のプログラム(プログラムの実行状態)を
イメージに保存できる
再び起動した際に,前回の状態が再現される
41
第26回Smalltalk勉強会
イメージの保存について
種類 内容
保存
(save)
現在の状態を現在使用しているイメージに保存
別名保存
(save as)
別のイメージに保存に状態を保存.イメージ名
を決定する.保存後は,新たに作成したイメー
ジ画面が表示
新しい版として保存
(save as new version)
自動的にイメージ名にバージョン番号が付加さ
れる
保存して終了
(save and quit)
現在の状態を現在使用しているimageに
保存して終了
イメージとはSmalltalkのオブジェクトを
ファイルにダンプしたもの
42
何か作りましょう
BMI計算ツールを作ろう
43
第26回Smalltalk勉強会
BMI
BMI = 体重[kg] (身長[m] 身長[m])
標準体重 = 身長 身長 x 22
日本肥満学会によると
BMIが22の場合が標準体重
BMIが25以上の場合を肥満
BMIが18.5未満である場合をやせ
9//2. “商”
92. “余り”
44
第26回Smalltalk勉強会
UIを使ったツールにするために
h := FillInTheBlank request:'身長(cm)は?'
initialAnswer:'0'.
“戻り値はByteStringなので
変換する”
h asInteger .
45
第26回Smalltalk勉強会
UIを使ったツールにするために
Utilities informUser: '計算中'
! during: [(Delay forSeconds: 1) wait].
1秒間Squeakの画面上に計算中と表示する
46
第26回Smalltalk勉強会
| h w bmi sw |
h := FillInTheBlank request: '身長(cm)は?' initialAnswer: '0'.
h asInteger <= 0 ifTrue:[ ^false ].
w := FillInTheBlank request: '体重(kg)は?' initialAnswer: '0'.
h asInteger <= 0 ifTrue:[ ^false ].
bmi := w // ( ( h*h ) //10000 ).
sw := ( h*h*22 ) // 10000
Utilities informUser: '計算中'
! during: [(Delay forSeconds: 1) wait ].
一部
47
(おまけ)
クラスとインスタンス編
第26回 Smalltalk勉強会
吉田 翔
48
第26回Smalltalk勉強会
1.クラスカテゴリ作成
2.クラス名作成
3.メソッドカテゴリ作成
4.メソッド作成
クラス定義
クラス定義はクラスブラウザを用いる
49
第26回Smalltalk勉強会
クラス定義 - クラスカテゴリ作成
1. ALT(右クリック)を
押しながらクリック
2.「項目を追加」を選択
50
第26回Smalltalk勉強会
クラス定義
スーパークラス名 subclass: #クラス名
instanceVariableNames: 'インスタンス変数名1 インスタンス変数名2'
classVariableNames: 'クラス変数名1 クラス変数名2'
poolDictionaries: 'プール辞書名'
category: 'クラスカテゴリ'
必ずスーパークラスを持つ
クラスブラウザのコードペインに記述
51
第26回Smalltalk勉強会
クラス定義
クラス定義の例
52
第26回Smalltalk勉強会
クラス定義の反映
accept
ショートカット : CMD(ALT) + s
•記述した定義等を保存(変更通知)
•クラス定義,メソッド定義を追加・変更の際行なう
•ALT(右クリック) + 了解 で行なう
初めてのacceptの際には右のフォーム
が表示されるのでイニシャルを入力
53
第26回Smalltalk勉強会
メソッドの定義
messageSelectorAndArgumentNames
"comment stating purpose of message"
| temporary variable names |
statements
メソッドのテンプレートの意味
1行目はメソッド名
2行目はコメント
4行目は一時変数の定義
5行目以降はメソッドの動作記述
54
第26回Smalltalk勉強会
インスタンスの生成
x := Human new.
クラスにnewメッセージを送信
55
(おまけ)基本クラス編
第26回 Smalltalk勉強会
吉田 翔
56
第26回Smalltalk勉強会
基本クラスの紹介
Number
Block
Collectionクラス, イテレータ等
Bag, Set
Array, OrderedCollection
Dictionary
文字列(String)
Stream
他にも色々なクラスがあります
57
(おまけ)応用編
第26回 Smalltalk勉強会
吉田 翔
58
第26回Smalltalk勉強会
Workspaceの内容の保存
をクリックし,save contents to file...を選択
59
第26回Smalltalk勉強会
ソースの管理方法(Squeak)
imageごと
csファイル(今回は紹介しない)
stファイル
Monticello(今回は紹介しない)
Metacello(第23回Smalltalk勉強会)
60
第26回Smalltalk勉強会
イメージ単位のバックアップ
imageフォルダをコピー
61
第26回Smalltalk勉強会
stファイルでの保存
プロジェクト名,クラス名またはメソッド
名で右クリックしファイルアウト
62
第26回Smalltalk勉強会
stファイルの読み込み
開き方
ワールドメニュー (World menu)の開く
開く メニュー
ファイル・リスト
ファイル・リストからstファイルを読み込む
63
第26回Smalltalk勉強会
stファイルの読み込み
ファイル・リストよりstファイルを指定し,
ファイルインする
64
第26回Smalltalk勉強会
Monticello
FTP,HTTPサーバに保存することが可能
65
おわりに
66
第26回Smalltalk勉強会
現在チュートリアル作成中
1. Squeakインストール
2. Squeakの基本操作
3. 基本文法
4. クラス定義等
5. 基本クラス
5.1.Number
5.2.Block
5.3.Collectionクラス,
イテレータ等
5.4.文字列(String)
5.5.Stream
6. デバック
7. 例外処理
8. ツール
9. 探索の旅
10.スレッド処理
11.Morph ?
12.パッケージ管理
13.Web
13.1.Seaside
13.2.Iliad
13.3.Magma
13.4.JSON, XML
14.正規表現
15.Traits
他にも要望があればどうぞ
67
Smalltalkをもっと勉強したい人のために
68
第26回Smalltalk勉強会
おすすめ参考文献
1) 自由自在Squeakプログラミング
2) Smalltalkで学ぶオブジェクト指向プログラミングの本質
3) Squeak by Example http://www.squeakbyexample.org/
4) Smalltalkイディオム
5) ケント・ベックのSmalltalkベストプラクティス・パターン
書籍
69
第26回Smalltalk勉強会
おすすめ文献
Cincom Smalltalk Daily(動画) http://
www.cincomsmalltalk.com/userblogs/cincom/blogView?
content=smalltalk_daily
Smalltalkのtは小文字です http://d.hatena.ne.jp/sumim/
どう書く?org http://ja.doukaku.org/
サイト
70
第26回Smalltalk勉強会
ML
Squeak-ja http://www.smalltalk.jp/mailman/
listinfo/squeak-ja
SML http://www.smalltalk.jp/SML/
Squeak-dev http://
lists.squeakfoundation.org/mailman/listinfo/
squeak-dev
Pharo http://lists.gforge.inria.fr/cgi-bin/
mailman/listinfo/pharo-users
71

今日から使おうSmalltalk