こんちゃっす、ダイブツです。
今回はこれが無くちゃ始まらない!というぐらい使用する「変数」について説明していきます。
こんな結果が出力されるプログラムがあった場合、
たった1か所変更するだけで全部のLEDを点灯させることができます。
この記事で変数の型の違い、使い方に関するあなたの疑問を無くしていくので一緒に学んでいきましょう!
変数とは
まずそもそも変数って何なのかから説明しますね。
よく例えられる例ですが、変数とは数字を入れておく持ち運び可能な箱のようなものです。
主にその箱を色んな箇所で使いたい時に使用します。
で、プログラムではその箱に入れる数字を入れ替えることがしょっちゅうあるんです。
だから「数が変わる入れ物」=「変数」って言われてるんですね。
ただ、変数には1つしかものを入れることができません。
もし他のものを入れたくなったら、入れ替えるしかないです。
この制限を理解した上で変数を使っていく必要があります。
そしてここからは巷のC言語学習サイトで伝えられていない僕の意見です。
この変数には名前を付けられるんですが、プログラマーは変数の名前を見て、どんなことに使う変数なのか判断しています。
xだけのようなよく分からない名前が付いていると、他のプログラマーがプログラムを見た時に「この変数は何に使ってるんだ?!」ってなって混乱しちゃうんですね。
今まで200000行以上のプログラムを読んできましたが、変数名がしっかり付けられているだけでプログラムの読みやすさが段違いに上がることを身をもって感じています。
だから、変数の名前の付け方って実は重要なんです。
マジで変数名の付け方はちゃんとできるようになってほしい!ほんと頼んます。
名前の付け方はどうしたらいいかも、これから説明していきますね。
覚えておくべき4つの変数の型
変数の名前と付ける前に説明しておかなきゃいけないことがあります。
変数には型というものがあって、整数が入れられる箱だったり、小数が入れられる箱だったりっていうのが分かれています。
あとそれぞれに入れられる範囲っていうのも決まってるんですね。
簡単に書くとこんな分類です。
変数の型のサイズを1目で分かるように図にしてみました。
また、よく使う型の順位とプログラムでの書き方、入力範囲を表にまとめるとこうなります。
よく使う順位 | 種類 | 書き方 | 変数のサイズ | 入力範囲 |
---|---|---|---|---|
1 | 整数 | int | 2バイト たまに4バイト |
-32768 ~ 32767 |
unsigned int | 0 ~ 65535 | |||
2 | 整数 | char | 1バイト | -128 ~ 127 |
unsigned char | 0 ~ 255 | |||
3 | 整数 | long | 4バイト | -2147483648 ~ 2147483647 |
unsigned long | 0 ~ 4294967295 | |||
4 | 小数 | float | 4バイト | ±(3.402823466×1038)×1038 |
5 | 整数 | short | 2バイト | -32768 ~ 32767 |
unsigned short | 0 ~ 65535 | |||
6 | 小数 | double | 8バイト | ±(1.7976931348623158)×10308 |
intのサイズで、たまに4バイトと書いたのは、環境によって4バイトのサイズになることがあるからです。
もし4バイトとなった場合は、入力範囲もlongと同じ「-2147483648 ~ 2147483647」入力範囲に変わります。
現役組み込みエンジニアが実践している変数名の付け方
さぁいよいよ変数名の付け方について説明していきます。
まーじでこれは現役の組み込みエンジニアでさえもよく悩むとこですからね~、しっかり身に付けていきましょう。
あ、ちなみに会社によって名前の付け方は細かい違いがあるので、そこは会社に合わせるようにしてください。
僕は派遣社員として2社経験しましたが、どちらも細かい違いはありました。
じゃあまず最初に例を出しますね。
例:int型でLEDの消灯、点灯を示す変数を作る場合
こんな変数を使う場合、僕だったらこう宣言します。
上で書いていた例と同じやつですね。
int iLedOnOff;
さらっと書きましたが、プログラムで変数を使いたい場合は、まず「この変数使うよ!」と書いてあげる必要があるんです。
これを「宣言する」もしくは、「定義する」って言います。
だから上の例だと、「int型のiLedOnOffを宣言した」ってことになるんですね。
ここはオッケーっすね?
そいで、肝心の名前の付け方なんですが、iLedOnOffを4つに分けましょう。
そうすると、
①i
②Led
③On
④Off
の4つに分かれます。
この4つのそれぞれの意味はなんなんでしょうか?
まず最初の①が表しているのはint型です。
int型の先頭文字iを抜き出して付けているんですね。
こうすることで、変数名を見ただけで、「この変数はint型なんだな。じゃあこの数値は代入できるな」と分かるようになるんです。
これが付いていないと、いちいち変数が宣言されている所を探さなくちゃいけなくて、他のエンジニアに面倒な作業をさせてしまうことになっちゃうんですね~。
次に②と③と④に関しては、そのまま英単語を使っているだけです。
ただ、ledonoffのように全て小文字にするとどこから単語の始まりか分からなくなっちゃいます。
なので、単語の区切りが分かるように最初の文字だけ大文字にするとLedOnOffのように書けて、どんな単語をくっついているのか分かるようになりますよ。
因みに、変数に使う単語はあまり見慣れないものは使わない方がいいです。
っていうのも、いちいち単語の意味を調べなきゃいけないようなものを使っても、結局調べる手間ができちゃってめんどくさいですよね?
この、どのぐらいまでの単語ならいいのかっていうのはめちゃめちゃ微妙なとこなんですが、目安としては中学3年生までに習う英単語のレベルで考えておけばちょうど良いと思います。
注意!変数に使える文字
変数名の付け方を説明してきましたが、実は変数名には使っていい文字と使っちゃいけない文字があります。
使っちゃいけない文字を挙げるとキリがないので、使える文字だけ覚えておきましょう。
使える文字はこの4種類で覚えておけばいいです。
・a~z
・A~Z
・0~9
・_(アンダーバー)
あとこの他に、使っちゃいけないもののルールもあります。
これはもし間違えてもエラーが出てしまうだけなので、こんなのがあるんだな~ぐらいに覚えてもらえたらいいですw
「使っちゃいけない変数」
・システムで定義されている単語(色々ある)
・数字で始まる変数(例:123test)
変数名に関してはこんなもんですか。
色々ルールが多くてめんどくさいですよね~。
ま、この辺りは慣れです。徐々に覚えていきましょう。
変数の使い方
それじゃあ、実際に変数の使い方について書いていきますね。
上でも書いたように、変数を使うにはまず宣言をする必要があります。
宣言をするにはこう書きます。
int iLedOnOff;
これが宣言です。
続けて、宣言した変数に1を入れてみましょう。
この変数にものを入れることを代入と言います。
数学でも使う表現ですね。
宣言をした後に、代入をする書き方はこうなります。
int iLedOnOff;
iLedOnOff = 1;
変数を宣言した時、こうすることで、同時に値を代入することもできるんです。
int iLedOnOff = 1;
どっちの書き方をするかは個人の好みによりますね。
正直どっちで書いても問題ありません。
変数のメリットが分かる例
じゃあそろそろ冒頭で書いていた変数を使う例をやっていきましょう。
冒頭で出していた最初の表示はこれでしたね。
この表示は、変数を使って書くとこうプログラムすることができます。
#include "r_cg_userdefine.h"
void main_study(void)
{
int iLedOnOff = 0;
P_GREEN_LED = iLedOnOff; // 緑色LEDを消灯 or 点灯
P_BLUE_LED = iLedOnOff; // 青色LEDを消灯 or 点灯
P_RED_LED = iLedOnOff; // 赤色LEDを消灯 or 点灯
}
これが緑色LED、青色LED、赤色LED全てを消灯するプログラムですね。
LED消灯の指定にiLedOnOffという変数を使っています。
そして、このiLedOnOffに1を指定すると、こんなプログラムになります。
#include "r_cg_userdefine.h"
void main_study(void)
{
int iLedOnOff = 1;
P_GREEN_LED = iLedOnOff; // 緑色LEDを消灯 or 点灯
P_BLUE_LED = iLedOnOff; // 青色LEDを消灯 or 点灯
P_RED_LED = iLedOnOff; // 赤色LEDを消灯 or 点灯
}
変更しているのはiLedOnOffの指定一か所だけですね。
で、このプログラムを実行してみると・・・
ほーら!iLedOnOffを使っていた全てのLEDを点灯することができました!
これが「変数の力」です。
もし、このプログラムで変数を使っていなかったら、P_GREEN_LED、P_BLUE_LED、P_RED_LEDの3つの指定をそれぞれ変更しなきゃいけませんでした。
今回はまだ3つだったから良いものの、これが100箇所変更しなきゃいけないプログラムだったらと思うとゾッとしませんか?
それだけの量を修正するには、手間もかかるし、何より修正を間違ってしまって不具合が入ってしまう可能性も高くなります。
だから、プログラムを作る時には修正が入った時でも簡単にプログラムの変更ができるように(変更箇所が少なくなるように)作っていくことがめっちゃくちゃ大事です。
テストだったら絶対出すっていうぐらい大事なので、普段からそこに意識してプログラミングしていきましょうね。
変わるものは変数、では変わらないものは?
変数については理解してもらえましたね?
実は変数と同じように値を保持することができるものとして、定数というものがあるんです。
「変数と定数は何が違うの?」という声が聞こえてきそうですね。
分かりやすくする為に、違いを表にしてみました。簡単に書くとこうなります。
種類 | 値の代入 | 名前の付け方 |
---|---|---|
変数 | いつでも可 | 大文字小文字混合 型の内容を入れる |
定数 | 宣言時のみ | 大文字と_(アンダーバーのみ) |
表のそれぞれの内容について説明していきますね。
まず表にも書いてある通り、定数は宣言時にしか値を入れることができません。
というのも、定数は「プログラムの実行中に値が変わらないもの」として使用するからです。
しょーじき定数を使わずに、変数に代入する値は直接数字を使って書くこともできます。
ただそうすると、変数の時にも書いたように、他の人がプログラムを読んだ時に意味が分からなくなっちゃうんですよね。
それを防ぐ為に定数を使うのが1つの理由です。
もう1つの理由も変数と似ているんですが、同じ意味合いの数字を複数の箇所で使っている場合に、後から修正する箇所を減らす為ですね。
例えば図形のサイズを定義する時なんかは、定数として宣言するのがピッタリです。
このように共通の数値を定数としてまとめていきます。
そして、定数を宣言する場合はこのように書くんですね。
#define SQUARE_SIZE 50
プログラミング言語によって違いますが、C言語では#defineを先頭につけることで定数の宣言と判断されます。
そして定数名は基本的に全て大文字で付けます。
あと大文字だと単語の区切りが分からなくなる為に_(アンダーバー)も活用することが多いです。
小文字で宣言することもできるんですが、大文字で宣言されることがほとんどなので、定数は大文字にする癖をつけておきましょーね。
結構長くなりましたが、これで今回の変数/定数の内容は終了となります。
気軽にコメントどうぞ!