【第5回】MacBookProを買ったらXcodeでiPhoneアプリを作ろう〜変数・型〜

こんにちは。takaです。

前回までで、チュートリアル形式で進めてきましたが、今回は座学で言語仕様的な部分を書きたいと思います。

前回の記事はこちらからご覧ください。
→「【第4回】MacBookProを買ったらXcodeでiPhoneアプリを作ろう〜繰り返し処理〜

変数

変数とは、プログラム上で使用する値を保持するための入れ物のようなものです。
前回までの記事では、入力された値の合計値を格納したり、ループの中でカウントしている値を格納していたものです。
変数に値を入れることを代入と言います。

「var 変数名」で宣言することができます。
「var 変数名:型名」という形で型も合わせて宣言することができます。(型については後の方の見出しで解説します)
「var 変数名 = 値」で宣言と代入を同時に行うことができます。

抜粋すると以下の2行です。

  var sum:Int = 0
  var count = 1;

この変数に値を出し入れすることでプログラムの入出力を行うことができます。

定数

続いて、定数とは、一度値を設定すると以降変更ができないものを格納するために使用します。
例えば、あるデータの登録件数を100件として処理をしたい場合、定数で100を定義することで処理を行うコードから定数を参照することにより、100をいう値を取得できます。

わざわざ定数を定義しなくても、件数を判定する処理で「100」と直接書けばいいじゃないか!と思うかもしれませんが、コード上に「100」と直接書いてしまうと問題になるケースがあります。
例えば、「i < 100」という記述が100箇所に書かれていた場合、件数を1000件に変更したいとなった際には100箇所全てを修正する必要がありますが、定数を定義しておくと、定数の値を変更するだけで、定数を使用している全ての処理を1000件にすることができます。

先ほどの変数では、「var」で宣言しましたが、定数は「let」で宣言します。
前回までの記事で使用した定数は以下です。

  let intValue:Int = Int(inputText.text!)!

上記のコードは定数として使用したかった訳ではないのですが、Xcodeの仕様なのか1度しか代入しない変数は定数として宣言しないとエラーになってしまうようです。
本来の使い方としては以下のような形で定義するのが一般的かと思います。

  let MAX_LENGTH:Int = 100

変数や定数には型が存在します。
型とは変数に入れることが出来る値の種類を決めるものだと思ってください。

例えば、以下のような種類があります。

Int    :  数値
String  : 文字列
Boolean : 真偽(true/false)

この他にも種類がありますが、取りあえず簡単なプログラムを組むだけであれば上記の3つを覚えておけば大丈夫です。

オプショナル型

私がSwiftを勉強し始めてから一番馴染めないのがこのオプショナル型と呼ばれるものです。

オプショナル型はnil(null)が許容されていて、非オプショナル型はnil(null)が許容されていない型になります。

補足
nilとは、データがない状態を表します。数値型の「0」の意味ではなく、何もないという意味です。
例えるならば、Int型がおもちゃ箱で、「0」は数字ブロックとした場合、0が代入されている状態というのはおもちゃ箱に0の数字ブロックが入っている状態です。
nilを代入した場合は、数字ブロックすら入っていない状態です。

オプショナル型を宣言する方法は、型の後ろに「?」または「!」をつけます。以下に例を記載します。

  var sum:Int? = 100
  var count:Int! = 100

「?」と「!」は両方ともオプショナル型ですが、少し意味合いが違います。
「?」は通常使うオプショナル型ですが、「!」はアンラップ型のオプション型と呼ばれています。

どんな違いがあるかと言うと、上記の宣言を例に説明しますと
「?」のオプショナル型を出力すると「Optional(100)」のように「Optional()」が一緒に出力されてしまいます。

  var sum:Int? = 100
  println(sum)

そのため、単純に以下のようにコードを書いてしまうと、sum2には
「100 + 100」で200が入るのではなく、「Optional(100) + Optional(100)」となり、コンパイルエラーとなってしまいます。

  var aaa:Int? = 100
  var bbb:Int? = 100

  var ccc = aaa + bbb
   print(ccc!);

逆に「!」アンラップ型の場合ですと、「Optional()」が出力されずにそのままの値が出力されます。
そのため、以下のコードでは「aaa+bbb」が「100+100」となります。

        let aaa:Int! = 100;
        let bbb:Int! = 100;

        let ccc:Int! = aaa + bbb;
        print(ccc!);

ここまで調べた時点で、全部アンラップ型の方が良いのではないか?っと思ったのですが、アンラップする際には変数がnilではないことを保証する必要があるようです。
そのため、オプショナル型でnilチェックをした上でアンラップ型に変換する使い方になるようです。

まとめ

今回は変数、定数、型とやりました。
ちょっと小難しい話でしたが、読んでいただきありがとうございました。

次回はこれまで学んだ知識を活かして、HelloWorldよりステップアップしたアプリを作って見たいと思います。

にほんブログ村 PC家電ブログ Macへ
にほんブログ村

スポンサーリンク
記事用

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
記事用