Rustについて基本からしっかり学んでいく本連載。第9回は、Rustのコレクションとジェネリクスについて。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
コレクションは、モダンなプログラミング言語では必須のユーティリティーです。本連載第9回では、コレクションの種類(ベクター、ハッシュマップ、文字列)を紹介し、コレクションには欠かせないジェネリクスも紹介します。
コレクション(collection)とは、文字通り複数の要素を集めたデータ構造を言います。要素を収納することからコンテナとも呼ばれます。第2回で取り上げた配列もコレクションと言えますが、Rustでは以下のものをコレクションとしています。
コレクションは、配列に比べると要素の追加や削除が容易で、要素のアクセスも添え字に限らないなどの柔軟性を備えます。まずは、Rustの備える3つのコレクションについて、概要をあらかじめまとめておきます。
ベクター(Vector)は、同じデータ型の値を複数持つことのできるコレクションです。他の言語ではリストと呼ばれることもあります。同じデータ型というのがポイントで、データ型を混在させることはできません。また、値の順序関係が維持されます。
配列では要素数が固定されていて、領域の余剰と不足という問題が常にありましたが、ベクターを用いることで可変長のリストを簡単に作成できます。ベクターでは、初期値を用いた変数宣言、値の追加と破棄、値の参照、値の挿入と削除などが基本的な操作になります。
文字列はこれまでも散々出てきましたが、実はこれもコレクションです。データ型がu8(符号なし8ビット整数)であるベクターのラッパーが文字列型、すなわちString型です。String型では、UTF-8エンコードされた文字列を8bitすなわちバイト列として保持しています。
ベクターのラッパーであるので、ベクターと同様のメソッドを備えており、値の追加と取り出し、値の参照、値の挿入と削除といった操作を可能にしています。ただし、UTF-8エンコードされた文字列の操作には文字の境界を意識する必要があり、ベクターほど単純ではありません。
UTF-8とは、Unicode文字体系におけるエンコーディング方式の1つです。従来のASCII文字(7ビット文字)はそのまま1バイトで表現し、残りの文字を2〜6バイトで表現します。例えば、平仮名は3バイトで表現されます。ASCII文字との親和性が高いため、インターネットの世界を中心に多く使われています。UTF-8は可変長のエンコーディング方式であるため、文字列の途中を見てもそれが文字の始まりなのか、そうでないのか見分けることは困難です。これが、文字列の操作をベクターほど単純なものにはできない理由です。
Copyright © ITmedia, Inc. All Rights Reserved.