今日から使おうSmalltalk

Post on 27-May-2015

2130 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

Transcript

今日から使おう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勉強会

BMIBMI = 体重[kg] ÷ (身長[m] × 身長[m])標準体重 = 身長 × 身長 x 22日本肥満学会によるとBMIが22の場合が標準体重BMIが25以上の場合を肥満BMIが18.5未満である場合をやせ

9//2. “商”

9\\2. “余り”

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勉強会

基本クラスの紹介NumberBlockCollectionクラス, イテレータ等

Bag, SetArray, OrderedCollectionDictionary

文字列(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勉強会

MonticelloFTP,HTTPサーバに保存することが可能

65

おわりに

66

第26回Smalltalk勉強会

現在チュートリアル作成中1. Squeakインストール2. Squeakの基本操作3. 基本文法4. クラス定義等5. 基本クラス5.1.Number5.2.Block5.3.Collectionクラス,

イテレータ等5.4.文字列(String)5.5.Stream

6. デバック7. 例外処理8. ツール9. 探索の旅10.スレッド処理11.Morph ?12.パッケージ管理13.Web13.1.Seaside13.2.Iliad13.3.Magma

13.4.JSON, XML14.正規表現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勉強会

MLSqueak-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

top related