変数とは何か、わかりやすく解説してみた【OBGノウハウ】

どのプログラミング言語を学んでいる上でも絶対必要となる知識がいくつかあると思うのですが、今回は初歩の初歩！変数について私なりの解釈と講習会で使用している説明でのたとえ話なんかをまとめてみました！

RPAツールやpythonやjs……どの言語を触っていても必ず付いてくるものですが、逆に言うと理解さえしてしまえば別の言語を触る時にも「アッ……これ、○○でやったやつだ……！」と役に立つ基礎がいくつかあると思っております。
その中で今回は、変数についてまとめてみました！
※今回、変数って何…？というプログラミングにこれから一歩を踏み出すぞ！という方向けに、「変数の概念が何となくわかった気になる」「変数コワクナイ！変数大事！（・∀・）」と思って貰えることを目的として記事を作成しております。
あえて抽象度を高めにしている例え話を用いております。


#変数とは何か
変数とは、データを入れるための箱です。
また、箱には「型」と呼ばれる種類が存在します。
日常生活の中でも、「入れ物」に「中身」をいれることってありますよね。
引っ越しの荷造りだったり、ペットボトルに飲み物を入れたり、スーパーのカゴに食材をいれたり……。

例えば、宅配便が届いたとします。
箱の外側に貼られている伝票には「品名：食品」……丁度お腹もすいたし、何が入っているかな～！　＼パカッ！／
わぁ！あったかそうな毛布が出て来た～！

……なんでやねんっ……！毛布は食べられないわ！

例えば、食事の時。
お茶碗の中に味噌汁が、マグカップの中にほかほかの白米がよそられて提供されました。

……なんでやねんっ……！（２回目）

何が言いたいかと言いますと、入れ物と中身が一致していないと戸惑っちゃいますよねって話です。
我々人間でさえ戸惑うのですから、より繊細なプログラミング言語はもっと戸惑ってしまいます。

変数を扱う際には型の概念が必須事項になります。具体的な型の名称や種類については後述します！

#変数があることのメリット
さて、変数＝データを入れるための箱、と言うのは理解頂けたかと思います。
じゃあプログラミングをする上で、なぜ変数という型が必要なの？という解説をしていきます。

突然ですがここでまた、例え話をしていきます。

まず、カレーを作るプログラムを作りたいとします。
今回のカレーに使用する材料はじゃがいも、ニンジン、玉ねぎ、鶏肉だとします。
カレーを作るプロセスを大まかに書き出すと、こんな感じでしょうか。
細かい作業は色々ありますが、今回はあえて省いております。

![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/0c5ac1ca-09aa-6a02-c870-95129e73bd26.png)
![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/2755896c-07f7-24c3-a29a-6b5e63b757c4.png)

この状態でも確かにカレーは作れますが、色々と不便な場所があります。

##汎用性の向上

例えば、今日はカレーの気分じゃないんだよな、肉じゃがが食べたい……。そう思った時に変数を用いていないと、肉じゃがのプログラムを１から作らなければいけません。
もしくは２から４の「じゃがいも、ニンジン、玉ねぎ、鶏肉」をすべて「じゃがいも、ニンジン、玉ねぎ、牛肉、しらたき、しいたけ」と変えなければいけません。ちょっと面倒ですし、我々人間はどうしてもうっかりしてしまう生き物なので変更漏れが出てしまうかもしれません。
そんな時に便利なのが変数です！まずはカレーのプログラムの、１から４のプロセスに１つ追加をして、変数「材料」を使用して書き換えてみます。
※関数・オブジェクト指向での解決は今回考えておりません。変数の使い方だけに焦点を絞っています。
![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/514667a0-7a28-d30a-f738-57e66a64762b.png)
そして、肉じゃがが食べたい……と思ったら、「１．材料＝じゃがいも、ニンジン、玉ねぎ、鶏肉とする」の部分を「１．材料＝じゃがいも、ニンジン、玉ねぎ、牛肉、しらたき、しいたけとする」とだけ変えてしまえば良いわけです。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/7c29cc09-83b3-ca0f-4be1-e826481e9fed.png)

