« 連載: Smalltalk use: better《18》あなたの大きいは私のとは違うかな★ | トップページ | 連載: Smalltalk use: better《20》文字列と数列は何が違うの(2)★ »

2006年8月10日 (木)

連載: Smalltalk use: better《19》文字列と数列は何が違うの(1)★

キーワード ◆ ;・at:・Character・class・clear・cr・Interval・show:・size・SmallInteger・space・String・subscript is out of bounds・to:・Transcript・メソッド・メッセージ・数列・文字列

※ PDF でご覧になるなら ⇒ 公開日まで、お待ちください。

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

◆ さらに、学年が進むと、小数を覚え、分数を教わります。分数(有理数)を導入すると、それまで無意味とされた「どんな数でも割れる(ただし0を除く)」ことに新たな意義が生まれます。「正方形の対角線の長さは?」と尋ねると「1.41421356...」とか、「円周率は?」と尋ねると「3.1415926535897931...」とストップを掛けるまで、得意そうに語る生徒も中にはいます。しかし、小数点以下にどれだけ多くの数字を並べても、正確に表現するのは「無理」ということに気付きます。ちなみに、0.9≠1.0 ですが、これを無限に続けると 0.99999...=1.0と等号が成立します。そんな馬鹿なという人は、数学の教科書などで、理解を深めてください。ところで…(続く)

◆ 文字列と数列との間には、興味深い特徴があります。そこで、これらの共通点と相違点とに着目しながら、さらに学習を進めます。

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

Transcript を使うと、式を評価した結果を文字列で確認できるので便利です。実行時のトレース情報を確認したいときなど、簡易ツールとして有用です。

Transcript show: 'hello'
------------------------------ Transcript --
hello

show: を使うと、引数に指定したオブジェクトに関する情報が表示されます。出力結果を見ると、hello を表示するのが分かります。

Transcript clear.
Transcript show: 'hello'; cr.
Transcript show: 'happy'; space.
Transcript show: 'birthday'
  # -------------------------------- Transcript --
hello
happy birthday

clear を使うと、Transcript に表示された情報がすべて消去されます。cr を使うと、そこで改行されます。space を使うと、そこに空白が挿入されます。出力結果を見ると、hello を表示した後で改行して、happy birthday を表示したのが分かります。

【Note】; を使うと、同じオブジェクトにメッセージを送り続けたいときに、簡略して表記できます。

文字列 ◆ 他のプログラミング言語と同様に、文字列は基本的な要素のひとつです。

s := 'ABCDE'.
Transcript show: s; cr.
Transcript show: s class; cr.
Transcript show: s size
-------------------------------- Transcript --
ABCDE
String
5

変数 s は、文字列を束縛します。class を使うと、そのオブジェクトが属するクラスが得られます。出力結果を見ると、文字列のクラスは String となるのが分かります。size を使うと、文字列の長さ(要素数)が得られます。出力結果を見ると、その長さは 5 となるのが分かります。

s := 'ABCDE'.
Transcript show: (s at: 1); space.
Transcript show: (s at: 5); cr.
Transcript show: (s at: 1) class
# -------------------------------- Transcript --
A E
Character

添字を使うと、文字列の各要素を参照できます。at: を使うと、引数に指定した位置にある要素が得られます。先頭の要素を参照するには、添字 1 を使います。末尾の要素を参照するには、その要素数に等しい、添字 5 を使います。出力結果を見ると、先頭の要素が $A で、末尾の要素が $E となるのが分かります。さらに、文字列を構成する各要素のクラスは Character となるのが分かります。

s := 'ABCDE'.
s at: 6    "subscript is out of bounds: 6"

◆ 文字列の範囲を越えて参照しようとすると、error: 'subscript is out of bounds' を生じます。

数列数列も基本的な要素のひとつです。これを文字列と比較しながら、解説します。

s := 1 to: 5.
Transcript show: s; cr.
Transcript show: s class; cr.
Transcript show: s size
  # -------------------------------- Transcript --
(1 to: 5)
Interval
5

変数 s は、数列を束縛します。class を使うと、そのオブジェクトが属するクラスが得られます。出力結果を見ると、数列のクラスは Interval となるのが分かります。size を使うと、数列の長さ(要素数)が得られます。出力結果を見ると、その長さは 5 となるのが分かります。

s := 1 to: 5.
Transcript show: (s at: 1); space.
Transcript show: (s at: 5); cr.
Transcript show: (s at: 1) class
-------------------------------- Transcript --
1 5
SmallInteger

添字を使うと、数列の各要素を参照できます。at: を使うと、引数に指定した位置にある要素が得られます。先頭の要素を参照するには、添字 1 を使います。末尾の要素を参照するには、その要素数に等しい、添字 5 を使います。出力結果を見ると、先頭の要素が 1 で、末尾の要素が 5 となるのが分かります。さらに、数列を構成する各要素のクラスは SmallInteger となるのが分かります。

s := 1 to: 5.
s at: 6    "subscript is out of bounds: 6"

◆ 数列の範囲を越えて参照しようとすると、エラー subscript is out of bounds を生じます。

60810ato: を使うと、指定した範囲内の数を要素とする等差数列が得られます。

.

60810b ◆ このとき、at: を伴うメッセージを解釈するのは、その受信者である文字列および数列です。同じメッセージに対して、文字列および数列は、それぞれ違う解釈が可能です。

.

,

,

60810c ◆ 一般に、ひとつのメッセージに対して、複数のメソッドが対応します。どのメソッドが有効かを決定するのは、メッセージの受信者であるオブジェクト自身です。メッセージそのものに決定権はありません。

.

.

.

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

|

« 連載: Smalltalk use: better《18》あなたの大きいは私のとは違うかな★ | トップページ | 連載: Smalltalk use: better《20》文字列と数列は何が違うの(2)★ »

Squeak/Smalltalk」カテゴリの記事

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

コメント

コメントを書く



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




トラックバック


この記事へのトラックバック一覧です: 連載: Smalltalk use: better《19》文字列と数列は何が違うの(1)★:

« 連載: Smalltalk use: better《18》あなたの大きいは私のとは違うかな★ | トップページ | 連載: Smalltalk use: better《20》文字列と数列は何が違うの(2)★ »