Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
MU
Uploaded by
Masashi Umezawa
PDF, PPTX
795 views
MultilineクラスとMultilineメソッド
クラス名やメソッド名に改行がつかえるようにSmalltalkを拡張するとどうなるかという話。アスキーアートでメッセージ送信
Software
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 12
2
/ 12
3
/ 12
4
/ 12
5
/ 12
6
/ 12
7
/ 12
8
/ 12
9
/ 12
10
/ 12
11
/ 12
12
/ 12
More Related Content
PDF
Smalltalkで四則演算パーサ
by
Masashi Umezawa
PDF
Cuis Smalltalkの紹介
by
Masashi Umezawa
PDF
Meta programing ruby monday
by
Yuisho Takafuji
PDF
super super & sub sub の話
by
Masashi Umezawa
PPT
Start!! Ruby
by
mitim
ODP
Rubyのコードを読んでみよう(オブジェクト編)
by
baban ba-n
PPTX
Ruby講座第二回
by
mitsunaga
PDF
Rubyメソッド探索
by
Masayuki Nishida
Smalltalkで四則演算パーサ
by
Masashi Umezawa
Cuis Smalltalkの紹介
by
Masashi Umezawa
Meta programing ruby monday
by
Yuisho Takafuji
super super & sub sub の話
by
Masashi Umezawa
Start!! Ruby
by
mitim
Rubyのコードを読んでみよう(オブジェクト編)
by
baban ba-n
Ruby講座第二回
by
mitsunaga
Rubyメソッド探索
by
Masayuki Nishida
Similar to MultilineクラスとMultilineメソッド
PPTX
基礎構文班 17回目 クラスとメソッド
by
XMLProJ2014
PPTX
第3回輪講
by
mh_amako
PDF
Ruby 同好会宣言
by
Yuya Takeyama
PPTX
第23回目
by
XMLProJ2014
PDF
Ruby紹介3(pdf)
by
Gohryuh
PDF
Ruby勉強会@札幌 "Rubyist入門講座"
by
Koji SHIMADA
PDF
ebisu.rb #19 超実践 super
by
Kaito Minatoya
PDF
Ruby の文字列について
by
Tomoya Kawanishi
PDF
Ruby2.0 - refinements - 鳥取Ruby会 第11回
by
Rie HIRONO
PDF
現実世界のJRuby(ショートバージョン)
by
Hiroshi Nakamura
PDF
Rubyをちょっと理解しよう
by
Shun Hikita
PDF
Ruby でつくる型付き Ruby
by
mametter
PDF
怠惰なRubyistへの道 fukuoka rubykaigi01
by
nagachika t
PDF
へっぽこSmalltalkerからみたEnumerable
by
Naruhiko Ogasawara
基礎構文班 17回目 クラスとメソッド
by
XMLProJ2014
第3回輪講
by
mh_amako
Ruby 同好会宣言
by
Yuya Takeyama
第23回目
by
XMLProJ2014
Ruby紹介3(pdf)
by
Gohryuh
Ruby勉強会@札幌 "Rubyist入門講座"
by
Koji SHIMADA
ebisu.rb #19 超実践 super
by
Kaito Minatoya
Ruby の文字列について
by
Tomoya Kawanishi
Ruby2.0 - refinements - 鳥取Ruby会 第11回
by
Rie HIRONO
現実世界のJRuby(ショートバージョン)
by
Hiroshi Nakamura
Rubyをちょっと理解しよう
by
Shun Hikita
Ruby でつくる型付き Ruby
by
mametter
怠惰なRubyistへの道 fukuoka rubykaigi01
by
nagachika t
へっぽこSmalltalkerからみたEnumerable
by
Naruhiko Ogasawara
More from Masashi Umezawa
PDF
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
by
Masashi Umezawa
PDF
FileManで楽々ファイル操作
by
Masashi Umezawa
PDF
TruffleSqueakの紹介
by
Masashi Umezawa
PDF
SmalltalkBoltでUFFI入門
by
Masashi Umezawa
PDF
TaskItの紹介
by
Masashi Umezawa
PDF
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
by
Masashi Umezawa
PPTX
Revealing ALLSTOCKER
by
Masashi Umezawa
PDF
TarandocでJSONを永続化
by
Masashi Umezawa
PPTX
Dockerizing pharo
by
Masashi Umezawa
PDF
今からでも遅くないSmalltalk入門
by
Masashi Umezawa
PDF
Tarantubeでメッセージキューを使い倒す
by
Masashi Umezawa
PDF
VerStixの紹介
by
Masashi Umezawa
PDF
Oldtalk - あのころの処理系は今
by
Masashi Umezawa
PDF
Pyonkeeを鳴らす
by
Masashi Umezawa
PDF
Smalltalk勉強会 - 過去、現在、そして未来へ
by
Masashi Umezawa
PDF
Tarantalk
by
Masashi Umezawa
PDF
Smalltalkと型について
by
Masashi Umezawa
PDF
Introduction of Pharo 5.0
by
Masashi Umezawa
PDF
Why!? Smalltalk
by
Masashi Umezawa
PDF
Pillarの紹介
by
Masashi Umezawa
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
by
Masashi Umezawa
FileManで楽々ファイル操作
by
Masashi Umezawa
TruffleSqueakの紹介
by
Masashi Umezawa
SmalltalkBoltでUFFI入門
by
Masashi Umezawa
TaskItの紹介
by
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
by
Masashi Umezawa
Revealing ALLSTOCKER
by
Masashi Umezawa
TarandocでJSONを永続化
by
Masashi Umezawa
Dockerizing pharo
by
Masashi Umezawa
今からでも遅くないSmalltalk入門
by
Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
by
Masashi Umezawa
VerStixの紹介
by
Masashi Umezawa
Oldtalk - あのころの処理系は今
by
Masashi Umezawa
Pyonkeeを鳴らす
by
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ
by
Masashi Umezawa
Tarantalk
by
Masashi Umezawa
Smalltalkと型について
by
Masashi Umezawa
Introduction of Pharo 5.0
by
Masashi Umezawa
Why!? Smalltalk
by
Masashi Umezawa
Pillarの紹介
by
Masashi Umezawa
MultilineクラスとMultilineメソッド
1.
第27回 Smalltalk勉強会 -
Smalltalkの超能力 2010 Masashi Umezawa
2.
動機 もっとクラス名、メソッド名をわかりやすく できないか? 長い名前とか、読むのが大変
ぱっと見ただけでわかるほうがいい クラス名やメソッド名で改行つきの文字列を 使えれば、表現力が格段と高まるのではない か?
3.
例 いらないクラスということがすぐにわかる Object subclass:
#' / \ / ─ ─\ / (●) (●) \ よく考えたら俺いらないな | (__人__) | / ∩ノ ⊃ / ( \ / _ノ | | .\ “ /__| | \ /___ / ' instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Test-Multilines'
4.
実装にあたって 技術的には簡単 もともとクラス名やメソッド名はSymbolのインスタンス
Symbol自体には改行を含めることができる ○ #'改行文字列' のようにシングルクォートでくくればよい 開発環境の制限を外していくだけ
5.
Multiline class クラス名の先頭文字と使える文字に改行を追加 Character
>> canBeGlobalVarInitial self = Character cr ifTrue: [^true]. ^ (EncodedCharSet charsetAt: self leadingChar) canBeGlobalVarInitial: self. 基本これだけ
6.
Multiline method (1)
開発環境の抵抗がなかなか強かったので、 メソッド追加で対処 ClassDescriptiopn >> addAAMethod: aa body: bodyCode | code aaSymbol | code := 'tmp' , String cr , bodyCode. aaSymbol := aa asSymbol. self compile: code classified: ''. self addAndClassifySelector: aaSymbol withMethod: (self methodDict at: #tmp) inProtocol: 'AA' notifying: nil. self removeSelector: #tmp
7.
Multiline Method (2)
各クラスのMethodDictionaryをいじって あげればよい tmpという名前でまずメソッドをコンパイル コンパイルされたバイトコード(CompiledMethod)を アスキーアート(AA)をキーとして登録しなおす tempのメソッドは消しておく これでできた!
8.
パーサライブラリの拡張 (1) ワークスペース等で実行しやすいように既存の Smalltalkパーサライブラリを拡張する
DSL系を実装するには常套手段 Smalltalkでは自分をコンパイルするコンパイラクラスを クラス毎に指定できる ○ compilerClassメソッドのオーバーライド 今回は単にデフォルトのスキャナに手を入れるだけ
9.
パーサライブラリの拡張 (2) スキャナにバッククォートのトークンを加える
AAをバッククォートで囲むと、クラスやメソッドの識別子と してパースされるようにしたいため Scanner class >> initialize ... newTable at: $` asciiValue put: #xBackQuote. ... バッククォートを選んだ理由 他で使われていない 存在感が薄いのでアスキーアートを邪魔しない
10.
パーサライブラリの拡張 (3) Scanner >>
xBackQuote self step. buffer reset. [hereChar = $` and: [aheadChar = $` ifTrue: [self step. false] ifFalse: [true]]] whileFalse: [buffer nextPut: self step. (hereChar = 30 asCharacter and: [source atEnd]) ifTrue: [^self offEnd: 'Unmatched string quote']]. self step. token := buffer contents asSymbol. tokenType := #word まじめに読む必要なし xSingleQuoteメソッドをパクる tokenTypeを#wordにする => 識別子になる
11.
デモ AAクラスの定義 AAメソッドの定義
実行 ` |┃三 ∩___∩ |┃ | ノ ヽ |┃ ≡ / ● ● | きたクマー! ____,|ミ\___| (..●..) ミ |┃=___ |∪| \ |┃ ≡ / ヽノ 人 \ ガラッ` new ` /⌒ヽ ∩ ^ω ^) うはwww | ⊂ノ | _⊃ し ⌒`
12.
まとめ Smalltalkで、内部DSLをつくるのは非常に 簡単 グラフィカルな表現もお手のもの
まじめな開発ではAAクラスとか使わないで ください
Download