要素の列挙
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/04 03:18 UTC 版)
Smalltalk は反復処理のための基本構文を備えているが、ある値の生成器(入出力等)やある集合要素から要素を取得するときに基本的な反復構文を使う事は稀である。Smalltalk では、値を列挙するために値の生成器や集合要素に送るべきメッセージが概ね決まっており、値を取り出す際は極力、列挙メッセージ(英: enumerating)を使用する事が作法となっている。 次に列挙メッセージの送信例を示す。 配列に対する列挙メッセージの例: #( 4 3 2 1 0 ) do:[ :each |"配列の要素が1個ずつ each に代入され表示領域(Transcript)に表示される"Transcriptshow: each;cr.]. 実行結果: 43210 数値に対する列挙メッセージの例: ( 0 to: 4 ) do:[ :each |"配列の要素が1個ずつ each に代入され表示領域(Transcript)に表示される"Transcriptshow: each;cr.]. 実行結果: 01234 列挙メッセージで使えるセレクターは #do: の様に全ての要素にブロックを適用するだけの単純なセレクターだけでなく、現在の集合要素の要素を操作した上で新しい集合要素を作成する #collect: や、集合要素から条件に一致する要素だけを抜き出し、新しい集合要素を作り出す #select:、集合要素の中から特定の要素を見つけ出す #detect:ifNone: など様々なセレクターがある。処理系によっては #groupBy:having: などSQLに類似したセレクターに対応するメソッドを多数用意しているものもある。Smalltalk では集合要素や値の生成器自体にこれらのメッセージを受け取れるよう実装する事で、集合要素のデータ構造や、生成器の入力元などの構造に依存せず最適な反復処理を実現できるようになっている。これらの列挙機能は近年の言語において foreach やyeild、LINQ等言語機能として賄われつつあるが Smalltalk においては、単にライブラリーの慣習として実現されている所が特徴的である。
※この「要素の列挙」の解説は、「Smalltalk」の解説の一部です。
「要素の列挙」を含む「Smalltalk」の記事については、「Smalltalk」の概要を参照ください。
- 要素の列挙のページへのリンク