Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

今日から使おうSmalltalk

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

今日から使おうSmalltalk

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

    Be the first to comment

    Login to see the comments

  • yuukiiwata

    Oct. 26, 2014
  • hkoba

    Dec. 2, 2014
  • ykominami

    Jan. 12, 2015
  • ybjack

    Sep. 19, 2015
  • KoyoHiguchi

    Oct. 22, 2015
  • kojinakanishi923

    Mar. 10, 2016
  • hidetsugutakahashi182

    Apr. 14, 2016
  • atoato88

    Apr. 19, 2016
  • JunYakushiji

    May. 31, 2016
  • chihiroyuine9

    Sep. 8, 2016
  • KosukeNagano

    Dec. 28, 2016
  • iyama164

    Jan. 7, 2017
  • takayukiyoshizawa3

    May. 1, 2017
  • momonga1banchi

    Nov. 9, 2017

Views

Total views

7,945

On Slideshare

0

From embeds

0

Number of embeds

49

Actions

Downloads

22

Shares

0

Comments

0

Likes

14

×