読者です 読者をやめる 読者になる 読者になる

チラシの裏からうっすら見える外枠の外のメモ書き

新聞に挟まってる硬い紙のチラシの裏からうっすら見える外枠の外に走り書きされたようなものです。思いついたときにふらふらと。

プログラミングの基礎 変数について

今日も涼しい一日となった。

朝は雨が降っていたが午後からは晴れたのでよかった。

来週も天気が持ってくれればいいのだが。

さて、今回は少し出先で変数について説明することがあったので、参考程度にその説明を行いたい。

ここに書かれる内容は基本的に確認はしているが、一部誤りがある可能性があるため、その点に関しては予め了承していただきたい。

また、これも事前に断っておくが、今回は出力処理を行っていないため、ディスプレイに結果は表示されない。

もし確認したい場合は、以下のようにprint文を使うことにより確認ができる。

int x = 10;
print(x);

使用言語:Processing

では早速はじめよう。



1.変数とは

まずは変数とは何かを説明しよう。

変数とは、プログラムにおいてデータを記録しておくために用意された空間またはデータに名前を与えたものを指す。

多くの場合において変数を箱と指す場合がある。これは、箱にものをいれることを変数にデータをいれること(以下 代入)に相当するからである。

2.変数の型

変数には記録できるデータの形(以下 型)が基本的に決まっており、以下のとおりとなる。

これらを扱う際、多くのプログラミング言語の場合は区別をつけて処理をするために別の名前を与えて全く違うものとしている。

一般的な場合において、上の型は次のように区別をつけてある。

  • 整数...int / long
  • 浮動小数...float / double
  • 文字列...string

このように、整数と浮動小数には型には種類があることがわかる。

3.変数の利用

変数を利用するには、次のようにする。

// "x"というint型の変数に100を代入する。

int x = 100;

// その他の方法として、"x"というint型の変数を宣言しておき、その後に100を代入することもできる。

int x;

x = 100;

使用言語:Processing

上のようなものはプログラムコードと言われたり、ソースコードと言われたりする。

このように変数を作ることを変数を「宣言」するという。

さて、ここで注意してもらいたいことは、文の終了に";"(セミコロン)が入力されていることだ。

セミコロンは、主にプログラミング言語において命令の終了を意味する。

主に命令は1行ごとに書くことが多いため、文の最後にはセミコロンを入れる癖をつけておくと良い。

ただし、一部命令に関しては文の最後にセミコロンを入れない場合があるため、コードを写す際には十分注意してもらいたい。

上のコードでは、xという変数を宣言して100を代入している。

xの前にintというものが付いているのがわかるだろうか。

intとは先程説明したとおり、int型、つまり整数が入ることのできる整数型であることを示している。

上のコードでは変数xへ100を代入する方法を2パターン説明した。

どちらを選んでも変数xには100という値が代入されている。

このように数値を変数へ代入する場合は上のような方法を利用すればよい。

ただし、一部言語においては浮動小数の代入方法が若干違う場合がある。

例として、C#ではfloat型へ浮動小数を代入する際に最後に"f"といれる必要があるなどする。

また、string型に関しては次のようにして変数へ文字列を代入する。

// "str"というstring型の変数に「Hello!」を代入する。

String str = "Hello!";

// その他の方法として、"str"というstring型の変数を宣言しておき、その後に「Hello!」を代入することもできる。

String str;

Str = "Hello!";

使用言語:Processing

上のコードで注意してほしいことは、文字列の代入には「"」(ダブルクォーテーション)を使う必要があるということだ。

文字列のようにダブルクォーテーションをつけずに代入するとエラーとなるため、注意してもらいたい。

また、これは今回説明のために利用しているProcessingで言えることなのだが、文字列型の宣言は小文字の「string」ではなく、頭文字が大文字の「String」となる。

4.型の注意点

変数は基本的に上のものを利用すればいいが、一部のプログラミング言語においてはこれらの区別が全くない言語が存在する。

