X



Smalltalk総合 Squeak Pharo

0222デフォルトの名無しさん
垢版 |
2015/02/11(水) 09:08:37.73ID:WHehhV2d
>>217
基本的にGNU SmalltalkにAndroid用の追加Packageがちょこっと乗ってるだけ。
GNU Smalltalkの部分はLinuxやWindows上と使い勝手は変わんないよ。

因みにGNU Smalltalkは方言が激しすぎると思うかもしれないけど、
他の環境と同じような書き方もできるよ。

"Smalltalk User Exampleといい名前空間を作る。"
Smalltalk addSubspace: #User.
Smalltalk User addSubspace: #Example.

"Smalltalk User Example に移動する"
! Namespace current: Smalltalk User Example !

Object
 subclass: #Someoen
 instanceVariableNames: 'name'
 classVariableNames: ''
 poolDirectory: ''.

"ClassのInstance変数の登録(省略可)"
Someone class instanceVariableNames: ''.

"name変数の読み書き用Method登録。defaultは初期値"
Someone
 createSetMethod: 'name';
 createGetMethod: 'name' default: ''.
0223デフォルトの名無しさん
垢版 |
2015/02/11(水) 09:09:08.40ID:WHehhV2d
"Instance用のMethod登録"
! Someone methodsFor: 'example' !
something

^ '何か処理を書く'.
!!

"Class用のMethod登録"
! Someone
class methodsFor: 'instance creation' !
withName: aString

^ self
 basicNew
  name: aString.
!!

"現在の名前空間を変更して保存すると、名前空間が変更しっぱなしになるので戻す。"
! Namespace current: Smalltalk !

"
Imageに保存。引数を指定しなければ/mnt/sdcard/ls4a/gst.imに保存される。
元のgst.imはどこかに保存しとくこと。
"
ObjectMemory snapshot.
0224デフォルトの名無しさん
垢版 |
2015/02/11(水) 09:36:26.45ID:WHehhV2d
GNU Smalltalkの注意点

1. 親の名前空間が持っている名前空間を子の名前空間は作れない

ダメな例
 Smalltalk Test Something Test.

大丈夫な例
 Smalltalk SomethingA Test.
 Smalltalk SomethingB Test.

代わりに子の名前空間から親の名前空間を参照するとき
参照する親より上の名前空間を省略できる。

Smalltalk Test Something ExampleAという構成の時ExampleAから
TestのClassをExampleBを参照するとき
下記のいづれでも参照できる。

ExampleB
Test ExampleB
Smalltalk Test ExampleB

2. 大文字で始める変数、または大域は宣言してないとnilになる。
つづりを間違えた時に結構ハマる。
Method内で書いた小文字の変数は宣言が無いと翻訳失敗になる。
また、名前空間をSmalltalk.Something.と「.」で区切れば、
親の名前空間が存在しない時翻訳失敗にしてくれる。
ただし、最後の名前空間名やClass名まで存在するか見てくれない。
0225デフォルトの名無しさん
垢版 |
2015/02/11(水) 09:53:20.80ID:WHehhV2d
3. 例外を捕まえるClassの種類ににExceptionから派生した
 Class以外を指定すると訳の分からない例外になる。

[
]
 on: NotFound "NotFoundが存在しない場合nilになっており例外処理が暴走する。"
 do:
 [ :exception |
 ].

4. nilを継承できる。nilを継承するとMessageに
 存在しないMethodを指定されてもErrorにしない。

"SuperSomethingは実はnilだが継承できてしまう。"
SuperSomething subclass: #Something.

"helloは無視される。"
Something new hello.

ただし、nilを継承すればあらゆるMessageを
doesNotUnderstaedで受け取ることができるいう利点もある。
Objectを継承しているとObjectが実装しているMessageは受け取れない。
0226デフォルトの名無しさん
垢版 |
2015/02/11(水) 10:04:46.87ID:WHehhV2d
sl4aでGNU Smalltalkを使う時のヒント。
GUI は下記のような感じで作ることができる。

PackageLoader fileInPackage: 'Android'.

| os event |
os := Android.

"UI表示"
os fullShow:
'<?xml
version = "1.0"
encoding = "utf-8"
?>
<LinearLayout
xmlns:os = "http://schemas.android.com/apk/res/android";
os:layout_width = "match_parent"
os:layout_height = "match_parent"
os:orientation = "vertical"
>
<EditText
os:layout_width = "match_parent"
os:layout_height = "wrap_content"
/>
</LinearLayout>
'

"Event待ち"
event := os eventWait.
レスを投稿する


ニューススポーツなんでも実況