« 連載: Smalltalk use: better《19》文字列と数列は何が違うの(1)★ | トップページ | 連載: Smalltalk use: better《21》文字列と数列は何が違うの(3)★★ »

2006年8月11日 (金)

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

キーワード ◆ class・do:・from:to:do:・Interval・size・timesRepeat:・to:by:・to:by:do:・to:do:・コンパイラー・プログラマー・制御構造・反復・分岐

※ PDF でご覧になるなら ⇒ 《準備中》

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

◆ 平方根や円周率のような無理数を導入すると、それまで無意味とされた「永遠に続く不規則な数」にも新たな意義が生まれます。√ で表現される数は安定することなく無限に続きますが、それを自乗すると安定した数になるという性質を持ちます。中学、高校へと進学する頃には、有理数と無理数との違いを知りますが、まだ実数の概念は登場しません。そして、自乗すると負になるという、それまでの常識が通用しない数の存在を認めざるを得ない状況に追い込まれます。このようにして、虚数の存在を認めることで、有理数と無理数とを統合する実数の概念や、その虚数までも統合する複素数の概念を生み出し、より広範な概念モデルへと発展してきました。(終)

◆ 過去の常識が通用しない新たな概念を突きつけられたときに、それをすぐに受け入れられるかは、個人差によるところが大きいのも事実です。これらのメタファーから、みなさんのオブジェクト指向の概念モデルが、どの段階で停滞しているかを自己確認する一助となれば幸いです。

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

◆ Java/C# などの世界では、制御構造は、コンパイラーに組み込みの機能で、これを理解することが必須とされてきました。純粋なオブジェクト指向プログラミングの世界では、制御構造は、オブジェクトの種類ごとに、プログラマーが自分で規定できます。

◆ 条件分岐を表す、if などに相当する制御構造は、クラス Boolean に固有のメソッドとして記述できることを、すでに紹介しました。条件反復を表す、for などに相当する制御構造については、どのように記述すればいいのでしょうか。

5 timesRepeat: [
    Transcript show: $A]
-------------------------------- Transcript --
AAAAA

timesRepeat: を使うと、指定した回数だけ、ブロック式を評価します。出力結果を見ると、文字 $A を5回続けて表示するのが分かります。

s := 'ABC'.
s do: [:e |
    Transcript show: e; space]
-------------------------------- Transcript --
A B C

do: を使うと、各要素に対して、ブロック式を評価します。 ブロック引数 e は、文字列を構成する各文字を束縛します。出力結果を見ると、各文字を空白で区切りながら、順に表示するのが分かります。

s := 1 to: 3.
s do: [:e |
    Transcript show: e; space]
-------------------------------- Transcript --
1 2 3

do: を使うと、各要素に対して、ブロック式を評価します。 ブロック引数 e は、数列を構成する各整数を束縛します。出力結果を見ると、各整数を空白で区切りながら、順に表示するのが分かります。

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

60811a_1

 

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

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

s := 1 to: 5 by: 2.
s do: [:e |
    Transcript show: e; space]
-------------------------------- Transcript --
1 3 5

do: を使うと、各要素に対して、ブロック式を評価します。 ブロック引数 e は、数列を構成する各整数を束縛します。出力結果を見ると、各整数を空白で区切りながら、順に表示するのが分かります。

1 to: 3 do: [:e |
    Transcript show: e; space]
-------------------------------- Transcript --
1 2 3

60811b_1

 

to:do: を使うと、指定した範囲の数に対して、ブロック式を評価します。ブロック引数 e は、数列を構成する各整数を束縛します。出力結果を見ると、各整数を空白で区切りながら、順に表示するのが分かります。

1 to: 5 by: 2 do: [:e |
    Transcript show: e; space]
-------------------------------- Transcript --
1 3 5

60811c_1

 

to:by:do: を使うと、指定した範囲の数に対して、ブロック式を評価します。 ブロック引数 e は、数列を構成する各整数を束縛します。出力結果を見ると、各整数を空白で区切りながら、順に表示するのが分かります。

s := 'ABCDE'.
s from: 2 to: 4 do: [:e |
    Transcript show: e; space]
-------------------------------- Transcript --
B C D

60811d_1

 

from:to:do: を使うと、指定した範囲内の各要素に対して、ブロック式を評価します。ブロック引数 e は、2 番目から 5 番目までの各文字を束縛します。出力結果を見ると、B から D までの文字を空白で区切りながら、順に表示するのが分かります。

【課題】何が起こっているのか
次の2つの式を評価すると、

1 to: 3 do: [:e |
    Transcript show: e; space]
(1 to: 3) do: [:e |
    Transcript show: e; space]
-------------------------------- Transcript --
1 2 3
1 2 3

どちらも同じ結果となるのが分かります。これらの本質的な違いは何ですか。また、これらの違いが問題となるのは、どのような場合でしょうか。

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

|

« 連載: Smalltalk use: better《19》文字列と数列は何が違うの(1)★ | トップページ | 連載: Smalltalk use: better《21》文字列と数列は何が違うの(3)★★ »

JML/Java/Eclipse」カテゴリの記事

Squeak/Smalltalk」カテゴリの記事

C#/Visual Studio」カテゴリの記事

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

コメント

コメントを書く



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




トラックバック


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

» 構成 [構成]
干ばつ回避循環構成回路 中国株、ハンセン指数構成銘柄入り銘柄発表!! [モ娘。]どうみても構成がまんま『ことミック』です。ありg(ry 現在の自作PCの構成 年齢構成を考える アミノ酸(VAAM、BCAA、燃焼系)(身体を構成する生命活動に必須の成分) 「構造構成的質的心理学」の構築... [続きを読む]

受信: 2006年8月19日 (土) 03時42分

« 連載: Smalltalk use: better《19》文字列と数列は何が違うの(1)★ | トップページ | 連載: Smalltalk use: better《21》文字列と数列は何が違うの(3)★★ »