プログラマになりたいならカンニングしてよ｜文章題で身に付くプログラミング思考入門️（9/25）

## はじめに

普段あなたは「さっきの」とか「あれ」とか言いますか？
私はつい言ってしまいます。そして大体、聞き返されます。

「さっきのって何のこと？」「あれってどれ？」

私が普段会話する相手はITエンジニアなので、曖昧なことは大抵許されません。
かく言う私も、ほとんどの場合聞き返してます。

エンジニアの会話って、そんな感じじゃないですか？ですよね。
正直言ったら面倒くさいですが、それ以上に「大事だよね」と言う価値観が共有されています。

『文章題で身に付くプログラミング思考入門️』は、日常や文章問題からプログラミング思考を身に付けていく、簡単で身近で、あなたをちょっと輝かせてくれるシリーズです。

今回は、変数とデータの再利用について解説していきます。

## 前回のまとめ
目覚ましスヌーズの繰り返し処理
- あらかじめ、条件とその時の処理を想定して洗い出しておきましょう。
- 処理の順番を考えましょう。
- 必ず終了させましょう。

前回の記事は[こちら](https://qiita.com/yuki-TheWaggle/private/5ce4474a96932dfb6c48)
第一回は[こちら](https://qiita.com/yuki-TheWaggle/items/a6845c85a464c3c46ab2)

## 対象者
- プログラミングの考え方を学びたい人
- プログラミングに挫折したことのある人
- 論理的思考を鍛えたい人
- 文系の人
- エンジニアの思考を理解したい人

## 概要
さて、 [第二回](https://qiita.com/yuki-TheWaggle/items/7ab3f08b9bab012c98ee)の記事でプログラミングについて少し触れました。

> 初期値：初めから決まっている情報を明らかにする
> 定義：どのような情報が欲しいのかを明確にする
> 変数：ある特定の情報を受け取るための箱
> 条件分岐：得られた情報が当てはまったかどうかによって処理を変える
> 代入：欲しいデータを記憶する
> 返り値：結果を知る

データを扱うときは、大きく2つに場合分けできます。

1. データを後で再利用したい
2. 今だけデータが処理できればいい

1の場合はデータを保存しておかないと、後で再利用できませんね。
例えば、ユーザーの名前などです。

逆に2の場合は、計算が終わればデータには消えてもらった方が都合が良いです。
一時的な対応や計算のために使いたい時などです。

データを保存したい時に必要になるのが、

> 定義：どのような情報が欲しいのかを明確にする
> 変数：ある特定の情報を受け取るための箱
> 代入：欲しいデータを記憶する

です。

[第三回](https://qiita.com/yuki-TheWaggle/items/39bba9754feaf483d9d9)でお話しした通り、

> コンピューターは頭が堅いです。
> 言い換えると、コンピューターが受け取る情報は厳格にルール化されています。

なので、コンピュータにデータを保存させるためには、
- これから渡したいデータがどのような種類なのかを **定義** し、
- データを保存するための箱である **変数** を用意させ、
- その箱には **名前** を付け、
- 箱に入れたいデータの内容が何なのかを明確にし、**代入** して記憶させる

という準備が必要になります。

一つずつ紐解いていきましょう。

### 定義

> これから渡したいデータがどのような種類なのかを **定義**

そうです、データの種類を特定しなければなりません。
なぜなら、データの種類によってコンピュータ側の準備が変わるからです。

例えば、`あいうえお`と`123`を同じものとして扱うことは感覚的にも違和感がありませんか？
`あいうえお` + `123` を計算しようとは思いませんよね。
コンピュータにとっても、`あいうえお` と `123` はデータの種類が別です。

このようなデータの種類を **データ型** と言います。

コンピュータ側の動きとしては、どのくらいのメモリ量をどの場所に確保するか？が変わってきます。

ではデータ型にはどんな種類があるのでしょうか？

代表的なのは、
- 文字列型："こんにちは"
- 数値型：123
などですね。

実は、プログラミング言語によって多少の違いがあります。
わからなかったり迷ったりした時は、あなたの使いたいプログラミング言語の **公式リファレンス** を検索して、データ型を調べましょう。
公式リファレンスとは、プログラミング言語の辞書のことです。そこに全て載っています。

**見ながらやったらいいのです。**
公式リファレンスを使わないプロはいません。ここが学校のテストと全く違う所です。

#### カンニングする方が偉いです。カンニングしながらやってください。

正しい情報を獲得して、その場で試す。これが、早くプロレベルに到達するための近道です。

簡単に説明してくれている記事はたくさんありますが、多くの場合は執筆者の解釈が含まれます。たくさんの人の解釈を知ることはとても良いことです。あなたの世界を広げてくれます。

ただし、あなたが絶対的に信用している相手でなければ、そのコードを鵜呑みにしない方が得策です。**公式リファレンスを元に書くようにしましょう。**

### 変数

> データを保存するための箱である **変数** を用意させ、
>
> 変数：ある特定の情報を受け取るための箱

例えば「入れ物を用意してね」と言われたら、「どんな入れ物がいいのかな？」と迷いませんか？
逆に「詰め替えティッシュ用のケースを用意してね」と言われたら、迷わなくていいので助かります。

コンピュータも同じです。
「このデータ型用のメモリを用意してね」と頼む必要があります。

### 名前

> その箱には **名前** を付け、

後で使いたいデータは、人間とコンピュータとが共通して使う明確な名前が必要です。
変数の名前の場合は、そのまま **変数名** と呼びます。

「さっきの」とか「あれ」だと何を指すのかが不明確になりますね。
人間の場合は文脈で判断できたりします。AIも割と正確に推測してくれたりしますね。

ただし、プログラミングの世界では曖昧さは許されません。
特に、間違えると重大な損害を引き起こすデータを扱う場合もありますから、厳格に名前を管理し、正確に参照することが必要です。

そして、名前の付け方も重要です。
変数名を読んで、どんなデータが中に入っているのか予測できるような名前にしましょう。
現場ごとに命名ルールが定められている場合も多いでしょう。

**名前は、プログラミングの世界でもとても大事です。**
詰め替えティッシュ用のケースに名前を付けるとして「ティッシュ1・ティッシュ2」とか「太郎・花子」とかはイマイチですね。
知っている人にしか通じませんから。
例えば「リビング用ティッシュ・寝室用ティッシュ」と名前を付けてみたら、「リビングで使うためのティッシュなのかな。リビングに置いてあるんじゃないかな」と予測できます。

### 代入

> 箱に入れたいデータの内容が何なのかを明確にし、**代入** して記憶させる

代入とは、用意した変数に、実際にデータを入れて記憶させることです。
「リビング用ティッシュ」と言う名前の変数も、用意しただけでは中身が空っぽです。
使うためには、ケースに詰め替えティッシュを入れる必要がありますね。

プログラミングのコードだと
```python
living_room_tissue = "詰め替えティッシュ"
```
こんな感じに書くことが多いです。
#### 数学と違って、`=`は左辺と右辺の等価を表すのではなく、**左辺に右辺の値を代入しなさい**という命令です。

まとめます。

- 定義：データ型を明示
- 変数：データを記憶させるためのメモリを確保
- 名前：後で呼び出すためにつける
- 代入：実際にデータを入れて記憶させる

ティッシュで例えます。

- 定義：`詰め替えティッシュ`を入れる
- 変数：`詰め替えティッシュ用のケース`に入れる
- 名前：`リビング用ティッシュ`と名付ける
- 代入：`リビング用ティッシュ`に`詰め替えティッシュ`を入れる

これで「リビング用ティッシュちょうだい」と言ったら、ティッシュが使えるようになりましたね。

次回は、文章の構造をプログラムにしてみます。

## まとめ
プログラミングでは、
- カンニングする方が偉いです。カンニングしながらやってください。
- 数学と違って、`=`は左辺と右辺の等価を表すのではなく、**左辺に右辺の値を代入しなさい**という命令です。

## 最後に
ここまで読んでくださってありがとうございます！
少しでも役に立ったら「いいね」をください。続ける励みになります。
反応をもらって記事を良くしていきたいので、忌憚のない意見をコメントにいただけたら嬉しいです。