CS(コンピューターサイエンス)基礎の基礎
現在、CS基礎の基礎を一から学んでいるので、その学習成果のアウトプットに、、、
今回は「変数」
1. 「変数」と「定数」
変数とは、値を代入したり、取り出したりすることができる「箱」のようなものです。
同じように「定数」と呼ばれるものもありますが、変数との違いとして、「変数は格納したデータの上書きができる」、「定数は格納したデータの上書きができない」というものがあります。
そのため、コードを書くうえで、変数と定数の扱い方には注意が必要です。
2. 変数を使用するメリット
変数を使用するメリットとして大きく以下の2つが挙げられます。
メリット①:再利用がしやすく、「保守性」が高まる
上の図から分かるように、何度も使用するデータは変数に代入しておき、何か修正が必要となったら、最初に定義した変数の部分のみ変更すればよいという形にしておけば、見落としなどを防いで保守性を高めることができます。
メリット②:「どのようなデータなのか」を読み手が理解しやすくなり、可読性が高まる
これまた、上の図から分かるように、何度も使用するデータに対して「どのようなデータなのか」を明確に名付けておけば、読み手にとっての可読性が向上し、チームでのコミュニケーションも円滑になります。
3. 変数の使い方
変数の使い方には、主に「宣言」と「代入」というものがあります。
3-1. 変数宣言
変数は使うとき、最初に「〇〇という名前の変数を使いますよ」という宣言をする必要があります。
この時に、重要となるキーワードが「データ型」です。以前の記事でもアウトプットしましたが、コンピューターがそのデータがどのような種類のものなのかを判別できるようにするためのものが「データ型」でした。そのデータ型を変数宣言時に同時に指定する必要がある場合があります。
データ型について解説した記事は以下からどうぞ!!
https://qiita.com/hiddy19970329/items/3da50ae294cddbb2c6e4
3-1-1. 静的型付け言語
変数宣言時に「データ型の指定」が必要な言語を「静的型付け言語」と言います。具体的な言語名は「Java, TypeScript」などです。
これらの言語は変数宣言をすると同時に「データ型」を指定する必要があります。
3-1-2. 動的型付け言語
一方、変数宣言時に「データ型の指定」が必要ない言語を「動的型付け言語」と言います。具体的には「JavaScript, PHP, Python, Ruby」などがあります。
これらの言語はプログラム実行中に自動的に型を判断してくれるため、わざわざ自分で指定する必要がありません。
3-2. 変数代入
変数を宣言した後は、具体的にどんなデータを格納するのかを明確にするために、値を代入する必要があります。この「宣言」と「代入」は基本的に同時に行われることが多いです。
4. 変数がコンピュータで処理される流れ
変数で定義したデータがコンピューター上で実際にどのように使用されるのかを示した図が以下です。
入力したデータを機械が判断できる2進数に変換してメモリに保存するためにまずメモリ内の住所を割り当てる。そしてメモリに保存。CPUがそのメモリアドレスを参照してデータを取得できるようになる。
大まかにはこのような流れになっています。
この「メモリアドレスを割り振る」ことによって、CPUがメモリ上のどこにあるのかを素早く判断できるようになるため、非常に重要な工程だと言うことができますね。
しかし、このようなメモリアドレスを割り振ってメモリに保存し、機械が使用できる言語に変換する作業をわざわざ人間の手でできるわけがありません。このような作業を自動で行なってくれるのが、「コンパイラ」です。
コンパイラは記述されたコードに対して、一括でメモリアドレスを割り当てて機械語に変換します。
5. コンパイラ型言語とインタプリタ型言語
先ほど「コンパイラ」というプログラムのおかげで自動的にソースコードが機械語に変換されると言いましたが、この仕組みを利用している言語を「コンパイラ型言語」と言います。これらの言語はソースコードを書いてからそれらを一括でまとめて機械語に変換します。C++やJavaなどの言語が該当します。
一方、ソースコードをまとめてではなく、書きながら1行1行解釈していく言語のことを「インタプリタ型言語」と言います。RubyやPythonなどが該当します。
6. 学び
変数の学習を通じて、「動的言語」や「静的言語」、「コンパイラ」や「インタプリタ」など理解が曖昧になりがちな言葉に対して理解が深まったように感じます。