« 連載: Smalltalk use: better《3》3つの基本要素:リテラル★ | トップページ | 連載: Smalltalk use: better《5》3つの基本要素:式★ »

2006年5月11日 (木)

連載: Smalltalk use: better《4》3つの基本要素:変数★

キーワー ◆ メッセージ式・リテラル・型・識別子・宣言・束縛・代入・評価・変数

※ PDF でご覧になるなら ⇒ 「piyo60511.pdf」をダウンロード

------------ 序 ------------

何のために作られたかではなく
に使えるかだ
頑張ってやり遂げようじゃないか

「Apollo 13」1995年・アメリカ

◆ Smalltalk では、変数の型を宣言する必要がありません。しかし、これは型を無視してよいという意味ではありません。法律で規制されていないから、何をやってもかまわ ないというのは、社会通念として許されるものではありません。同様に、文法で規定されていないからといって、どのような使い方も許されるというものでもあ りません。ルールが明文化されていない環境の下で、暗黙のルールを守るのが、Smalltalk コミュニティーにおけるマナーと言えるでしょう。

------------ 本文 ------------

◆ Smalltalk のプログラムを構成するのは、次の3つの基本要素です。

  1. リテラル
  2. 変数
  3. メッセージ式

共通するのは「これらを評価すると、オブジェクトが得られる」ということです。

変数 ◆ Smalltalk では、変数の型を宣言する必要はありません。ただし、その識別子が変数を表すことだけは、明確に宣言しておく必要があります(Squeak の場合には、やや事情が異なります)。

| s |
s := 3.          "3"
s printString          "'3'"

60511a_1 宣言 ◆ 変数を宣言するには、| と | との間に、識別子 s を記述します。

代入 ◆ 変数に代入するには、:= の左辺に識別子 s を、その右辺に(オブジェクトを表す式)3 を記述します。すると、変数 s によって、オブジェクト 3 を参照できます。

※ 厳密には「束縛」と表現するべきところですが、ここではあえて「代入」と表現しています。これらの違いを正しく理解することは重要なので、別の機会にじっくりと腰を据えて解説します。

式の区切り ◆ 複数の式を列挙するときには、式と式との間に「 . 」を記述します。英語の文の区切りと似ていますが、違いは、文(式)の終わりを示すのではなく、式と式との区切りを表すというところです。

式の評価 ◆ メッセージ式 s printString を評価すると、変数 s が束縛する 3 に、メッセージ printString が送られます。すると、3 の文字列表記が得られます。

| a b |
a := 3.          "3"
b := 4.          "4"
a + b          "7"

60511b_1 式の評価 ◆ メッセージ式 a + b を評価すると、変数 a が束縛する 3 に、メッセージ +b が送られます。このとき、変数 b が束縛する 4 が、引数として渡されます。すると、リターンオブジェクトとして、7 が得られます。

※ Java では、式の後に ; を付けることで文となりますが、Smalltalk では、単なる区切り文字として扱われます。そのため、最後の式の後には . を付けなくてもかまいません。もし . を付けると、これに続く式がないことを意味します。エラーにはなりませんが、その1文字が無駄になるだけのことです。

| c |
c := 'ABCDE' at: 3.          "$C"
c class          "Character"

60511c_1 代入 ◆ 変数 c には、メッセージ式 'ABCDE' at: 3 を評価して得られる文字 $C が代入されます。すると、変数 c によって、オブジェクト $C を参照できます。

式の評価 ◆ メッセージ式 c class を評価すると、変数 c が束縛する $C に、メッセージ class が送られます。すると、$C のクラスが得られます。

| a b |
a := b := 3.
a printString.          "'3'"
b printString.          "'3'"

60511d_1 ◆ この例では、異なる変数 a および b が、同じオブジェクト 3 を、それぞれ束縛しています。

| x |
x := 3 factorial.                    "6"
x class.                    "SmallInteger"
x := x / 4.                    "(3/2)"
x class.                    "Fraction"

60511e ◆ この例では、同じ変数 x が、異なるクラス SmallInteger および Fraction のインスタンスを、それぞれ束縛しています。

| x |
x := 'ABCDE'.
x class.                    "String"
x := x at: 3.                    "$C"
x class.                    "Character"

60511f_1 ◆ この例では、同じ変数 x が、異なるクラス String および Character のインスタンスを、それぞれ束縛しています。

※ 変数 x の事例は、型を無視した反面教師の姿を体現したものです。x は、×(バツ)とも読めます。あえてこれを識別子に使ったのには、そうような意味合いが含まれていたのです。

==================================
真樹育未 著 ◆ 監修:小泉ひよ子とタマゴ倶楽部

|

« 連載: Smalltalk use: better《3》3つの基本要素:リテラル★ | トップページ | 連載: Smalltalk use: better《5》3つの基本要素:式★ »

Squeak/Smalltalk」カテゴリの記事

.連載: Smalltalk use: better」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 連載: Smalltalk use: better《4》3つの基本要素:変数★:

« 連載: Smalltalk use: better《3》3つの基本要素:リテラル★ | トップページ | 連載: Smalltalk use: better《5》3つの基本要素:式★ »