• 検索結果がありません。

Recent site activity smalltalkusers.jp

N/A
N/A
Protected

Academic year: 2018

シェア "Recent site activity smalltalkusers.jp"

Copied!
58
0
0

読み込み中.... (全文を見る)

全文

(1)

吉田 翔 今日から始めるSmalltalk

(2)

チュートリアルイメージについて

プロジェクトを移動するには,

プロジェクトのウィンドウをク リックし,前のプロジェクトに 戻るには,ワールドメニューの

前にプロジェクトを選択します

チュートリアルのSqueakイメージでは,プロジェクトというSqueakの作業空間を用い

(3)

ワールドメニュー(World menu)

(4)
(5)

使い方が分からない

文法 開発環境

array := Array with:-10 with:2 with:100.

array inject:  Float infinity negated

(6)
(7)

Smalltalkの開発環境

• ワークスペース(Workspace)

• トランスクリプト(Transcript)

• システムブラウザ(System Browser)

• インスペクタ(Inspector)

• メソッドファインダ(Method Finder)

• デバッカ(Debugger)

(8)

ワークスペース(Workspace)

プログラムを記述するためのエディタ

開き方

ワールドメニュー (World menu)の開く

(9)

トランスクリプト(Transcript)

実行結果を出力するためのウィンドウ

開き方

ワールドメニュー (World menu)の開く

開く メニュー

(10)

使いたくてたまらない人のために

Hello Worldを表示してみましょう

必要なツール

ワークスペース

トランスクリプト

Transcript show: ‘Hello World’.

ワークスペースに以下のコードを記述

(11)

プログラムの実行方法

do it

実行するプログラムを 選択して ALT(右ク

リック)+ クリック

使い方

(12)

プログラム結果の出力方法

print it

Transcriptに出力 1 + 3.

(13)

システムブラウザ

クラス検索,クラス定義を行なう

開き方

ワールドメニュー (World menu)の開く

開く メニュー

(14)

インスペクタ

オブジェクト調べるツール

xをインスペクタで確認

使い方

オブジェクトを選択,ALT(右クリック)押しなが

(15)

インスペクタを使ってみよう

”配列の要素をランダムで取り出す”

x := #(#(7 9) #(3 1)) atRandom.

x inspect. ” Do It ” x. ”インスペクト”

※ #(1 2 3)は配列

どちらの配列がxに代入されたか調べてみる

(16)

メソッド・ファインダ(Method Finder)

メソッド検索をするツール

開き方

ワールドメニュー (World menu)の開く

(17)

ノーティファイア

デバッカを開く

エラーの際に開く警告表示

(18)

デバッカ(Debugger)

(19)

ショートカット

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

(20)

終了方法

ワールドメニューの「保存して終了」または「終了」

実行中のプログラム(プログラムの実行状態)を

イメージに保存できる

(21)

イメージの保存について

種類 内容

保存

(save) 現在の状態を現在使用しているイメージに保存

別名保存 (save as)

別のイメージに保存に状態を保存.イメージ名 を決定する.保存後は,新たに作成したイメー ジ画面が表示

新しい版として保存 (save as new version)

自動的にイメージ名にバージョン番号が付加さ れる

保存して終了 (save and quit)

(22)
(23)

コメント

" サイズ3の配列を生成"

x := Array new:3.

ダブルクオーテーションで囲みます

ダブルクオーテーションをコメントに含める場合

" このように「””」2回記述します."

(24)

文末と代入

•文末

•代入

ピリオド

:=

昔のSqueakのコードでは(アンダーバー)

(25)

リテラル

•数字

•文字

•文字列

1

1.4

2r1001 ”2進数”

$a $b

’Squeak’

’Smalltalk’

シングルクオーテーションで囲みます

(26)

リテラル

•シンボル

•配列

•動的配列(Squeakのみ)

#apple #pineapple

変更不可能な文字列

#($a ‘smalltalk’ 42.19)

要素のオブジェクトは統一しなくてもいい

{Float pi. 1 + 2} “print it”

(27)

予約オブジェクト

•true

•false

•nil

•self

•super

•thisContext

自身を表す

自身実行中のコンテキスト(システムの実行状態)を表す

(28)

メッセージ式

3 negated.

オブジェクト メッセージ

Smalltalkのプログラム

オブジェクトにメッセージを送る

(29)

単項メッセージ

4 sqrt. “平方根” 12 i. “虚数”

1 asFloat. “浮動小数とする”

‘1’ asInteger. “数とする”

(30)

2項メッセージ

4 + 1.

10 / 2.

8 // 3.

‘Small’,‘talk’.

主に数学の2項演算子(2つのデータに対する演算)を

(31)

キーワードメッセージ

“3番目の要素を取り出す”

#($z $y $x) at:3. 

“10から100の間の数ならばtrueを返す” 11 between: 10 and: 100.

“2番目の要素をhelloに置き換える” #($a $b $c) at:2 put:'hello'.

(32)

メッセージの優先順位

四則演算の優先順位がない.

