Swiftにおける var と let の違い。
var と let の違いについてご存知でしょうか?
プログラミングを始めたばかりの時に違いがよくわからなかったのでメモとして共有します。
まず始めに、var は変数、let は定数と呼ばれているので覚えてください。
変数はその名の通り、変化する数です。
定数もその名の通り、定まっている数です。
これを頭に入れておけばもう var と let のどちらを使えばいいの?と悩むことはありません。
##変数(var) と 定数(let)
変数と定数は、値の一時保存に使います。
ある処理の結果を変数や定数に保存すると、後続の処理でその結果を再利用できます。
一時保存ということは、
アプリをタスクキルすると変数や定数の中身の情報が失われるということです。
もちろん永久保存する方法もありますが、
それに関しては発信できるほどの知識がついたら共有します。
では、一時保存で役に立つのかというと、
簡単なコードですが下記のような使用方法などがございます。
var a: Int
a = 1 + 1 // a の中には 1 + 1 の結果が"代入"されている
var b: Int
b = a + 10 // b の中には a + 10 の結果が"代入"されている
一時保存することにより、別のところで変数を使用することができるようになります。
また、上記のコードで強調したのですが、変数や定数に値を入れることを代入と言います。
変数と定数の違いは代入できる回数にあり、
変数には何度も代入できますが、定数には一度しか代入することができません。
定数に二度目の代入を行うとコンパイルエラーが発生します。
var a: Int //変数なので何度も代入できる
a = 1
a = 2
a = 100
let b: Int //定数なので一度しか代入できない
b = 10 //1回目
b = 100 //2回目 コンパイルエラー発生!
名前やメールアドレスなどは、
不用意な変更はされたくないので定数に入れる方がいいかもしれませんね!
この様に、変数と定数を使い分けることが
安全で可読性の高いプログラムの実現に繋がります。
##変数や定数に対する代入
変数や定数に代入可能な値は、変数や定数の型と一致しているもののみになります。
Int型の変数に対してはInt型、つまり整数しか代入することはできませんし、
String型の変数に対してはString型、つまり文字列しか代入することができません。
型以外の値を代入しようとするとコンパイルエラーになります。
var a: Int //Int型
a = 100 //エラーなし
var b: Int //Int型
b = "Hello" //Int型にString型を代入しようとしているのでコンパイルエラーが発生
このように、変数や定数に対する代入は値の型に注意してください。
また、変数 a を宣言し a に100を代入しましたが、これを一度に済ませることもできます。
さらには、前回の記事に記載した、型推論による簡潔な記述も可能です。
var a: Int = 100
let b: String = "Hello"
var c = 10 //変数cの値が10なのでInt型だと推論してくれる
let d = "World" //変数dの値がWorldなのでString型だと推論してくれる
##変数・定数の型の確認方法
変数や定数に代入する際のルールや型推論については理解できましたが、
肝心の型がわからなくなった場合にどうすればいいのだろうかと当時は疑問に思ったので、
それに関しても記載しておきます。
まず、前提として、
**型が分かりにくくなるような変数名はつけないようにする。**というのが大事かと思います。
例:name
-> name は名前とかだからString型かな? となんとなく分かる
例:book
-> book は本だからString型? でも本のページ数とか、本の重さもある・・・。
というふうになるので、
bookName(本の名前)、bookWeight(本の重さ)など分かる変数名にする方がいい。
では、他人が書いたコードでよくわからない場合はどうすればいいか
方法としては、
- エラーコードを読んで判断する
- type(of:)関数を利用する
のどちらかだと思います。
エラーコードは、Google翻訳などで読み解いてください・・・。
type(of:)関数は下記のように使用します
let a = 100
type(of: a) // Int
print(type(of: a)) //ログに出力したい場合
型が分かってしまえば、こちらのものですね!
スラスラとコードを書いていきましょう。
ですが、何よりも大事なのは、
誰が見ても分かるようなコードを書くようにすることだなと、この記事を書いていて思いました。
以上、ありがとうございました。