SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
CROSS 2014 言語CROSS
2014 Masashi Umezawa
これが読めればOK
exampleWithNumber: x
|y|
true & false not & (nil isNil) ifFalse: [self halt].
y := self size + super size.
#($a #a "a" 1 1.0) do: [:each |
Transcript show: (each class name); show: ‘hi'
].
^x<y
http://www.esug.org/whyusesmalltalktoteachoop/smalltalksyntaxonapostcard/ より引用
一時変数の定義
縦棒で囲む
 例:


 |xyz|



代入しない場合、nilが入っている
変数への代入


:= または _ (アンダースコア)
 := がANSI標準
 古い処理系では_のことも(環境内では←で表示)



例:
 x := 1.
 x := y := 2
値を返す


^ (キャレット)を使う
 処理系によっては↑で表示される



例:
 ^1
 ^ 3+4
メッセージ式
オブジェクトにメッセージを送る
 例:


 obj name.

 obj size



メッセージ式の区切りはピリオド(.)
2項メッセージ式


引数1つ、演算子の記号を使ったメッセージ
 1 + 3.
○ 1.plus(3)

 'aaa', 'bbb'
○ 'aaa'.cat('bbb')



いわゆる「演算子の優先度」はない
 1+3/4
○ 1.plus(3).div(4)
キーワードメッセージ式
Objective-Cのアレ
 引数の区切りに任意の文字列を使える


 aString copyFrom: 1 to: 3
○ aString.copy(1,3)
 aPoint setX: 10 setY: 20
○ aPoint.set(10,20)



引数の意味がメソッド定義を見なくともなんと
なくわかる
メッセージ式の優先順位


単項 > 2項 > キーワード
 3 factorial + 4 factorial between: 10 and: 100
○ の場合

 6 + 24 between: 10 and: 100
○ となって

 30 between: 10 and: 100
○ となる "=> true"



()で括ると優先度が最も高くなる
 ('hello' copyFrom: 1 to: 3) reverse
リテラル


文字
 $a





コメント
 ""で囲む

文字列
 ' hello'



シンボル (変更不可能な文字列)
 #hello



配列
 #(1 $a 'hello')



動的配列
 {1+2. 'hello' reverse. Date today}
予約オブジェクト
self
 super
 true
 false
 nil
 thisContext


 実行中のコンテキスト(システムの実行状態)を表す
グローバルオブジェクト


Transcript
 標準出力っぽく使うウィンドウ



Smalltalk
 名前空間を提供
 グローバル的な便利メソッドもいくつか持つ
カスケード


先頭のオブジェクトに連続的にメッセージを
送るときの記法
 ; (セミコロン)を使う

 Transcript cr; space; show: 'hello'.



カスケードを使わないと...
 Transcript cr.
 Transcript space.
 Transcript show: 'hello'.



Dartのアレ(..)
ブロッククロージャ
遅延評価されるコードの固まり
 []で囲む


 引数は :arg1 :arg2 ... | のように指定

 [:x | x + 1].
○ func(x) {x + 1} のようなもの

 実行したいときに引数の数に応じて

value、value:、value:value:などを送る


制御文やイテレータの構築で使う
 10>3 ifTrue: [self inform: ‘hello'].
 #(1 2 3) do: [:each | Transcript show: each]
ではもう一度
exampleWithNumber: x
|y|
true & false not & (nil isNil) ifFalse: [self halt].
y := self size + super size.
#($a #a "a" 1 1.0) do: [:each |
Transcript show: (each class name); show: ‘hi'
].
^x<y
http://www.esug.org/whyusesmalltalktoteachoop/smalltalksyntaxonapostcard/ より引用
まとめ
奇妙で複雑に見えていたSmalltalkが大体読め
るようになった
 あとは開発環境に慣れればOK


Contenu connexe

Tendances

ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
MITSUNARI Shigeo
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 

Tendances (20)

純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介
 
証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門
 
ClojurianからみたElixir
ClojurianからみたElixirClojurianからみたElixir
ClojurianからみたElixir
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
暗認本読書会4
暗認本読書会4暗認本読書会4
暗認本読書会4
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
 
