変数とは?
プログラムは必ず何かしらのデータを扱います。データを扱う最小単位は「変数」と呼ばれます。変数には、それが表すデータの種類に応じて「型」というものが定められていて、型によってサイズや表現の範囲が異なります。Queek C では、以下のようなデータ型をサポートしています。
型名 | 読み | サイズ | データの内容 |
---|---|---|---|
char | キャラ | 1 バイト | -128〜+127 の整数 |
int | イント | 4 バイト | およそ -21〜+21 億の整数 |
float | フロート | 4 バイト | 有効数字 6〜7 桁の実数 |
double | ダブル | 8 バイト | 有効数字 15〜16 桁の実数 |
string | ストリング | 可変 | 文字列 |
void | ボイド | - | データの実体を持たない特殊な型 |
サイズは、指定した型の変数 1 個がどれだけのメモリを消費するかを表しています。最も基本的でよく使用する型は int 型です。実数 (小数) を使う場合は float または double を使います。string 型は一般の C 言語にはない型ですが、文字列を扱うために使います。当然文字列の長さに応じてサイズは変わります。void 型はポインタや関数の戻り値の型として使用しますが、現段階では気にしなくていいです。そのような型もある、ということだけ知って置いてください。
変数の宣言
変数を使うには、「宣言」を行う必要があります。変数の宣言では、型と変数名を指定します。型は上で述べたもののいずれかで、変数名は使用したい変数を識別するための名前です。型名など、あらかじめ言語仕様によって使用されている名前 (予約語という) は使用できません。変数名に使用できる文字は、英数字 (A〜Z, a〜z, 0〜9) およびアンダースコア _ だけです。また、変数名は数字で始まってはいけません。変数宣言の具体的な書き方は、
型名 変数名;
型名 変数名, 変数名, …, 変数名;
となります。同じ型の変数を複数個宣言したい場合は後者の書き方を使えます。「…」の記号は、変数名とコンマを任意の回数繰り返してよいことを表しています。コンマの後のスペースは見やすさのために入れてあるもので、なくてもかまいません。
変数へのデータの格納
変数にデータを入れることを「格納する」とか「代入する」と言います。さて、変数は宣言しただけでは意味はなく、何かデータを格納しなければ意味がありません。変数にデータを格納するには、次のように書きます。
変数名 = データ;
このように、イコール = の左側に変数名、右側に格納したいデータを書きます (イコールの左右のスペースは見やすさのために入れてあるもので、なくてもかまいません)。データは数値や文字列などを直接書いてもいいですし、数式や変数でもかまいません。数式の場合は計算結果が、変数の場合はその内容が左側の変数にコピー (格納) されます。また、次のように宣言と代入を同時に行うこともできます。
型名 変数名 = データ, 変数名 = データ, …, 変数名 = データ;
代入先の変数の型と、右側の代入するデータの型は互換性がなければなりません。例えば、string 型のデータ (文字列) を int 型の変数に代入しようとするなど、互換性がない場合はエラーとなります。それでは、実際に変数を宣言し、値を格納するスクリプトを書いてみましょう。
変数の宣言とデータの格納
void main(){ // a, b, c という変数を int 型で宣言 // c だけ値を代入する int a, b, c = 1250; // d という変数を float 型で初期化して同時に値を代入 float d = 3.5f; // string 型で変数 str を宣言 string str; a = 10; // a に 10 を代入 b = a; // b に a の内容を代入 str = "テスト"; SysDialog(a); // a の内容を表示 SysDialog(b); // b の内容を表示 SysDialog(c); // c の内容を表示 SysDialog(d); // a の内容を表示 SysDialog(str); // str の内容を表示 }
解説
上のプログラムを実行してみてください。原則として、スクリプトは書かれた順に上から下に実行されていきます。このスクリプトでは、変数の宣言と代入を行った後、各変数の内容を表示しています。なお、変数の宣言文はブロック内でそれ以外の文より前に書かなければなりません。表示された内容は順に「10」「10」「1250」「3.500000」「テスト」でした。まず、a は 10 を代入しているので表示と一致しています。b は、10 が代入された a という変数の内容を代入しているので同じく 10 ですね。c は宣言時に 1250 を代入しています。d の代入は 3.5 ですが、表示の際は小数点以下が余分に表示されます。ところで、d の代入時に 3.5f と書かれているこの f は、3.5 が float 型であることを示すためのものです。この f がないと、3.5 という値は double 型として扱われるので、型を揃えるためにこのように書きます。気を付けてください。str には "テスト" という文字列が代入されていますね。ここでもダブルクォートが必要なので気をつけてください。このへんはまだ余裕ですか?
エスケープシーケンス
今回の内容は以上で大体終わりなのですが、文字列の表現について少し補足があります。鋭い方は気付かれたかもしれませんが、文字列を扱う際にダブルクォートで囲うのはいいとして、ダブルクォートの記号を表示したいときはどうすればいいのでしょう。もちろん、2 個のダブルクォートの中にダブルクォートを書いても、どこが始まりでどこが終わりかわからなくなるのでだめです (よかったら試してみてください)。また、複数行の文字列を扱いたい場合はどうすればよいでしょうか。始まりと終わりのダブルクォートの間に改行があるとエラーになります。
そこで登場するのが「エスケープシーケンス」とよばれる記号です。具体的には円マーク \ です。これは、ダブルクォートで囲まれた文字列の中に特殊な記号を挿入するために使われるものです。ダブルクォートを表すには \" と書きます。改行を表すには \n と書きます。円マーク自体を現すには \\ と書きます。以上を踏まえ、以下のスクリプトではどのように表示されると思いますか?
エスケープシーケンスを使った文字列表現
void main(){ SysDialog("テスト\n \"缶ジュース\" の値段は \\120 です。"); }