2010年7月26日月曜日

[Squeak][Objective-C] へっぽこSqueak SmalltalkユーザによるSqueak Smalltalkで考えるObjective-C その1

私はinputはしてもoutputをあまりしてこなかったので,文章を書くのが下手.
未だに知識がしっかりつかないのは,outputがきちんとできないため.

ということで,需要があるかわかりませんが,へっぽこSqueak SmalltalkユーザによるSqueak Smalltalkで考えるObjective-Cを書いてみます(おそらく大学の身内しか必要ないだろう).

でも,時間がないので,テキトーなメモです.

Hello World

Squeak Smalltalk
Transcript cr; show:'Hello World'.

Objective-C
// file name   ->  test.m
#import<foundation/foundation.h>
int main(void){
  NSLog(@"Hello World");
  return 0;
}

実行方法
Squeak Smalltalk
"Workspaceに記述し,do it"

Objective-C

端末で以下のような方法でコンパイル
$ gcc -framework Foundation  test.m


リテラル
Objective-CはC言語のリテラルが使えます.

コメント
Squeak Smalltalk
ダブルクオーテーションで囲みます.

Objective-C
// または,/* ・・・*/ です.




Squeak Smalltalk
全てオブジェクトとして扱います.

Objective-C
Cの基本データ型の数値とNSNumberクラスのインスタンスがある.
NSIntegerは普通のintまたはlong.


NSNumber *number = [NSNumber numberWithFloat: 1.0];

文字列

Squeak Smalltalk
シングルクオーテーションで囲みます.
'文字列です'

Objective-C
C言語の文字列以外に,NSStringのインスタンスの文字列があります.

ダブルクオーテーションで囲み,先頭に@を付けます.
@"文字列です"

代入
Squeak Smalltalk
 :=

Objective-C
=

文末
Squeak Smalltalk
."ピリオド"

Objective-C
; //セミコロン

メッセージ式

Squeak Smalltalk
'Ringo no Tane' size. "文字列の長さを求める"

Objective-C
[ ] で囲むことにより,メッセージが送信できます.Objective-Cにはメッセージ式による優先順位がない.優先順位は括弧の付け方で決定される.
[@"Ringo no Tane" length]; //文字列の長さを求める

算術演算

Squeak Smalltalk
Smalltalkでは,メッセージ式の優先順位で計算をする.

Objective-C
C言語と同様な優先順位で行なわれる.

カスケード

Squeak Smalltalk
; "セミコロン"


"カスケードなし"
Transcript cr.
Transcript show:'Hello'.

"カスケードあり"
Transcript cr; show:'Hello'.

Objective-C
存在しません.

ブール値

Squeak Smalltalk
true "真,Trueクラスのインスタンス"
false "偽,Falseクラスのインスタンス"
nil "不定"

Objective-C
Bool型はブール値を扱うための方
YES //真を表す定数 0でない値
NO //偽を表す定数 0
nil //nullのオブジェクトを示す.nilはid型の空ポインタ.値は0.

制御構造

if

Squeak Smalltalk
if文はありませんが,ifに相当するメソッドが実装されています.

1 > 0 ifTrue:[  Transcript show:'Ha Ha Ha!!'; cr. ].
Objective-C

if(1 > 0){
  printf("Ha ha Ha!\n");
}

while

Squeak Smalltalk
i := 0.
[i<4] whileTrue:[ Transcript cr;show:'hoge'. i := i + 1. ].

Objective-C
int i = 0;
while(i<4){
  printf("hoge\n");
}

for

Squeak Smalltalk
for文のように振る舞うto:, to:do:, to:by:do:があります.


1 to: by:1 10 do:[:v | Transcript cr;show:v ].

Objective-C

int i;
for(i=1; i<11; i=i+1){
  printf("%d",i);
}
SmalltalkのイテレータとObjective-C高速列挙
別の時に説明します.

switch

Squeak Smalltalkにはありません.
余談,SmallTalk R4.1 http://smalltalk.smalltalk-users.jp/ ならあります.

Objective-C
略します.


次回は,クラス定義について書こうと思います.

0 件のコメント:

コメントを投稿