構造体とは、プログラミング言語において複数のデータをまとめるためのデータ構造の1つである。
概要
プログラムで扱われるデータには、同時にまとめて扱われるものが存在する場合がある。そのようなデータを扱うのに便利なのが構造体である。
例えば、複素数の計算を行うプログラムを考えてみよう。複素数を標準で扱えないプログラミング言語も多いが、そのようなプログラミング言語では、その複素数の実部と虚部は別のデータとして異なる変数に格納されなければならない。構造体を用いない場合のコードは以下のようになるだろう。
int multiply_real(int a_real, int a_imaginary, int b_real, int b_imaginary) {
return a_real * b_real - a_imaginary * b_imaginary;
}
int multiply_imaginary(int a_real, int a_imaginary, int b_real, int b_imaginary) {
return a_real * b_imaginary + a_imaginary * b_real;
}
これでも複素数計算が実装できると言えばできるのだが、実部と虚部という本来同時に扱われるものを別々に扱わなければならないとなると、コードが読み辛くなり混乱の元にもなる。そういう本来同時に扱われるべきデータは同じ変数にまとめてしまえるようにする、というのが構造体の基本的な考え方である。構造体を使った疑似コードは以下のような感じになる。(実際のコードはプログラミング言語によって書き方が異なる。)
struct complex {
int real;
int imaginary;
}
complex multiply(complex a, complex b) {
complex result;
result.real = a.real * b.real - a.imaginary * b.imaginary;
result.imaginary = a.real * b.imaginary + a.imaginary * b.real;
return result;
}
虚部と実部が一つのcomplex
構造体に格納された結果、最初のコードに比べて随分と読みやすく且つ扱いやすいコードになったことがお分かりいただけただろうか。C言語だとmalloc
とかしないといけないが……ごにょごにょ。
オブジェクト指向言語では、変数だけではなくメソッドをまとめることもできるクラスと呼ばれる概念が用意されているが、その言語が構造体をサポートする場合にそれがクラスとどう違うかは言語によって異なる。
関連動画
関連商品
関連コミュニティ
関連項目
- オブジェクト
- クラス
- 共用体
- プログラミング関連用語の一覧
- 0
- 0pt