優先順位を付けるには括弧を付ける. 単項,2項,キーワードメッセージが,

1つの文に含まれていた場合には以下の優先順位で実行

(33)

優先順位の問題

3 + 4 * 5

3 + 4 sqrt

50 + 4 sqrt between: 10 and: 100

(34)

ブロック

block := [:x :y | x + y].

block value: 1 value: 2.

主に制御構造に用いられる

任意の時点で実行可能なプログラムの固まり

fun(x){x + 1}のようなもの

(lambda (x) (+ x 1))

実行する際には,引数の数に応じて

(35)

カスケード

Transcript show:'Hello '; cr;

show:’Squeak’.

Transcript show:'Hello '. Transcript cr.

Transcript show:‘Squeak’.

先頭オブジェクトに対してメッセージを連続的に 送信する際に用いる

(36)

リターン

^

値を返す

キャレット

^ 1 + 2.

(37)

制御文(条件分岐)

Float infinity > 0

ifTrue:[

Transcript show:'Yes!'.] ifFalse:[

(38)

制御文(繰り返し)

1 to: 2 by: 10

do:[:v | Transcript cr;show:v ].

| i | “ 一時変数”

i := 1.

[i < 10]

whileTrue:[:v |

(39)

制御文(繰り返し)

#(1 2 3)

do:[:v | Transcript cr;show:v ].

3 timesRepeat:[

(40)

何か作りましょう

(41)

BMI

BMI = 体重[kg] ÷ (身長[m] × 身長[m])

標準体重 = 身長 × 身長 x 22

日本肥満学会によると

BMIが22の場合が標準体重BMIが25以上の場合を肥満

BMIが18.5未満である場合をやせ

9//2. “商”

(42)

UIを使ったツールにするために

h := FillInTheBlank request:'身長(cm)は?'

initialAnswer:'0'.

“戻り値はByteStringなので

変換する”

(43)

UIを使ったツールにするために

Utilities informUser: '計算中'

# during: [(Delay forSeconds: 1) wait].

(44)

| 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 ].

(45)

クラス定義

(46)

1.クラスカテゴリ作成

2.クラス名作成

3.メソッドカテゴリ作成

4.メソッド作成

クラス定義

(47)

クラス定義 - クラスカテゴリ作成

ALT(右クリック)を

押しながらクリック

(48)

クラス定義

スーパークラス名 subclass: #クラス名

instanceVariableNames: 'インスタンス変数名1 インスタンス変数名2' classVariableNames: 'クラス変数名1 クラス変数名2'

poolDictionaries: 'プール辞書名' category: 'クラスカテゴリ'

(49)

クラス定義

(50)

クラス定義の反映

accept

ショートカット : CMD(ALT) + s

記述した定義等を保存(変更通知)

クラス定義,メソッド定義を追加・変更の際

行なう

ALT(右クリック) + 了解 で行なう

初めてのacceptの際には

(51)

メソッドの定義

messageSelectorAndArgumentNames

"comment stating purpose of message"

| temporary variable names | statements

メソッドのテンプレートの意味

(52)

オブジェクトの生成

x := Human new.

(53)

Smalltalkのポイント

•変数名にアンダーバーやダラーは使えない

•擬変数には代入できない

•算術演算の時は優先順位を注意する

• whileTrue:はブロックオブジェクトに送る

(54)
(55)

おすすめ参考文献

1)自由自在Squeakプログラミング

2)Smalltalkで学ぶオブジェクト指向プログラミングの本質

3)Squeak by Example http://www.squeakbyexample.org/

4)Smalltalkイディオム

5)ケント・ベックのSmalltalkベストプラクティス・パターン

(56)

おすすめ文献

• 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/

(57)

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/

(58)

現在チュートリアル作成中

1. Squeakインストール

2. Squeakの基本操作

3. 基本文法

4. クラス定義等

5. 基本クラス 5.1.Number

5.2.Block

5.4.文字列(String) 5.5.Stream

6. デバック 7. 例外処理 8. ツール 9. 探索の旅

10.スレッド処理

12.パッケージ管理 13.Web

13.1.Seaside

13.2.Iliad

13.3.Magma

13.4.JSON, XML

14.正規表現 15.Traits

参照

関連したドキュメント

理系の人の発想はなかなかするどいです。「建築

  BCI は脳から得られる情報を利用して,思考によりコ

暑熱環境を的確に評価することは、発熱のある屋内の作業環境はいう

・小麦の収穫作業は村同士で助け合う。洪洞県の橋西村は海抜が低いの

に関して言 えば, は つのリー群の組 によって等質空間として表すこと はできないが, つのリー群の組 を用いればクリフォード・クラ イン形

本研修会では、上記クリーニング&加工作業の 詳細は扱いません。午後のPower BIレポート

定可能性は大前提とした上で、どの程度の時間で、どの程度のメモリを用いれば計

災害発生当日、被災者は、定時の午後 5 時から 2 時間程度の残業を命じられ、定時までの作業と同