概要
変数のデータ型の分類について、分かりづらい説明が多いように感じた。
そこで、intやstringなど各データ型を実際にChatGPTに分類してもらうことで、理解を深めてみた。
類型表
データ型 | プリミティブ型/非プリミティブ型 | カスタム型/非カスタム型 | 組み込み型/非組み込み型 | 複合型/非複合型 | 値型/参照型 |
---|---|---|---|---|---|
int | プリミティブ型 | 非カスタム型 | 組み込み型 | 非複合型 | 値型 |
char | プリミティブ型 | 非カスタム型 | 組み込み型 | 非複合型 | 値型 |
string | 非プリミティブ型 | 非カスタム型 | 組み込み型 | 非複合型 | 参照型 |
JArray | 非プリミティブ型 | 非カスタム型 | 非組み込み型 | 複合型 | 参照型 |
enum | 非プリミティブ型 | カスタム型 | 非組み込み型 | 非複合型 | 値型 |
delegate | 非プリミティブ型 | カスタム型 | 非組み込み型 | 非複合型 | 参照型 |
struct | 非プリミティブ型 | カスタム型 | 非組み込み型 | 複合型 | 値型 |
class | 非プリミティブ型 | カスタム型 | 非組み込み型 | 複合型 | 参照型 |
プリミティブ型
プリミティブ型は、プログラミング言語において最も基本的なデータ型で、言語のコア部分に組み込まれています。これらはメモリ上で効率的に表現され、通常、算術演算や論理演算などの基本的な操作が可能です。C#では、int、float、double、char、boolなどがプリミティブ型にあたります。
これらの基本データ型は、言語の設計上、newキーワードを使わなくてもインスタンスを作成できるようになっています。これはプログラミングにおいて一般的に頻繁に使われるデータ型であるため、簡潔な記述を可能にすることで可読性や使いやすさが向上するからです。
出典: ChatGPT
なるほど。newしなくてもインスタンス生成できるのは、単に便宜上の理由なのか。
カスタム型
カスタム型は、プログラマが独自に定義するデータ型で、他の型を組み合わせたり、独自のメソッドやプロパティを持つことができます。C#では、class、struct、enum、delegateなどがカスタム型になります。カスタム型を使用することで、問題領域に適した抽象化を提供し、コードの再利用性や保守性を向上させることができます。
出典: ChatGPT
組み込み型
組み込み型は、プログラミング言語に組み込まれているデータ型で、言語の標準機能として提供されます。これらの型は、プリミティブ型だけでなく、言語が提供する基本的な型も含む場合があります。C#では、プリミティブ型に加えて、string、Array、List、Dictionaryなどが組み込み型にあたります。
出典: ChatGPT
サードパーティー製のクラスは組み込み型といわないみたい。例えばJSON.NETライブラリのJArrayなど。
複合型
複合型とは、他のデータ型を組み合わせて作られるデータ構造のことです。簡単に言えば、複数のデータをひとまとめにして扱えるようにするデータ型です。これに対して、単純な数値や文字などを表現するデータ型は「非複合型」と呼ばれます。
例えば、家族の名前を一覧にして保存したい場合、複合型の一種である「配列」を使うことができます。配列は、同じデータ型の複数の要素を順序付けて格納することができます。この場合、家族の名前を文字列型(string)の配列として保存できます。
複合型の他の例には、リスト(List)、辞書(Dictionary)、タプル(Tuple)などがあります。これらのデータ構造を使うことで、複数のデータを効率的に扱い、コードをシンプルに保つことができます。
出典: ChatGPT
値型/参照型
C#のデータ型は、値型と参照型に分類されます。
値型は、変数が直接データを保持する型です。値型の変数が別の変数に代入されると、データのコピーが作成されます。プリミティブ型のほとんどや、struct、enumが値型にあたります。
参照型は、変数がデータへの参照を保持する型です。参照型の変数が別の変数に代入されると、データへの参照がコピーされますが、データ自体は共有されます。参照型の変数が変更されると、他の参照型変数も影響を受けることがあります。C#では、class、string、Array、List、Dictionary、delegateなどが参照型にあたります。
値型と参照型の違いは、主にデータの扱い方に関連しており、値型はコピーされたデータが独立しているため、一方の変数が変更されても他方に影響を与えません。一方、参照型ではデータが共有されているため、一方の変数が変更されると、他方も影響を受けることがあります。これらの違いを理解することで、適切なデータ型を選択し、効率的で安全なコードを書くことができます。
出典: ChatGPT