実際の開発現場でのSwiftの変数・定数の使われ方を解説します

19/03/03 16:51:30     19/04/08 09:42:24

Swiftの変数・定数の使われ方解説

Swiftの大きな特徴の一つとして、変数と定数の使い分けがしやすいという点が挙げられます。他のプログラミング言語でも変数と定数の概念自体は存在するのですが、Swiftのようにvarとletの三文字だけで使い分けられる言語はありません。

それだけSwiftは変数と定数の使い分けを重要視しているということなのですが、理由としてはおそらくバグの発生確率を下げるためでしょう。このページでは、なぜ変数と定数を使い分ける必要があるのか、実際の開発現場ではどのように使い分けられているのか、といったことを解説していきます。

変数と定数を使い分ける理由

ほとんどのプログラミング言語では、要素を格納するためのメモリ領域を確保する際には変数を使用するかと思います。プログラミング経験があれば変数と定数の違いは知っている人が多いかと思いますが、それでも定数をあまり使わない、まったく使わない、といった方もいるはずです。

実際変数だけ使っていても問題ないのですが、場合によっては定数を使用した方がバグが発生しない、意図していない動きを防ぐことができる、といったメリットがあります。変数は自由に中身を書き換えることができ、それが変数のメリットでもあります。

しかし、絶対に書き換えることのない要素というものも存在するはずです。あまり多くはないですが、処理のなかで間違って書き換えてしまうと厄介でしょう。一人でソースコードを書いていて変数を誤って書き換えるような処理を書いてしまうことは少ないですが、複数人で開発していると話は別です。

誤って書き換えるというよりは、誰かが用意した変数を誰かが書き換えてしまうようなケースがあります。要素を変えたくない場合定数にしておけば他の人にも一目でわかり、書き換えようとは思わないはずです。

実際の開発現場ではどうなっているのか

実際の開発現場で変数と定数がどのように使い分けられているかですが、プロジェクトによって様々です。しかし、少なくとも定数をまったく使っていないプロジェクトはないでしょう。もちろん変数を使わないことは不可能なのでそれもありません。

基本的には書き換え可能な変数が使われるケースが多いのですが、どのプロジェクトでも多かれ少なかれ定数が使われています。また他のプログラミング言語よりもSwiftは定数を宣言するためのコードが短くて済むので、その分定数が使われる機会が多いです。

絶対に固定値にしたいフラグなどはだいたい定数で宣言されています。イメージとしては、たとえば1~4の処理があって、どれかの処理が行われ、どの処理が行われたのかを別の処理に渡すシステムがあるとします。

その際1~4にそれぞれ1~4という数字が入ったフラグを用意しておき、そのフラグをメソッド呼び出し時の引数にするとします。その際、1~4のフラグの数字は勝手に書き換えられると後継の処理が変わってしまうので固定しておく必要があります。

そのため、定数で宣言しておいた方が良いでしょう。逆に、後継のメソッドではフラグを受け取る処理になりますが、このメソッド内で受け取る側のフラグは変数にしておいた方が良いです。

なぜなら、1~4のどれかの数字を受け取って格納する必要があるからです。少しわかりにくい例だったかもしれませんが、要するにたとえば同じフラグで見ても固定しておきたいフラグは定数にして、逆に変更する可能性のあるフラグは変数にしておくということです。

少なくとも、別の処理から値を受け取る場合は変数でなければなりません。上書きというよりは、要素を渡す側は定数、受け取る側は変数、といった使い分けが一つの考え方です。

「定数=絶対に書き換えてはいけない」というわけではない

Swiftの仕様上、処理のなかで定数を書き換えようとするとエラーになります。新たに要素を代入することはできません。では実際の開発現場で定数を絶対に書き換えてはいけないのかというと、そうではありません。

たしかに処理のなかではたとえば上で挙げた定数のフラグを書き換えることはありません。業務上の仕様変更によりフラグの宣言部分で要素の中身を変える可能性はあります。たとえばもともと要素を1にしていたものを2に変えるようなことです。

当たり前のことですが、定数は処理のなかで書き換えられないというだけで、プロジェクトによっては後から宣言部分で中身を変えるようなことはあります。

変数だから書き換えて良いというわけではない

変数は処理のなかで要素を書きかえることができますが、だからといって自由に書き換えて良いわけではありません。個人開発ならもちろん自分の好きなように書き換えれば良いのですが、少なくとも実際の開発現場では自由に書き換えない方が良いでしょう。

変数は書き換えることができるというだけなので、宣言した人がどう考えているかはわかりません。自分の処理内で書き換えることを想定して変数にしている可能性が高いですが、他の人が作った処理で勝手に書き換えられると困る可能性があるということです。

変数だから自由に書き換えて良いわけではなく、特定の個所で書き換える必要があるから変数になっています。関係ない部分で書き換えると別の人の処理がバグが発生する可能性があります。

