変数¶
変数(へんすう、英: variable)は、プログラムにおいて最も強力で重要なツールの一つです。プログラム内でデータを保存し呼び出す手段として働きます。
以下のスケッチファイルは、変数を使用しています。オンボードLEDのピン番号を変数 ledPin
に、数値 500
を変数 delayTime
に保存しています。
int ledPin = 13;
int delayTime = 500;
void setup() {
pinMode(ledPin,OUTPUT);
}
void loop() {
digitalWrite(ledPin,HIGH);
delay(delayTime);
digitalWrite(ledPin,LOW);
delay(delayTime);
}
ちょっと待って、これは #define
がやることと同じですか?答えはいいえです。
#define
の役割は単純にテキストを直接置き換えるだけで、コンパイラにはプログラムの一部としては考慮されません。一方で、
変数
はプログラム内で存在し、値を保存し呼び出すために使用されます。また、変数はプログラム内でその値を変更することも可能で、これはdefineにはできないことです。
以下のスケッチファイルは、変数に自己加算を行い、それにより各点滅後にオンボードLEDの点滅時間が長くなります。
int ledPin = 13;
int delayTime = 500;
void setup() {
pinMode(ledPin,OUTPUT);
}
void loop() {
digitalWrite(ledPin,HIGH);
delay(delayTime);
digitalWrite(ledPin,LOW);
delay(delayTime);
delayTime = delayTime + 200; //実行ごとに値が200増加します
}
変数の宣言¶
変数の宣言とは、変数を作成することです。
変数を宣言するには、データ型と変数名の2つが必要です。データ型と変数名はスペースで区切られ、変数の宣言は ;
で終了させます。
以下の変数を例に取ります。
int delayTime;
データ型
ここで int
は整数型と呼ばれるデータ型であり、-32768から32766までの整数を格納することができます。また、小数点数は格納できません。
変数は整数以外のさまざまな種類のデータも格納できます。Arduino言語(C++を基礎としています)は、以下のようなものに対する組み込みサポートを提供しています(ここには最も頻繁に使用される便利なもののみをリストしています):
float
:浮動小数点数、例えば3.1415926を格納します。byte
:0から255までの数値を格納します。boolean
:True
またはFalse
の2つの可能な値のみを格納し、メモリ内で1バイトを占めます。char
:-127から127までの数値を格納します。コンパイラはこれをASCIIテーブルに一致させようとします。string
:文字列、例えばHalloween
を格納します。
変数名
変数名は任意の名前を設定できますが、いくつかの基本的なルールがあります。
用途を明確に示す名前を付けます。この例では、変数名に
delayTime
と名付けたので、その用途が瞬時に理解できます。barryAllen
という名前でもプログラムは動きますが、コードを読む人を混乱させます。一般的な命名規則を使用する。私が行ったようにCamelCaseを使用することで、
delayTime
におけるTの大文字化により、変数が二つの単語から成ることが明確になります。また、UnderScoreCaseを使用してdelay_time
とも書くことができます。これはプログラムの実行に影響を与えませんが、好みの命名規則を使用すると、コードの可読性が高まります。キーワードは使用しない。"int"を入力するとArduino IDEがそれを特別な用途のある単語であると色付けしてくれるのと同様、変数名としては使用できません。もし色が付いていたら、変数名を変更してください。
特殊な記号は許可されていません。例えば、スペース、#、$、/、+、%などです。英字(大文字・小文字を区別)、アンダースコア、数字(ただし、変数名の最初の文字としては使用できません)の組み合わせは十分です。
変数に値を代入する
変数宣言が完了したら、次にデータを保存します。代入演算子(すなわち =
)を使用して、変数に値を格納します。
変数宣言と同時に値を代入することもできます。
int delayTime = 500;
また、任意のタイミングで新しい値を代入することも可能です。
int delayTime; // 値なし
delayTime = 500; // 値は500
delayTime = delayTime + 200; // 値は700