正確に言えば、区別がないわけではなく、宣言する際に型を付けなくてもよいということである。

代わりに変数として宣言する場合には、最初に「var」というものや、「my」というものがつくことがある。

基本的に変数を宣言した場合、宣言された変数は型を変えることができない。

例えば、float型で宣言した変数をint型の変数に代入することはエラーとなる場合が多い。

以下がその例である。

// float型の変数fに、1.55を代入する。

float f = 1.55;

// int型の変数iに、変数fを代入する。

int i = f; // ←エラー

使用言語:Processing

だが、代入できないわけではなく、次のような方法をとれば代入したり、式として値を利用したりすることができる。

// float型の変数fに、1.55を代入する。

float f = 1.55;

// int型の変数iに、変数fを代入する。

int i = (int)f;

使用言語:Processing

先ほどのコードと比較して欲しいのだが、変数iに変数fを代入する際に、「(int)」というものを入れているのがわかるだろうか。

これは、fという変数をint型として処理するということを示している。

このように、型の形を変化させることを「キャスト」と言う。

多くのプログラミング言語ではこのキャストを用いて変数を適切な型へ変換して利用しなければならないが、一部の言語においては自動でキャストをしてくれるものがある。

また、このキャストにおいて注意してほしいことが、浮動小数から整数へ戻した際のデータの変化についてだ。

浮動小数型では、少数を含む値が記録されているのに対し、整数型では制約上整数しか値は記録することができない。

そのため、キャストを行うと自動的に整数以外の小数部分はすべて切り捨てられる

もし四捨五入をしてから整数へ変換したい場合は、その都度プログラミング言語が対応している処理で四捨五入をするか、自分で四捨五入するアルゴリズムを考える必要がある。

発展 型の制限

以下は上の内容が十分に理解できている場合に、今後役立つ可能性があるものを参考程度に記載している。

上の内容が完全に理解できていない場合は以下の内容を読んでもわからない可能性があるため、注意して欲しい。

変数には、主にint, long, float, double, stringの5種類があることを説明した。

その他にも変数の型はあるのだが、ここで一つ疑問に思わないだろうか。

「整数(浮動小数)を扱う型はなぜ2種類あるの?」

なぜ2種類あるのかを説明する。

まず、前提的な話をしよう。

PCの内部は無限ではない。

記憶容量が例えば1TBまでであったり、メモリの容量が最大で8GBであるように、無限にデータを扱えるわけではない。

変数でも同じように、データを無限に扱えるわけではなく、一定の範囲内においてデータが保証される。

整数型において、int型では2の31乗-1~-2の31乗までの値が扱える。

なぜ2の累乗であるのかというと、PC内での処理は2進数と呼ばれる方法でなされているからだ。

電気が「流れている/流れていない」の状態だけで処理ができるため、2進数が使われている。

詳しくは今回は説明しないが、PCでは2進数の計算が行われるということだけを簡単に理解してもらえばよい。

さて、上の通りint型が扱える範囲は決まっている。我々のわかりやすい(理解しやすい)数字に直すと、2147483646~-2147483648までの値、つまり上下で21億ずつの値を扱うことができるのだ。

それに対しlong型はどうかというと、2の63乗-1~-2の63乗までが扱える。

累乗の数がおよそ2倍になったことがわかるだろうか。

つまり、long型はint型よりも大きなデータが扱えるのだ。

同じように浮動小数型も、float型は2の31乗-1~-2の31乗までの範囲、doubleはもうお分かりかと思うが、2の63乗-1~-2の63乗までの浮動小数の値が扱える。

浮動小数の場合、範囲が広くなることで、小数点以下の部分をより高精度に扱うことができるのだ。

このように、longやdoubleは非常に大きくかつ高精度なデータを扱うことができる。しかし、その分だけサイズが大きいので必要のない場合は出来る限りintやfloatを使うようにしたほうがよい。

今日はここまでとする。

次回以降はif文とwhile文について説明する。