ログアウト

Swiftの基本的な型

 ここでは、他言語と比較したSwift言語の特徴について述べています。最初の段階では説明にピンとこない部分もあると思いますので、Lecture2の全ての内容を履修し終えてからここに戻ってくるのがよいでしょう。

Swiftの基本的な型

 

 Swiftに限らずプログラミング言語には型(データ型、データの保持の仕方)が存在するのが一般的です。
型には大きく分けて値型と参照型、という種類があります。まずはそれぞれの特徴を見てみましょう。

・値
値の保持(データをメモリに記録する)のみを行い、振る舞い(値の加工処理など)を持ちません。
値を扱う際には、値のコピーが渡されます。プリミティブ型とも呼ばれます。
プログラミング言語のもっとも基本的な型です。

・参照型
オブジェクト(処理をひとまとめにしたもの)として提供されることが多く、その場合には値の加工をするなどの振る舞いを持ちます。
値を扱う際には、値への参照(メモリのどこにデータが記憶されているか、という住所情報。それをもとにメモリを参照し、その中の情報を直接加工する)が渡されます。

実際にはプログラミング言語の設計思想により、値型でも値の加工をするなどの振る舞いを持つ言語もあります。ですが大半の言語は上記のように分類されていると考えてよいでしょう。

 

 C言語やJavaでは、int型(整数型)やfloat型(浮動小数点数型)が値型として提供されてきました。Swiftが登場する以前のiOSアプリの開発言語であるObjective-Cにおいても、NSIntegerやCGFloatといった値型が存在していました。

 これらはオブジェクトではないために値を加工するなどの振る舞いは持っていませんでした。データをメモリに記録・保持するだけです。しかし、
Swiftのもっとも基本的な型は、値を保持する以外にも「値を加工する」などの振る舞いを持つことができます。
(例えば、基本的な型であるString型には、[String変数].countにより値を加工する処理(文字数を返してくれる機能、振る舞い)が備えられています。Playgroundで試してみましょう。)

これはSwiftのもっとも基本的な型である値型がオブジェクト(クラス)で提供されているためです。
普段使用しているStringやIntは、実はクラスとしてXcodeの隠しファイルに存在しており、それを使用していたという事です。(インスタンスの宣言方法と、文字列や数値などの変数宣言方法を比べてみてください。方法が似ていると思いませんか?また、クラス名は頭文字が大文字、型名も頭文字が大文字です。)

 

・Swiftの基本的な型は振る舞いを持っている

 Swiftの基本的な型はなぜオブジェクトとして用意されているのでしょうか?「値を加工する処理」を持つことができることは確かにメリットなのですが、もう1つ大きな理由があります。
「異なる型(種類)のデータをきっちり区別して扱うため」です。

一般的な値型は、どんなデータでも値を自由に入れることができたのですが、オブジェクトはそれぞれ同じ型でないと値を入れることができません。
Swiftはよく「堅牢な言語」であるといわれますが、値型を直接開発者に使わせず、オブジェクトで基本的な型を定める事で、開発者が異なる型の代入を行ってしまうことを防ごうとしているのです。こういった文法上の工夫がSwiftでは多く見られます。

iOSアプリは、旧来の言語であるObjective-CとSwiftを混在させて開発することもできます。その際には基本データ型を互いに変換しながら利用することになります。