##メンテナンス性の向上
扱う材料の内容がカレーの材料から肉じゃがの材料に変更になった……など、データの変更があった際はステップ１の部分だけを変更すればいいのでメンテナンス性も向上しますし、変更漏れの可能性を低くすることも出来ます。

##可読性の向上
変数の名前に一目で見て内容が察することが出来るような名前を付けておけば、コードの解読も容易になり可読性が一気に向上します。
変数の命名には規則があるので、それについてはまた後日、詳しく解説していきます。
#変数（データ）の型について
さて、変数が便利な事は伝わったかと思います！
繰り返しにはなりますが、変数はデータを入れる為の入れ物になります。日常生活で周りを見まわした際に段ボール、カゴ、お茶碗、タンブラーなどなど……色んな種類の入れ物があると思います。そしてその入れ物に適したものを入れる必要があると冒頭でも記述しました。この入れ物の種類の事を「変数の型」と言います。

ここでは代表的な型を紹介していきます。
取り扱えるデータの種類はどの言語も大体同じですが、表記が異なる場合があります。
今回はpythonとUiPathに焦点を当てていこうかと思います。
ちなみに、pythonは変数に値を入力すると自動で型が判定されます。
UiPathに関しては変数の作成方法によって自動で判定されるものもありますが、基本的には自分で変数を作成した際には自分で型を設定する必要があります。

##文字列を扱う
str型（python）
変数名 = ‘ オブジェクティブグループ ’ ;
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/a8e15f7e-af84-c2ff-c005-c9abbb50f9ba.png)
string（UiPath）
変数名 = “ オブジェクティブグループ “
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/68138b74-3b93-c803-9657-365759771de0.png)

##数字を扱う
整数
int型（python）
変数名 = 123 ;
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/97bcab82-8623-5089-9617-ab73408f1e5a.png)
int32（UiPath）
変数名= 123
![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/6799f100-eaba-ad15-9a73-cafcc741e7f0.png)

小数
float型（python）
変数名= 1.234 ;
![キャプチャ5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/0c26f32e-8cd6-d0c1-7eff-639abb69a45f.png)
double（UiPath）
変数名= 1.234
![キャプチャ6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/b355ac7b-d664-d42f-92fc-0c8fcdd84baa.png)

##真(true)か偽(false)を扱う
bool型（python）
変数名 = True ;（もしくはfalse）
![キャプチャ7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/ee1a9568-c1a3-9667-1ab8-c6b05c4e5c4b.png)

boolean（UiPath）
変数名= True（もしくはfalse）
![キャプチャ8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/7940916b-722d-c638-ab35-84c6d42c616f.png)

##複数のデータを扱う
list型（python）
変数名 = [ ‘ apple ’ , ‘ orange ’ , ‘ banana ’ , ‘ peach ’ ] ;
![キャプチャ9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/349478ad-ffe1-cb4c-792d-10e63d78a790.png)
tuple型（python）
変数名 = ( ‘ apple ’ , ‘ orange ’ , ‘ banana ’ , ‘ peache ’ ) ;
![キャプチャ10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/5f29306f-9bb3-5103-3fc1-e4b8ba87091c.png)
dictionary型（python）
変数名 = { ‘ fruit ’ : ‘ apple ’ ,’ ID ’ : ‘ 001 ’ , ‘ name ’ : ‘ tochiotome ’  } ;
![キャプチャ11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/a3b9f909-8a0e-09bc-24f9-54b798f1df0f.png)
Array of [ T ]（UiPath） 
変数名= {  “ apple” , “ orange “ , “ banana ” , “ peach “  }
※変数名(数字)で何番目のデータを表示が出来る
![キャプチャ12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/514b030a-bc1e-b76a-a171-3753222def95.png)

##UiPath独自の型

Data Table  =  ExcelやCSVからデータを読み込みしたり、書き込みしたりする際に使用する
Generic Value  =  文字列型と数値型など複数の型を持つことができる超チート型。困ったらとりあえずGeneric Valueを使っておけばイケる……かと思いきや、チートだからこそエラーの原因になることも。こいつだけ使えればOKという訳ではない…。

変数の宣言の仕方は言語によって異なるので、自分がよく触る言語の変数の仕方については手を動かしている内に身についてくるかと思います。
次回は変数の命名についてもまとめてみたいと思います！