Pharo by Example
Andrew P. Black Stéphane Ducasse
Oscar Nierstrasz Damien Pollet
with Damien Cassou and Marcus Denker
This book is available as a free download fromhttp://PharoByExample.org.
Copyright © 2007, 2008, 2009 by Andrew P. Black, Stéphane Ducasse, Oscar Nierstrasz and Damien Pollet.
The contents of this book are protected under Creative Commons Attribution-ShareAlike 3.0 Unported license.
You are free:
to Share — to copy, distribute and transmit the work
to Remix — to adapt the work
Under the following conditions:
Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.
• For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page:creativecommons.org/licenses/by-sa/3.0/
• Any of the above conditions can be waived if you get permission from the copyright holder.
• Nothing in this license impairs or restricts the author’s moral rights.
Your fair dealing and other rights are in no way affected by the above. This is a human-readable summary of the Legal Code (the full license):
creativecommons.org/licenses/by-sa/3.0/legalcode
Published by Square Bracket Associates, Switzerland.http://SquareBracketAssociates.org
ISBN 978-3-9523341-4-0
Contents
Preface
ix
I
Getting Started
1
Pharo
早巡
3
1.1
入門
. . . .
3
1.2
ワー
ー
. . . .
8
1.3
ー
送
. . . .
8
1.4
Pharo
ン 保存 終了
再開
. . . 10
1.5
ワー
ー
ン
. . . 11
1.6
ー ー
ー
. . . 13
1.7
. . . 15
1.8
見
. . . 16
1.9
見
. . . 19
1.10
新
定義
. . . 20
1.11
. . . 25
2
最初
ー
ン
27
2.1
Lights Out
ー
. . . 27
2.2
ー
作成
. . . 28
2.3
LOCell
定義
. . . 29
2.4
追加
. . . 31
2.6
LOGame
定義
. . . 34
2.7
. . . 37
2.8
ー
実行
う
. . . 40
2.9
Smalltalk
ー
保存 共有
. . . 43
2.10
章
. . . 48
3
文法早わ
49
3.1
文法要素
. . . 49
3.2
擬似変数
. . . 52
3.3
ー 送信
. . . 53
3.4
ン
. . . 54
3.5
ン
. . . 55
3.6
条件式
ー
要点
. . . 56
3.7
. . . 58
3.8
. . . 58
4
ー 構文 理解
う
61
4.1
ー
読 取
. . . 61
4.2
3
種類
ー
. . . 63
4.3
ー 式 組 合わ
. . . 65
4.4
ーワー
ー
切 目 見
ン
. . . 72
4.5
式 並
. . . 73
4.6
ー
ー
. . . 74
4.7
. . . 74
II
Developing in Pharo
5
Smalltalk
79
5.1
規則
. . . 79
5.2
あ
. . . 79
5.3
ン
ン
あ
. . . . 80
5.4
ー ー
あ
. . . 88
v
5.6
探索 継承 連鎖
い
. . . 92
5.7
共有変数
. . . 99
5.8
章
. . . 104
6
Pharo
ン 環境
105
6.1
概要
. . . 106
6.2
. . . 107
6.3
Monticello . . . 119
6.4
ン
[Explore] . . . 127
6.5
. . . 129
6.6
. . . 139
6.7
検索
. . . 140
6.8
ン
ン
ー ー
. . . 141
6.9
. . . 143
6.10
Smalltalk
ー
失う
あ
. . . 145
6.11
. . . 146
7
SUnit
149
7.1
. . . 149
7.2
重要
. . . 150
7.3
良い
書
? . . . 151
7.4
SUnit by example . . . 152
7.5
SUnit
. . . 156
7.6
SUnit
ー ワー
. . . 157
7.7
SUnit
高度 機能
. . . 160
7.8
SUnit
内部実装
. . . 161
7.9
ン
. . . 164
7.10
. . . 165
8
基本的
167
8.1
Object . . . 167
8.2
Number . . . 177
8.4
String . . . 181
8.5
Boolean . . . 183
8.6
. . . 184
9
ン
187
9.1
. . . 187
9.2
ン 種類
. . . 188
9.3
ン 実装
. . . 191
9.4
主要
例
. . . 192
9.5
ン
ー
. . . 202
9.6
ン 使う
ン
. . . 206
9.7
. . . 208
10
ー
209
10.1
二
要素 並
. . . 209
10.2
ー 対
ン
. . . 210
10.3
ン 対
ー 処理
. . . 211
10.4
ー
使う
. . . 219
10.5
. . . 222
11
Morphic
223
11.1
Morphic
歴史
. . . 223
11.2
ー
操作
. . . 225
11.3
ー
組 込
. . . 226
11.4
自由
ー
作
描
. . . 226
11.5
対話
ー
ン
. . . 230
11.6
対話機能
. . . 234
11.7
&
. . . 234
11.8
例題
. . . 237
11.9
ン
関
追加情報
. . . 241
vii
12
Seaside by Example
243
12.1
Seaside? . . . 243
12.2
. . . 244
12.3
Seaside
ン ー ン
. . . 249
12.4
XHTML
ン
ン
. . . 252
12.5
CSS:
ー
ン ・
・ ー
. . . 259
12.6
制御
ー 管理
. . . 261
12.7
ン
作成
ー
. . . 268
12.8
AJAX
利用
. . . 274
12.9
章
. . . 277
III
Advanced Pharo
13
283
13.1
ー
. . . 283
13.2
Smalltalk
復習
. . . 284
13.3
ン
ン
あ
. . . 286
13.4
階層
階層 並列 存在
. . . 287
13.5
Class Behavior継承
い
. . . . 290
13.6
Metaclassン
ン
あ
. . . . 292
13.7
Metaclass Metaclassン
ン
あ
. . . 292
13.8
章
. . . 294
14
ン
297
14.1
ン
ン
. . . 298
14.2
ー
. . . 302
14.3
辞書
. . . 305
14.4
環境
. . . 307
14.5
実行時 ン
. . . 309
14.6
理解
い
ー
ン ー
. . . 312
14.7
ー
. . . 316
14.9
章
. . . 320
IV
Appendices
A
くあ 質問
325
A.1
. . . 325
A.2
ン
. . . 325
A.3
. . . 326
A.4
Monticello
SqueakSource
使う
. . . 328
A.5
ー
. . . 329
A.6
正規表現 構文解析
. . . 329
Preface
Pharo
?
Pharo
Smalltalk
ン 言語・環境
実装
ー ン ー
新 い処理系
Pharo
古典的
Smalltalk-80
再実装
あ
Squeak
1派生
Squeak
主 実験的 教育向
開発
ー
作
対
Pharo
開発
凝縮
ー ン
ー ・
ー
目指
い
動的 言語・環境 研究
開発
頑丈 安定
ー
提供
努
Pharo
開発
ー ワー
Seaside
ン 実装用
使わ
い
Pharo
Squeak
あ
ン
問題 解決
い
Squeak
以前
ー
ン
異
Pharo
部分
MIT
ン
寄贈
ー
い
Pharo
2008
年
3
月
Squeak
3.9
ー
始
最初
1.0
ー
ー
ン
2009
年
7
月
31
日
ー
Pharo
Squeak
ー
い
取 去
一方
Squeak
ン
機能
取 入
い
例え
Pharo
True Type
ン
入
い
Pharo
本物
ー
ー
い
(
訳注
:Squeak
BlockContext
いう再帰
い
ー
実装
)
ー
ン ー
ー
ン
洗練
い
Pharo
極
高い移植性 持
い
仮想
ン
え
Smalltalk
書
い
・解析・変更
い
Pharo
・
ー
ン
教育向
ー
商用
開発環境
広い範囲 革新的
媒体
1Dan Ingalls et al., Back to the Future: The Story of Squeak, a Practical Smalltalk Written in
Pharo
重要 視点 背景
持
い
Pharo
過去 単
複
製 あ
い
Smalltalk
再 明いう
ン
ー
滅多 成功
Pharo
進化的
ン
ン
変化
方法 取
重要 新機能
開発 実験的
進
う
い
進化
Pharo
誤
受 入
い
意味
Pharo
一度 完璧 解決
目指
う
気持
え
小
変化 い
積 上
い
方
Pharo
う
い
う
Pharo
成功
貢献
い
こ 本 想定
い 読者
本
ー ン ー
公開
い
Squeak
入門書
Squeak by Example
2元
い
名 通
Pharo
Squeak
違い 反映
修正
Pharo
基本
先進的 話題
内容 多岐 わ
本
う
教え 本
あ
本 既
ン 言語 い
知
い 人 向
書
い
指向
ン
経験 役 立
う
本
Pharo
ン 環境
(
言語 関連 ー
)
紹介
一般的
実例 触
い
指向設計
技術 方 焦点 当
い
可能限 例
示 う 思い
(Alec Sharp
素晴
い
Smalltalk
本
3ン
い
)
上
Smalltalk
い
無料 本 他
あ
Pharo
特化
あ
参照
:
http://stephane.ducasse.free.fr/ FreeBooks.html読者 向け
個々
Smalltalk
記述
わ
い
い
い
い
知 必要
い
! Alan Knight
以下
う
原
則 表現
い
4:
2http://SqueakByExample.org
3Alec Sharp, Smalltalk by Example. McGraw-Hill, 1997 hURL:http://stephane.ducasse.free.fr/
FreeBooks/ByExample/i.
xi
気
い う
Smalltalk
学 始
う
動
詳細
理解
い 考え 困
う
あ
Transcript show: ’Hello World’
ー
時間
いう
指向
優
点
う
動
う
?
いう問い 対
気
い
答え
ー ン 本
本
以下 意味
ー ン 本
•
本 内容
・
ン
表示— 継承
(by-sa)
ン
公開
い
以下
URL
あ
ン 条件
尊重
限
本 自由 配布
改変
URL:
http://creativecommons.org/licenses/by-sa/3.0/deed.ja
•
本
Pharo
部分
解説
い
理想 言う
私
書
部分 他 人 寄稿
う
い 思
い
取 組
参加
い人 連絡
い 私
本
育
見 い
!
詳
http://PharoByExample.org見
い
Pharo
Pharo
親切 活動的
役 立
う
ー
い
挙
•
http://www.pharo-project.orgPharo
ン
•
http://www.squeaksource.comPharo
SourceForge
的
Pharo
用 追加
ー
生
い
例 練習問題
本
特殊 記法 二 決
限
例 示
う
い
特
実行可能 短い
ー
示
例
あ
式 選択
print it結果 示
3 + 4
−→
7 ”3+4を 選択 ’print it’を 選ぶ 7 得 ”Pharo
実際 試
本
(
http://PharoByExample.org)
ー 例
ン ー
う
い
二 目 決
い
示
ン 使い
次 章 読 進 う
!
謝辞
Squeak
いう
驚
Smalltalk
開発環境
ー ン ー ・
公開
開発者
感謝
Smalltalk
い
翻訳
許可
Hilaire
Fernandes
Serge Stinckwich
ー
章 寄稿
Damien
Cassou
感謝
査読
Alexandre Bergel Orla Greevy Fabrizio Perin Lukas
Renggli Jorge Ressia Erwann Wernli
特 感謝
ー ン ー ・
快 援助
本
設置
ン大学
(
)
感謝
Squeak
感謝
本
熱
Part I
Chapter 1
Pharo
早巡
章
Pharo
環境 親
う
概要 解説
Pharo
実際 試 場面
あ
章
ン
ー
手元 置い
読
い
う
Pharo
動
試
い い箇所
ン
:
印 付
Pharo
起動方法
様々
方 基本的
ー
い 知
う
新 い
定義 仕方
作成
ー
送 方法
い
学
1.1
入門
Pharo
http://pharo-project.org自由
ン ー
三
ー
ン ー
実際
4
個
(
図
1.1)
1.
ン(VM) Pharo
唯一
ー
ン
異
い
主要
ー
用
ン
済
ー
ン 用意
い
図
1.1
あ
某
ー 用
ー
ン
Pharo.exe
いう名前
2.
ソー
Pharo
中
あ
頻繁
変更
い部分
ー
ー
入
い
図
1.1
SqueakV39.sources
ー
13.
仮想
ー
仮想実行中
Pharo
二
1Pharo Squeak 3.9 ー 作 い 今 ー ン Squeak
Figure 1.1: Pharo
ー
ー 用
ン ー
ー
(
.image
)
(
)
入
い
ン
ン(
.changes
)
加え
ー
ー
変更
入
図
1.1
pharo.image
pharo.changes
Pharo
ン ン うPharo by Example
ー
あ 仮想
ー
使う
勧
2
本書
ン
Pharo
ー
ン
動作
Pharo
既
ン
ー
い
使
い
説明
見 目 振 舞い 違
い
驚
い
い
Pharo
作業
い
ー
ン
常
内容 更新
書 込 可能
い
い
二
常 同 場所 置い
い
直接変
更
い
Pharo
格納
ー
ー
変
更
書 出
二
使い
ン ー
ー
ン
取
い
う
う
い
仮想
ー
Pharo
開始
自分 書い
ー
後
ー
ソ
ー
ン 書 込 不可
ー 間 共
有
ー
ン
ー
ー
(
ン
入門 5
)
同 場所 置い
い
ー
ン
ー
別 共有
置い
ー
ン
作業
合わ
一番良い方法 選
い
Figure 1.2:
http://PharoByExample.orgン ー
仮
想
ー
起動
Pharo
起動 普通
ー
ン 同
:
ー
ン
ン
&
あ い
ン
ン
ー
ン 名前 後
入力
う
使
い
ー
ン
合わ
い
(
異
ー
ン
ー
ン あ
ー
ン
正 い ー
ン 自動 選
い
う
&
あ い
ン
ン
起動
方 安全
う
)
Pharo
起動
1
個 大
ン
現
ン
中
ワー
ー
ン
い
開い い
(
図
1.2)
う
い
わ
い
う
ー ー
出
あ
Pharo
ン
依存
ー 使い
Pharo
始 う ン 左 あ 赤い ンワ 閉 こ
ン
最初 や
図
1.3 (a)
ワー
ー
始
いい
う
ン ン 背景 ン ワ
表示 う Workspace 選択 新 い ワ
開 う
(a)ワー ー (b) ン ー
(c) ー
Figure 1.3:
ワー
ー
(
出
)
ン
ー
(
ン
)
ー
(
)
Smalltalk
元々
3
ン
ン
ー
想定
設計
い
ン 足
い
修飾 ー 押
2
ン
十分
Pharo
使う
1
ン
持
い
ー
ー
付い
2
ン
買う
考え 方 いい
う
入門 7
様々
ン
ー
ー ー
個人設定 あ
Pharo
左
ン
いう表現 避
い
元々
Smalltalk
ン 色 表
い
3あ
ー
様々 修飾 ー
(
control ALT meta
)
使う
本
代わ
以下 用語 用い
:
:
一番
使わ
ン
通常 修飾 ー 使わ
1
ン
同
背景
ワー
ー
(
図
1.3 (a))
表示
う
ン
:
次
使わ
ン
ン
ン
ー 表示
ン
ー 表示
ン
一覧
指
い 場所
異
;
図
1.3 (b)
見
い
該当
ン
い場合 普通
control
修飾 ー
使
ン
う 設定
:
最後
画面上 任意
ー
表示
ー
画面上
回転
ン
集
図
1.3 (c)
見
い
4ン
ーン
出
機能
い 教え
Pharo
方法
ー
ン
依存
shift
ctrl
あ い
shift
option
押
う
Time now ワ 入力 う ワ
ン print it 選択 う
右利
人
左
ン
ン
右
ン
ー
ー
(
あ
)
設定
勧
Macintosh
1
ン
使
い
⌘
押
ン
ー
いえ
Pharo
頻繁 使う
最低
二 以上
ン 付い
投資
勧
ー
ン
設定 変え
動作 望 通
Pharo
ー ー
ー 設定 変更
機能 あ
ン ・
(
System …⊲
Preferences …⊲
Preference Browser…)
keyboardswapControlAndAltKeys
ン 使う
ン
入 替え
ン ・
他
様々
ー ー
ー
設定
ン あ
3 ン 色
赤 黄 青 著者 色 ン 指 い
思い出
4Pharo ン 無効 い ン ・
Figure 1.4:
ン ・
1.2
ワー
ー
Pharo
背景 う一度 う再
Worldー 表示
Pharo
ー
ー
あ
ー
右上
ン
ン
画面上 残
う
ワー
ー 使え 多
Pharo
ー
簡単
World Tools … 詳 見 う
(
図1.3 (a))
ワー
ー
い
Pharo
主要
ー
い
以降 章
ー
使う
1.3
ー
送
送 9
BouncingAtomsMorph new openInWorld
ン う 現 do it (d)
選択 う
(
図1.5)
Figure 1.5:
式
do it
Pharo
画面左上
原子 弾
い
ン
表示
あ
今 最初
Smalltalk
式 実行
!
BouncingAtoms-Morph new
ー
送
結果
BouncingAtomsMorphン
ン
生成
openInWorldー
ン
ン
送
BouncingAtomsMorph new
ー
受 取
際 自
分
決
bam
newー
対
ソ
探索
適切 反応
同様
BouncingAtomsMorphン
ン
openInWorld対
探索
適切
ン 取
Smalltalker
話
彼
手続
ー
呼 出
い
表現 使わ
代わ
ー
送
言
い
気
う
自身
ン 責任 持
いう思想 現
決
何々
あ
代わ
ー
送
何
い 礼儀正
頼あ
ー
反
1.4 Pharo
ン 保存 終了
再開
弾 原子 ン 好 こ
う ン 意 適当 位置 置 う
Figure 1.6:
BouncingAtomsMorphFigure 1.7:
save as …World
⊲
Save as … 選択myPharo
入力 OK ンう World
⊲
Save and quit 選び うー
ン
あ
場所
myPharo.image
myPharo.changes
いう
い
Save and quit
直前
Pharo
仮想
ー
動作中 状態 入
い
二
上 好
場所
移動
い
(
ー
ン
)
ー
ン
ソ同 場所 移動
ー
(
あ い
ン
)
必
要 あ
今作
myPharo.image
使Pharo
起動 う先
Pharo
終了
状態 戻
気
う
BouncingAtomsMorph同
あ
原子 弾 続
い
Pharo
起動
Pharo
ー
ン
指定
ー
読 込
入
い
既 書
大量
ー
ン
ー
(
)
含
Pharo
使
い
ー
送
新 い
作
い
命 終え
割 当
い
回
収
(
わー
ン
)
Pharo
終了
普通
ワ ン 11
先
行
う 新
名前 付
ー
保存
他
ンあ
標
準
ー
使
い
ー
ー
変更
記録
い
通常
意識
必要 あ
後 見
う
ン
ー
回復
保存
変更 再現
重宝
い
後
!
使
仮想
ー
1970
年代後半 作
Smalltalk-80
仮想
ー
子孫
仮想
ー
中
何十年 生 続
い
あ
!
保存 管理
仮想
ー
基本的
使わ
い
思う
違い
後 見
う
ー
ー
管理
ー
共有
良い ー
あ
仮想
ー
非常 便利
Monticello
ー
使え
ー
ン管理
ー
共有
う
仮
想
ー
執着
無造作 作
捨
慣
方
い
う
(
必要 修飾)
使 BouncingAtomsMorph う 5色
円 表示
BouncingAtoms-Morph
ー
呼
一 一
円
ン呼
十字
ン
ン
う
;
BouncingAtomsMorph消え
1.5
ワー
ー
ン
ン 閉 ン ワ 開
う
(
ン World⊲
Tools ... 開け)
ン ワ 位置 変え ワ
ン さ う
ン
ン
角
ー 出
黄色
(
右下
)
ン
常
ン
一
ン
前面 あ
枠
い
ン
ー
取
使わ
ン
ン ー
一種
5う い い場合 ン ・ halosEnabled ン
ワー
ー
試
い
Smalltalk
ー
断片 入力
役立
ワー
ー
任意
(TODO
仮想
ー
使う人
手引
)
書 残
ワー
ー
保存
仮想
ー
い
ン
記
使わ
先
ン ー
標準仮想
ー
例
(
図
1.2)
ワ 次 入力 う
:
Transcript show: ’hello world’; cr.
ワー
ー
今入力
様々 箇所
う 単語 上 文字列 終わ あ い 式全体 終わ
いう具合
単語全体 文字列全体あ い
全体 選択
確認
う
入力 全体 選択 ン do it (d) 選択
う
ン
ン
hello world
表示
(
図
1.8)
う一度
う
(
ー項目
do it (d)中
(d)do it
ー
ー
ー
cmd–d
あ
示
い
い 詳
次 節
!)
13
1.6
ー ー
ー
式 評価
い
い
ン
必要 あ
代わ
ー ー
ー
使う
ー 括弧書
部分 該当
ー
応
い
修飾 ー
(control
alt command
あ い
meta)
押
う
(
う
ー
ー
ー
以後
cmd–
表記
)
う 一度ワ 式 評価 う
使 さ い
(
cmd
–d)
do it
他
print it inspect it explore it気 い
う 手短
説明
3 + 4 ワ 入力 う
使 do it
何 起
驚
い
い
!
3いう数
+いう
ー
4いう引数付
送
普通
7計
算
返
ワー
ー
答え
う
わ
い
答え 捨
い
結果 見
代わ
print it使う
必要 あ
print it式
ン
実行
結果
printString送
文字列 表示
3+4 選択 print it う
(
cmd
–p)
今度 期待通
結果
(
図
1.9)
Figure 1.9: do it
print it
3 + 4
−→
7本 約束事
特定
Pharo
式
print itう
示
選択さ い 7 削除
(Pharo
既 7 選択 いdelete
け)
3+4 う 一度選択 今度 inspect it(
cmd
–i)
うSmallInteger: 7
書
ン
表示
ン
呼
(
図
1.10)
ン
極
便利
ー
用い
意味
7SmallInteger
ン
ン
あ
いう
左
ン 使
ン
ン 変数
ン
ン 変
数 値 右
ン 表示
下
ン
ー
送
式 書
Figure 1.10:
ン
7 ン ン self squared 入力 print it う
ン 閉 う ワ Object 入力 今度
explore it
(
cmd
–I
大文i)
今度
Object付い
ン
(
・
ー
)
現
ン
中
⊲
root: Objectいう
あ
三角
中身 開い
い
(
図
1.11)
・
ー
ン
似 い
複雑
ー
ー 提供
点 異
例
見 い
Object
格納
い 要素
直 見
要素 内部構造
い
容
15
Figure 1.11:
Object1.7
6
ン
重要
ー
後 見
う
Pharo
い
興味深い
あ
仮想
ー
使う場合
最 基本的
World
⊲
Class browser 選択 開 う 7図
1.12
ー
Objectい
示
い
開
一番左
ン以外
空欄
い
ン 全
一覧
各
ー
関連
ー 化
入
い
Kernel う
選択
ー
含
2
番目
ン
6紛 わ い ー 呼 あ
Pharo OmniBrowser いう 実装 使わ い OmniBrowser OB
ー 知 い 本 単 曖
昧 避 用い
7 図1.12 う 変え 必要 あ
code of method "printString" Packages
Classes
Protocols
Methods
name of method method
comment
Figure 1.12: Object
printString表示
い
Object 選択 う
今度 残
二
ン
表示
3
番目
ン
選択
表示
関連
扱い
い う
ー 分
何 選択
い
4
番目
ン 表示
printing 選択 う
printing
見
下
ー
い
今度 文字列表示 属
4
番目
ン 表
示
printString ソ 選択 う
今度 下
ン
printStringー
ー
表示
共有
(
ー ー
除
)
1.8
見 け
Pharo
見
方法 複数あ
一 目
今見
う
使
ー
い 方法
場合
ー 名
見 け 17
二 目
browseー
送
自身
開い
う方法
例え
Booleanい
う
ワ Boolean browse 入力 do it う
Boolean
開
(
図
1.13)
ー ー
ー
cmd–b (browse)
あ
ー ー
ー
名
現
場所
ー
中
使え
名 選択
cmd–b
い
使 Boolean う
Figure 1.13: Boolean
定義 表示
い
Boolean
選択
い
選択
い
い
ー
ー
代わ
定義表示
注意
い
(
図
1.13)
定義
親
作成 依
頼
いう
Smalltalk
ー 送信
ObjectBoolean
いう名前
作成
う依頼
い
わ
Boolean
ン
ン 変数
変数
ー 辞書 空
Kernel-Objects
い
ン 下
?専用
ン
ン
見
(
図
1.14)
見
大体 名前 検索
一番 早道
例え
日付 時間 表
探
い
う
ン 置
cmd
–f
ン find class …(f) 選択 う
Figure 1.14:
Booleanン
time
含
名
表示
(
図
1.15)
Time選択
う
Time表示
Timeン
関
連
書い あ
名前 選
cmd–b
(
実際
ン
方法 使え
)
Figure 1.15:
名前
検索
検索
完全
名
(
最初 大文字
)
入力
場合
ソ 見 け 19
1.9
ソ
見 け
名
一部
名
簡単 推測
あ
現在 時刻 知
い場合
now
いう
now
含
あ
思う
う
あ
う
?
う
ソ ン
助
World
⊲
Tools ...⊲
Method finder 選択 う 左 ンnow
入力 accept う
(
return
)
・
ン
now
含
名
表
示
nowー
ー
移動
n(
方法
ー
使え
)
now
選択
う
右側
ン
名前
定義
い
一覧 表示
(
図
1.16)
名 選択
開
Figure 1.16:
・
ン
now定義 含
い
時
存在
わ
い
何 いう名前
見
当
い
あ
う
・
ン
う
役立
!
例え 文字列 大文字化
見
’eureka’ ’EUREKA’
いう具合
’eureka’ . ’EUREKA’ ソ ン 入力
return
う(
図1.17)
・
ン
望
勧
8・
ン
右側
ン 行頭
望
結果 得
実際 使わ
示
今回
String asUppercase先頭
付い い
String定義
asUppercase’eureka’ . ’EUREKA’
変換 使わ
わ
付い い
い
単 名前 同
いう
挙
Character»asUppercase
実行
い
’eureka’ Characterい
Figure 1.17:
例 使
見
引数 あ
い
・
ン
使う
例え 二
整数 最大公約数 求
探
25. 35. 5入力
複数 例 使
検索 範囲 絞
下
ン
詳 い方法 書い あ
1.10
ソ
新 く定義
駆動開発
9(TDD)
登場
ー
書 方法 一変
TDD
背景 あ 思想
振 舞い 期待
ー
ー 本体
先 書
いう
TDD
書い
初
満足
ー
書
・ ン 候補 表示 う 推奨 い 含
あ 落 着い Proceed い
ソ 新 定義 21
何
大声 強調
言う
書
いう課題 あ
う
正確
ういう意味
う
?
う
名前
わ い
何
う
?
将来
保守
何
確実 伝え
う
いい
う
?
以下
例
う
疑問 答え い
文字列
Don’t panic
ー
shout送
結果
DON’T PANIC!
あ
例
理解
う
変換
Method 1.1:
shout
ソtestShout
self assert: (’Don’’t panic’ shout = ’DON’’T PANIC!’)
Pharo
新
作
う
い
う
?
属
決
い
今
う
い
shout String習慣
StringTest
内 作成
Figure 1.18:
StringTest新規
ン
ー
StringTest 開 う testShout
tests - converting 選択 う
(
図1.18)
ン 選択さ いソ ン こ 見
Smalltalk
ソ 大入力
下
ン 赤 縁取
注
意
い
ン 変更
保存
い い
わ
下
ン
ン
accept (s)選
択
cmd–s
ン
・保存
い
仮想
ー
ー
初
名前 入
力
う促
仮想
ー
人 書い
ー
い
作成・変更
人 記録
重要
ー
ー
ー
空白
区切
入力
shout
いう
い
本当 意図
名
前 あ
う 確認
他 可能性 あ 名前
い
提案
(
図
1.20)
単
機能 非常 助
今回
今
作 う
shout 間違い い確認用
ー 一番上 項目 選択
(
図
1.20)
Figure 1.19:
名前 入力
今作 実行 う World
SUnit
TestRunner
開いさ い
一番左 二 並
ン
上部
ン 少 似 い
左側
ン
表示
ソ 新 定義 23
Figure 1.20:
StringTest testShoutCollectionsTests-Text 選択 う 右側 ン
表示さ 中 StringTest あ
前 う選択さ い Run Selected 実行さ
実行
結果
図
1.21
う 表示
実行時
ー あ
わ
ー 起
右下
ン 表示
見 わ
う
StringTest»#testShout原因
(Smalltalk
StringTest testShout StringTest»#testShout表記
)
StringTest»#testShout再度
実
行
MessageNotUnderstood: ByteString»shoutいう
ン
開
ー
ー
開い
ン
Smalltalk
(
図
1.22)
使い方
い
第
6
章
解説
ー
期待
通
文字列
shout書い い い
実行
ー 発生
当然
失敗
確認
良い習慣
仕組
正
設定
新 い
実行
確認
い
ー 確認
実行
(
Abandon)
ン
閉
い
い
Smalltalk
い
Create使
場 書い
う
中 新
作成
編集
継続実行
(
Proceed)
Figure 1.21: StringTest
実行
Figure 1.22: (
)
String 選択 converting 選択
Method 1.2
ソ 作成 ン 書 acceptう
(
注:
↑
こ̂
入力)
25
shout
↑
self asUppercase, ’!’ン
文字列連結 意味
shout受
取
String大文字
末尾 感嘆符 付 足
Pharo
↑
以下 式
戻 値
戻 値
大文字化
感嘆符 付い
新 い文字列
思い通 動
う
?
う一度
実行
う
確認
う
ン Run Selected 再び う 今度 緑
出 失敗 実行 こ 示
表示さ
緑
ー 出
成果 保存
一休
い
う
!
Figure 1.23:
String定義
shout1.11
章
Pharo
環境 紹介
・
ン
・
ン ー 言
主要
ー
使い方 学
Pharo
文法
い
全部
あ
少
学
•
実行中
Pharo
ン ソ更新
実行中
記録
• Pharo
仮想
ー
ー
実行中
含
保
存
同 状態 再現
• Pharo
3
ン
ン
う 設計
い
3
ン
ー ー
修飾 ー 使え 同
• Pharo
背景部分
ワ表示
ワー
ー
様々
ー
起動
•
ワー
断片 書い 評価
ー
ワー
ー
任意
書い
•
ー
評価
ワー
ー
他
ー
ン
上
ー ー
ー
使う
最 重要
do it
(cmd–d)
print it(cmd–p)
inspect it(cmd–i)
explore it(cmd–I)
browse it(cmd–b)
•
Pharo
ー
新
ー
書い
最 重要
ー
•
ン実行
ー
Chapter 2
最初
ー
ン
章
簡単
ー :
Lights Out
1作成
ー
作成 通
Pharo
ン
使用
ー 群
他
開発者
方法
い 体験
い
章 扱う開発 ー
・ ン
Monticello
ー
Smalltalk
開発
効率的
Smalltalk
簡潔
ン 言語
開発 ー
言語 非常
統合
い
開発 手順 手間取
ー
書
多
時間 使う
う
2.1 Lights Out
ー
Figure 2.1: Lights Out
ー 盤
ー
盤上
Pharo
開発 ー
使い方 体験
Lights Out
い
う簡単
ー
作
い
ー 盤 図
2.1
う
淡黄色
四角形 配列 構成
周囲
四
青色 変わ
う一度
淡黄
色 戻
ー
目的
多
青色 変え
図
2.1
示
う
ー
ー 盤
100
個
2
種類
構成
い
Pharo
ー
二
ー
実装
い
一
ー
表
う一
表
Pharo
開発 ー
使い
う
定義
い
見 い
う
2.2
ー
作成
第
1
章
紹介
仕方
新
定義
方法 学
ー
作 方 学
開 ン ン create package
選択 2
Figure 2.2:
ー
追加
Figure 2.3:
ン
ー
新
ー 名
(
PBE-LightsOut)
入力
accept
い
(
単
ーン ー 押
2 ー ・ 標準 ン ー い 図2.2
示 い場合 変更 必要 あ FAQ 5, p. 326
LOCell 定義 29
い
)
新
ー
あ
ー 一覧
順
表示
2.3 LOCell
定義
当然
新 い
ー
何
あ
新
作
い う
ン
ー
ン 編集
ン 自動的 表示
(
図
2.3
参照
)
ン
ー
Object NameOfSubClassいう
作成
いう
Smalltalk
ー 式
い
新 い
何 変数 持
PBE-LightsOut属
う
い
ー
い
従来
Smalltalk
あ
ー
いう
あ
二
違い 何
う
Smalltalk
関連
ー
内 集約
い
関係
拡張 ソ集
Monticello
う
ー
ー
ン管理
慣習
ー 名
名
同 名前 使い
通常 二
違い 気
必要 あ
用語 違い 重要
あ
本書
注意深 使い分
い
Monticello
使い始
詳
見 い
う
新 い
作成
ン
ー
修正
目的 合
作
う
作成 ン 修 手 通
:
•
Object SimpleSwitchMorph書 換え
•
NameOfSubClass LOCell書 換え
•
ン
ン 変数
mouseAction追加
Class 2.1:
LOCell 定義SimpleSwitchMorph subclass: #LOCell instanceVariableNames: ’mouseAction’ classVariableNames: ’’
poolDictionaries: ’’
category: ’PBE
-
LightsOut’新 い
定義
SimpleSwitchMorphいう既存
対
LOCell
いう
作
う
ー
送
Smalltalk
式
い
(
実際
LOCell存在
い い
名 表
ン #LOCell
引数 渡
い
)
ー
新
ン
ン
mouseActionン
ン 変数 持
いう指定 含
い
mouseAction上
振 舞い
定義
ン
ン 変数
こ 時点 何 作 い
ン
ー
ン
境界線 赤 変わ
い
注目
い
(
図
2.4)
変更保 さ い いこ
意味
い
実際
ー
送
変更
accept必要 あ
Figure 2.4:
作成 ン
ー
新 い 定義 了解
(accept)
ソ 追加 31
実行
い
SimpleSwitchMorphー
送
新 い
ン
定義
accept
ン 表示
(
図
2.5)
編集
ン
定義 表示
下 あ 小
ン
目的 説明
う 促
3記述
内容
ン呼
他
大
目的 伝え 重要 手段
Smalltalk
ー
読
重視
中 詳細
ン
書
哲学
ー
意図
ー 自身 語
いう
(
う
い い場合
う
ン
う!
)
ン
詳細
説明
後
見 い
判断
大
目的 簡潔 記述
う
う
LOCell
ン 入力accept
さ い 後 容 変更 こ
Figure 2.5:
新
LOCell2.4
ソ
追加
い
追加
う
3訳者 確認 環境(Pharo by Example Image 1.3環境) う ン あ
代わ 中 あ ? ン 押 目的 書 ン
表示 ン 書 い い場合 ? 箇所 赤
ン あ –all– 選択
編集
ン
作成用
ン
ー
表示
選択
Method 2.2
示
内容 書 換え
い
Method 2.2:
LOCell ン ン 初期化 1 initialize2 super initialize. 3 self label: ’’. 4 self borderWidth: 2.
5 bounds := 0@0 corner: 16@16. 6 offColor := Color paleYellow. 7 onColor := Color paleBlue darker. 8 self useSquareCorners.
9 self turnOff
3
行目
’’文字
間 何 文字 挟
い引用符
二重引用符
い
注意
い
’’空 文字列 表
こ ソ 定義
accept
上記
ー
何
い
う ?
詳細
い
触
(
本 残
部分
あ
!
)
簡単 内容 見 い
1
行
進
い
う
initialize
いう
注目
い
名前
重要
initialize
いう
慣習的
生成
直後 呼 出
LOCell new
評価
initializeー
新
作
自動的 送
initialize状
態 主
ン
ン 変数 設定
使わ
ー ー
あ
SimpleSwitchMorph initialize実行
い
(2
行目
)
ー ー
initialize実行
継承
状態 適切 初期化
いう
期待
い
何
処理
前
ー ー
initialize呼 出
継承
状態 初期化
い
う
SimpleSwitchMorph initialize実際 何
知
い
不明瞭 状態
処理
始
危険 冒
ー ー
initialize呼 出
ン
ン 変数 妥当 初期値 設定
う
方
い
残
部分
状態
設定
い
例え
self label: ’’送
空文
字列 設定
い
0@0 corner: 16@16
い
説明 必要
う
0@0x,y
座標 両方
0
設定
Point表
い
実際
0@0
数値
0 @ー
引数
0送
いう
ー 送信
い
結果 数値
0 Point座標
(0,0)
ン
ン
作
ン 33
送
0@0 16@16角 持
Rectangle作
Rectangle
ー ー
継承
bounds変数 代入
Pharo
画面 座標系 原点
左 向y
座標 値 増
え
注意
い
残
部分
い 説明 必要
い
う
Smalltalk
う
書 秘訣
ー
英語
う 読
う
良い
名 付
自分自身 語
自分 直角 使う
!,
自分
切
!言
い
ー
持
2.5
ン
LOCell
作
ン
先
書い
ー
効果 確認
ワ 開い LOCell new 打 inspect it さ い
Figure 2.6: LOCell
調
使用
ン
inspector
左側
ン
ン
ン
ン 変数
表示
一
(
例え
bounds)
選
い 右側
ン
ン
ン 変数
値 表示
ン
下側 あ
ン 小
ワー
ー
ワー
ー
選択中
擬似変数
self参照
ン ン あ
LOCell
選択 さ い 部 ン self bounds: (200@200 corner: 250@250) 打 do it うン bounds 値 変化 次 ワ 部 self
openInWorld 打 込 do it さ い
画面 左上 端
bounds示
い 位置
表示
上
halo
現
右上 左隣 あ 茶色い ン
移動
右下 あ 黄色
ン
う
bounds
値 変化
ン
確認
(
新
bounds
値 見
refreshン
必要
)
Figure 2.7:
ン 色 ン x 消 さ い
2.6 LOGame
定義
ー
必要
う一
作
い
名
LOGameン ン 定義 ン 表示さ
ー 名
定義 ン
ー
表示
以下
う
ー
書い
acceptい
Class 2.3:
LOGame
定義LOGame 定義 35
LOGame BorderedMorph Morph
Pharo
図形
ー ー
BorderedMorph境界線 扱え
Morph2
行目 あ 引用符 間
ン
ン 変数 名前 入
空
う
LOGame initialize
定義
う
容 LOGame ソ
Browser
書 込 accept さ いMethod 2.4:
初期化 1 initialize2 | sampleCell width height n | 3 super initialize.
4 n := self cellsPerSide. 5 sampleCell := LOCell new. 6 width := sampleCell width. 7 height := sampleCell height.
8 self bounds: (5@5 extent: ((width*n) @(height*n)) + (2 * self borderWidth)). 9 cells := Matrix new: n tabulate: [ :i :j | self newCellAt: i at: j ].
Pharo
い
用語 認識
い 警告
Pharo
cellsPerSideー
認識
い
修正
案 い
提示
Figure 2.8: Pharo
未知
検出
Figure 2.9:
新 い ン
ン 変数
宣言
cellsPerSide
あ
単
定
義
い い
後 定義
う
初 選択 cellsPerSide い
こ 確認
次
Pharo
cells認識
い 警告
Pharo
問題
cell ン ン 変数 扱い い declare instance 選択
最後
Pharo
最終行 使わ
い
newCellAt:at:ー
い 警
告
い
先
同様 流
い
う一度
LOGame定義 見
う
(
instanceン
)
定義 更新
ン
ン 変数
cells含
う
確認
initialize
中身 見 い
う
| sampleCellwidth height n |
書
行
四
一時変数 宣言
い
宣
言
変数
ー
限定
一時変数 呼
説明的 名前 持
一時変数 使う
ー
読
Smalltalk
定数 変数 区別
特別 構文 あ
宣言
四
変数
実際
定数 変わ あ
4-7
行目 一度
値 設定
い
ー 盤
必要 数
境界 表示
十分
大
必要
数
い
今
判断
cellsPerSide
いう
別 定義
数 決定
責務
委譲
定義
前
cellsPerSideー 送信
う
initializeaccept
Pharo
confirm, correct, or cancel
警告
い
避
い
定義
い い
使い
書い い
いう
実
良い習慣
initialize
書
私
う
必要
わ
時点
初
意味 あ 名前
付
思考 中断
進
い
4
行目
使わ
い
Smalltalk
式
self cellsPerSidecellsPerSide