通信用語の基礎知識 日本文化チャンネル桜二千人委員会 戻る

通常PC用 / 人気 更新 今日 カテ
電子計算機 > 仕様・構造 > ソフトウェア > プログラミング言語 > 言語仕様 > データ型・構造体
集合型
辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:しゅうごうがた
品詞:名詞

論理型を集めて扱うようなデータ型のこと。構造化型の一つ。

目次
概要

Delphiを含むPascalで使われている特徴的な型である。

CC++C#などには、相当するものがない。

特徴
Delphi

0以上の要素を持つ型として使われる。

例えば、次のように定義する。

type Hoge = set of (A, B, C, D, E, F);

var Fuga: Hoge;

実際の使用例は次の通り。

Fuga := []; // 空集合

Fuga := [B, E]; // BとE

計算も可能である。

Fuga := Fuga - [E]; // Eを抜く

Fuga := [A, B, C] + [C, D]; // 結果、Fugaは[A, B, C, D]

if文で、要素が含まれるかどうかの判別処理も書くことができる。

if (B in Fuga) then ...;

集合型に使える演算子(集合演算子)は、次のものがある。

C

Cには相当する機能がないため、同等のことをするにはビット演算を用いることになる。

上の例を似たように扱うため、例えば次のような列挙型を定義するとする。

typedef enum { A = 1, B = 2, C = 4, D = 8, E = 16, F = 32 } Hoge;

Hoge Fuga;

この時、次のようにできる。

Fuga = 0; // 空集合

Fuga = B | E; // BとE

計算はビット演算で代用する。

Fuga &= ~E; // Fuga := Fuga - [E];

Fuga = (A | B | C) | (C | D); // Fuga := [A, B, C] + [C, D];

if文で、要素が含まれるかどうかの判別処理は、次のようにする。

if (Fuga & B) { ... };

処理は不可能ではなく、現実にCでこのように書かれた処理系は数多存在するが、これを「集合型」と呼ぶことはない。

C++

C++でも上と同等の記述は可能だが、Fuga = 0;はエラーになるので注意。次のように書かねばならない。

Fuga = static_cast<Hoge>(0);

これ以上を望むなら、素直に集合型のclassを作った方がよいだろう。

リンク
用語の所属
データ型
構造化型

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic