辞書・オプショナル・アンラップ

こんにちは!kossyです!





本日気になったニュースはこちら
headlines.yahoo.co.jp

ドコモはもともと国営だったとはいえ、国が一般企業の運営に
口を出すのはどういう意図があるのでしょうか。

おそらく選挙対策で、電話代は携帯を契約している国民のほとんどが意識していることだと思うので、
そこに切り込むことによって支持率を維持していこうという魂胆なような気もします。










さて、今回はswiftを少し触ってみたので、
Rubyと違うなと思った点をブログに残してみたいと思います。





辞書とは
Rubyで言うところのハッシュと同じものだと思ってます。
辞書は、配列と同じく複数のデータを管理する用途で使います。
配列がインデックス番号で要素を管理するのに対し、辞書は「キー」と「値」のセットで管理する点で異なります。

let user:[String: Int] = [
  "age" : 25,
  "weight" : 60,
  "height"  : 175
]

print(user["age"])
=> optional(20)

ここでoptionalという見慣れないワードが出てきました。





オプショナルとは

オプショナルを理解するためには、まずはnilを理解する必要があります。

辞書に存在しないキーを指定してprintすると、
対応する値が存在しないので「何もない」を意味する「nil」が出力されます。

let user:[String: Int] = [
  "age" : 25,
  "weight" : 60,
  "height"  : 175
]

print(user["age"])
=> optional(20)

print(user["sex"])
=> nil

nilは危険なもので、多くのバグを生む原因となりえます。
例えば、文字列とnilを連結するとエラーが発生します。
オプショナルは、このnilによるバグをなくすための仕組みです。

nilはバグを生む危険性があるため、通常のデータ型にはnilを代入できないようになっています。
逆に、この仕組みによって通常のデータ型の変数(定数)には
nilが入っていることは絶対にないというロジックが成立するので、
nilによるバグを考えずに安心して使えます。

ただ、先ほど示した辞書の値のようにnilは存在しうるので、
バグの発生を抑え安全に扱うためにオプショナル型というものが存在します。
オプショナル型は通常のデータ型に「?」をつけたもので、通常のデータ型の値の他にnilも代入できます。
オプショナル型の変数はnilの可能性があるため、使う際には細心の注意を払う必要があります。
そのため、通常の値を入れてもOptional(値)というように、そのままでは使えないようになっています。

辞書から取り出した値は、nilの可能性があるので、
そのままでは使えないオプショナル型の値になります。
なので変数(定数)に入れるときには、オプショナル型のデータ型を指定しましょう。





アンラップとは

if文を用いることで、オプショナルの値がnilでないことをチェックできます。
if文の中では、絶対にオプショナルの値はnilでないので、
バグを起こす可能性はなくなり、安心してオプショナルを使うことができます。

そして、オプショナルの末尾に「!」をつけることで、
オプショナルの値を取り出すことができます。これをアンラップと言います。
アンラップすると、オプショナルでない通常のデータが取り出せるので、
通常のデータ型の変数に代入できるようになります。

let user: [String: String] = [
    "name": "Suzuki", 
    "email": "suzuki@example.com"
]

if user["name"] != nil {
    let name:String = user["name"]!
    print(name)
}

めんどくさい

Rubyと違って制約が多くて面倒です。笑
いや、Rubyの自由度が高すぎるのが問題なのか、、、




参考にさせていただいたサイト

Swift | プログラミングの入門なら基礎から学べるProgate[プロゲート]