特定のメソッドからのみ書き換え可能、のような宣言ができれば良いのですが、そのような方法はありません。書き換え不可の定数か書き換え可能な変数しかないので、変数でどこまで書き換え可能かは指定できないのです。

詳細はプロジェクトによって異なりますが、イメージとしては定数は絶対に書き換え不可、変数は書き換え可能だがいつでも書き換えて良いわけではない、といったイメージかと思います。

迷ったらどっちで宣言すべきか

開発現場によって定数と変数の使い分けを明確化している場合もあれば、そうでない場合もあります。また仕様が完全に固まっている場合もあれば、ある程度流動的に開発している場合もあるでしょう。

その結果、後から書き換えるかどうかがわからず、変数にすべきか定数にすべきか迷う場合があるかもしれません。実際どちらが正解かは微妙ですが、多くの場合迷ったら変数にしておくことが多いと思います。

とりあえず定数にしておいて書き換えたくなったら宣言部分で変数に変えた方が良いのではないかという意見もあるかもしれません。実際その通りでその方が安全性は高いのですが、利便性とリスクを天秤に掛けて判断することになります。

たしかに迷ったら定数にしておいた方が安全ですが、そうするとその分臨機応変に書き換えられないということです。逆に変数にすると自由に書き換えられる分意図しない動きになる可能性がありますが、その可能性は低いです。

リスクよりも利便性の方が大きいため、結果的に多くの開発現場で迷ったら変数で宣言する場合が多いです。Swiftは他のプログラミング言語に比べれば定数が使われることが多いですが、基本的にプログラミング言語では定数よりも変数が使われることの方が多いです。

いくらSwiftでも定数の方が多いということはあまりないので、利便性の高い変数が使われることが多いでしょう。書き換えたいものや迷ったら変数、絶対に書き換えないもののみを定数、といった使い分けが主流かと思います。

案件量が豊富なアルマサーチ

アルマサーチ

最後に、アルマサーチのご紹介!

アルマサーチはフリーランス向けに案件をご紹介することに特化したエージェントサービスです。豊富な案件量から、安定して継続的な案件のご紹介を実現しており、口コミから登録エンジニアが急増中です。

アルマサーチが選ばれる理由

  1. 豊富な案件量。週3〜4日の案件や在宅リモート案件も。
  2. 優秀なコンサルタント陣。
  3. 案件に参画後もしっかりサポート。

豊富な案件量

フリーランス向けに特化し、業界屈指の案件量を誇ります!週3〜4日の案件や、在宅リモート案件もありますし、その他あらゆる希望をしっかりお伝えください。最適な案件のご紹介をさせていただきます。

優秀なコンサルタント陣

技術に疎く、開発の希望を伝えても響かないエージェント・・・嫌ですよね。アルマサーチにはそのような者は一切おりません!さらに独立にまつわる税金や保険関係に詳しいスタッフが徹底的にサポートさせていただきます。

案件に参画後もしっかりサポート

常駐先が決まった瞬間に、一度も連絡が取れなくなるエージェント・・・いますよね?アルマサーチでは、そのようなことは一切ありません!常に電話やメールは即対応しますし、月に1度のランチミーティングなどから現場の状況を細かくヒアリングし、就業環境改善に尽力いたします。

相談する

▼Swift関連の記事一覧
1, 【Swiftのフリーランス案件情報付き】仕事やエンジニアの将来性・学習方法!
2, 繰り返し処理に使えるSwiftのfor文とfor-in文の便利な使い方まとめ
3, 条件分岐に便利なSwiftのSwitch文の使い方まとめ
4, アプリ開発でよく使うSwiftの4つの文法を解説します
5, Swiftのoptional型を使いこなすための7つのポイント
6, Swiftで文字列を扱うためのstring型の使い方
7, Swiftでの配列の宣言・初期化・代入・参照の方法まとめ
8,(この記事)実際の開発現場でのSwiftの変数・定数の使われ方を解説します
9, Swiftでif let文を使って出来ることとguard letの使い分けに関して
10, 開発現場でよく使うSwiftのif文の条件分岐をまとめました
11, SwiftにおけるTupleの使い方とわかりやすく解説します
12, 初心者にオススメのSwiftのサンプルコードをまとめてみました
13, SwiftのString、Int、Doubleの型の変換方法をまとめました
14, 開発現場で役に立つSwiftのクロージャの使い方
15, Swiftでwhileを使って上手に繰り返し処理を行おう
16, Swiftで文字列の長さをチェックするのにlengthを使ってみよう
17, Swiftのdictionaryの使い方と初期化方法をまとめました
18, Swiftの値渡しと参照渡しに関するまとめ
19, Swiftで参照渡ししたい時のinoutの便利な使い方
20, Swiftでfor-in文でindexを使いたい時の方法まとめ
21, Swiftでのクラスとstruct(構造体)の使い分けを解説します

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する