可変長【variable length】
概要
文字数、桁数、要素数、記憶領域の広さなどが決まっていなかったり、最初に規定された数や長さを後から変更できることを意味する。例えば、関数の引数が可変長である場合、関数を呼び出す側が任意の個数の引数を記述して引き渡すことができる。
可変と言っても、まったく任意に如何様にでも変更できるとは限らず、上限や下限が決まっていることが多い。また、いくつかの選択肢から一つを選べる場合や、「32バイトの整数倍の長さ」といったように取り得る値について何らかの規定や制限が存在することもある。
可変長文字列
データベースの分野では、SQLのデータ型の一つにVARCHAR型が用意されており、可変長の文字列を格納することができる。CHAR型がテーブル作成時に指定した固定長の文字列を格納するのに対し、VARCHARは実際に格納した文字数に応じた領域しか消費しない。
住所や商品名のように長さがまちまちなデータに対してCHAR型を指定すると、規定より短い場合でも必ず同じ長さの領域に記録されるが、VARCHARを使うことで格納時に長さが決められるようになり、ストレージ容量の無駄を抑えられる。ただし、可変長型は長さ情報を別途管理する必要があるため、固定長と比べて内部処理がわずかに複雑になる場合もある。
可変長配列
プログラミングの分野では、配列の要素数が宣言時に決まっておらず、後から変更可能なものを「可変長配列」という。宣言時にサイズを決めなければならない固定長配列と異なり、可変長配列は要素の追加・削除に応じて動的にサイズが変化する。PythonのリストやJavaのArrayListがその代表であり、あらかじめ要素数が不明な場面で不可欠な存在だ。
可変長フィールド
ネットワークプロトコルやファイル形式では、先頭に記録される制御データ(ヘッダ)を構成する項目(フィールド)のうち、長さが事前に決まっていないものを「可変長フィールド」という。MP3やJPEGなどのファイル形式、HTTPヘッダ、DNSメッセージなどは、フィールドごとに可変長の設計が採用されている。可変長フィールドを含むデータを正しく解析するには、長さフィールドや終端文字など、データの区切り位置を示す何らかの情報を追加して受信側が適切に解析できるようにする必要がある。