新しい暗号技術
新しい暗号技術新しい暗号技術
新しい暗号技術
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
 
AES-NI@Sandy Bridge
AES-NI@Sandy BridgeAES-NI@Sandy Bridge
AES-NI@Sandy Bridge
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
ParaViewでCSVの点群を表示する
ParaViewでCSVの点群を表示するParaViewでCSVの点群を表示する
ParaViewでCSVの点群を表示する
 
XAML入門
XAML入門XAML入門
XAML入門
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 

En vedette

ハトでもわかるオブジェクト指向
ハトでもわかるオブジェクト指向ハトでもわかるオブジェクト指向
ハトでもわかるオブジェクト指向
ukayare
 
北斗の拳の世界をオブジェクト指向で
北斗の拳の世界をオブジェクト指向で北斗の拳の世界をオブジェクト指向で
北斗の拳の世界をオブジェクト指向で
yaju88
 
Why do *you* need a strong open-source Smalltalk!
Why do *you* need a strong open-source Smalltalk!Why do *you* need a strong open-source Smalltalk!
Why do *you* need a strong open-source Smalltalk!
Pharo
 

En vedette (16)

ハトでもわかるオブジェクト指向
ハトでもわかるオブジェクト指向ハトでもわかるオブジェクト指向
ハトでもわかるオブジェクト指向
 
北斗の拳の世界をオブジェクト指向で
北斗の拳の世界をオブジェクト指向で北斗の拳の世界をオブジェクト指向で
北斗の拳の世界をオブジェクト指向で
 
擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向
 
RUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践SmalltalkRUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践Smalltalk
 
Why do *you* need a strong open-source Smalltalk!
Why do *you* need a strong open-source Smalltalk!Why do *you* need a strong open-source Smalltalk!
Why do *you* need a strong open-source Smalltalk!
 
MongoTalkを試してみた
MongoTalkを試してみたMongoTalkを試してみた
MongoTalkを試してみた
 
デザインパターンとともに学ぶオブジェクト指向のこころ
デザインパターンとともに学ぶオブジェクト指向のこころデザインパターンとともに学ぶオブジェクト指向のこころ
デザインパターンとともに学ぶオブジェクト指向のこころ
 
Jun4Pharo @ Smalltalk勉強会 2015/5/29
Jun4Pharo @ Smalltalk勉強会 2015/5/29Jun4Pharo @ Smalltalk勉強会 2015/5/29
Jun4Pharo @ Smalltalk勉強会 2015/5/29
 
Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)
 
だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向
 
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
 
スクレイピングその後
スクレイピングその後スクレイピングその後
スクレイピングその後
 
データベース入門1
データベース入門1データベース入門1
データベース入門1
 
第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向
 
本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 

Plus de Masashi Umezawa

Plus de Masashi Umezawa (20)

第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
 
FileManで楽々ファイル操作
FileManで楽々ファイル操作FileManで楽々ファイル操作
FileManで楽々ファイル操作
 
TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
 
TaskItの紹介
TaskItの紹介TaskItの紹介
TaskItの紹介
 
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
 
Revealing ALLSTOCKER
Revealing ALLSTOCKERRevealing ALLSTOCKER
Revealing ALLSTOCKER
 
TarandocでJSONを永続化
TarandocでJSONを永続化TarandocでJSONを永続化
TarandocでJSONを永続化
 
Dockerizing pharo
Dockerizing pharoDockerizing pharo
Dockerizing pharo
 
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すTarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
 
VerStixの紹介
VerStixの紹介VerStixの紹介
VerStixの紹介
 
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
 
Pyonkeeを鳴らす
Pyonkeeを鳴らすPyonkeeを鳴らす
Pyonkeeを鳴らす
 
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へSmalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
 
Tarantalk
TarantalkTarantalk
Tarantalk
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0
 
Pillarの紹介
Pillarの紹介Pillarの紹介
Pillarの紹介
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
 

Dernier

Dernier (7)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

早わかりSmalltalk