[Swift]オプショナル型とnil, “?”, “!”が分かるようになる
みなさんお疲れ様です。Kosukeです。
Swift文法の話で”オプショナル型”、”nil”、”?”、”!”というややこしい?用語が出てくることがありますが、今回はこちらの説明をしていきたいと思います。
結論が待ちきれない方は、④のまとめを先にご覧ください。
①データ型について
Swiftには他のプログラミング言語のように、String(文字列)、Int(整数)、Double(小数)といった、データの様々なカテゴリを表す「データ型」が存在します。変数を定義する際には、その中に格納するデータの型も定義されることとなります。
そして、オプショナル型もデータ型の1つです。
②格納するデータの型を選択できるオプショナル型
それでは、変数を定義する際のデータ型として「オプショナル型」を選択すると、どんなカテゴリのデータを格納することができるのでしょうか。下記の2種類に分けることができます。
・StringやInt、Doubleといった、通常のデータ
・nilという名の「空の状態」を作るデータ
つまり、「通常のデータを入れても良いけど、あえて空のデータを入れることもできる」というOptional(選択可能)なデータ型と言えます。
③オプショナル型の使用方法と危険性
・オプショナル型の使用方法
そして、変数をオプショナル型として宣言するのに必要なのが、”?”になります。
例えば、
var release_year : Int?
//データ型の指定に”?”をつけることで、空のデータを格納した変数を作成することができます
print(release_year)–>nil
//release_yearをprintすると、中身が空であることを示すnilが出力されます
*データ型の宣言後に、release_year = 1977とすることで値を入れることもできます。
*あるいは、var history : Int? = 40とすることで、初めからオプショナル型としてデータ型を宣言した上、値を格納することもできます。
・オプショナル型の危険性と対策
データが入っている状態と、空の状態を使い分けられるのは、一見すると便利です。しかし、変数の中身が空の状態で使用すると、アプリがクラッシュしてしまうという危険性があるのです。
そこでアプリのクラッシュを防止するために使用するのが、”!”になります。
let memorial_year = release_year! + history!
//実際に変数を使用する際に、変数の後ろに”!”をつけることで、「この変数の中身が空ではない」ことを明示的に示します。
④まとめ
まとめると、
・オプショナル型–>
「StringやIntなどの通常データ」と「nilという空のデータ」のどちらでも格納できるという「Optional(選択できる)」なデータ型のこと
・nil–>
オプショナル型に格納する「空の状態」を表すデータのこと。風船に空気が入るようなもの。
・”?”–>
オプショナル型を宣言するために、通常のデータ型の後ろに付ける記号のこと。
例えば、var release_year : Int?//release_yearという変数のデータ型をオプショナル型にしている
・”!”–>
オプショナル型の変数(空ではない通常のデータが格納されている)を使用する際に、「この変数の中身は空ではないですよ」ということを明示的に示すために付ける記号のこと。
例えば、let memorial_year = release_year! + history!//release_yearとhistoryというオプショナル型の変数を使用する際に、”!”を付けることで中身が空ではないことを示している。
綾瀬はるか「今日もがんばったね!お疲れ!!」