++C++; // 未確認飛行 C

Google
Web ufcpp.net

変数と式

目次

キーワード

概要

数学では、“整数 n”とか、“実数 x”などといった変数を用意し、 “ ax2+ bx + c ”といった式を用いて計算を行います。 それと同じようにプログラミングでも、まず、変数を用意し、式を並べて計算を行っていきます。

変数

数学では“整数”とか“実数”といったさまざまな種類の「型」が存在します。 「n は整数に使うことが多い」といったような暗黙の了解も存在しますが、基本的には、「整数 n」といったように、「型」を明示します。

数学の場合と同様に、プログラミング言語にも変数の「(type)」というものが存在します。 特に、C# では各変数は必ず「型」を明示的に指定して宣言してやる必要があります。 以下に例を挙げます。

bool   b; // 論理値型の変数 b
int    n; // 整数型の変数 n
double x; // 実数型の変数 x
char   c; // 文字型の変数 c
string s; // 文字列型の変数 s

左側の boolint などが変数の「型」で、 その右側の bn などが変数名になります。 intdoublestringなどは、C# にもともと用意された変数の「型」(これを組込み型 (embedded type)という)です。

C#の組込み型の型名については 「組込み型」 で説明します。

リテラル

リテラル(literal: “文字通りの定数”という意味。直定数などと訳されることもある。)とは、要するに、「10」や「4.56」というように、直接ソースファイル中に値が書かれた定数のことです。

bool   b = true;    // 論理値リテラル
int    n = 26983;   // 整数リテラル
double x = 10.362;  // 実数リテラル
char   c = 'a';     // 文字リテラル
string s = "文字列"; // 文字列リテラル

ここで使われている = は代入を意味し、左辺の変数に右辺の値を代入するものです。 詳しくは次節の式と文で説明します。

リテラルの書き方の詳細は 「組込み型」 で説明します。

型推論

Ver. 3.0

C# 3.0 から、var キーワードを使って、型を明示せずに変数を定義できるようになりました。

var b = true;    // 論理値
var n = 26983;   // 整数
var x = 10.362;  // 実数
var c = 'a';     // 文字
var s = "文字列"; // 文字列

このとき、変数の型は右辺の値から推論されます。 この例の場合、b は論理値ですし、n は整数になります。

var キーワードを使った変数の定義は、あくまで型推論です。 右辺値がない(推論の手がかりがない)場合には var を使うことは出来ません。 また、「どんな型でも代入できる変数」を作れるわけではありません。

var x; // これはコンパイルエラー
x = 1;

また、var で宣言した変数の型が途中で変わることもりません。

var n = 0; // この時点で n は int になるので、
n = "";    // これはコンパイルエラー

ちなみに、var の利用は、ソースコードの可読性を下げる可能性もあって、乱用はあまり推奨できません。 参考: 「[雑記] 型推論の是非」 。

識別子名

変数など、プログラマが自由に名前を付けることの出来るものを識別子(identifier)と呼びます。 識別子の名前は以下のルールでつける必要があります。

  • if や while などの C# のキーワードは利用できない。
  • 先頭の文字は、_ (アンダーバー)もしくは letter-character でなければならない。
  • 先頭以外の文字は、letter-character、decimal-digit-character、connecting-character、combining-character、formatting-character のいずれかでなければならない。
  • 変数名の前に @ を付けるとキーワードも識別子名として使用できる。コンパイラには @ は無視される(x という変数と @x は同じものとして扱われる)。
  • 識別子名には Unicode エスケープシーケンス(\xxxx という書式で4桁の Unicode を書いたもの)も利用できる。

letter-character とは、クラス Lu、Ll、Lt、Lm、Lo、または Nl に分類される Unicode のことで、 アルファベットや仮名漢字などの文字のことです。 同様に、 decimal-digit-character はクラス Nd のUnicode (数字)、 connecting-character はクラス Pc の Unicode (ハイフンなど)、 combining-character はクラス Mn, Mc の Unicode、 formatting-character はクラス Cf の Unicode です。

いろいろとややこしいことを書きましたが、簡単に言うと、 先頭には _ もしくはアルファベット(ソースファイルを Unicode で保存すれば仮名漢字も)、 先頭以外にはそれに加えて数字を使える と考えてください。

式と演算子

変数の用意が出来たら式を立てて計算を行っていきます。 それでは具体的な例を見ながら説明して行くことにしましょう。

int a = 3, b = 5, c, d; // 整数型の変数を4つ用意
c = (a + b) / 2;        // c に a と b の平均値を代入
d = a * b;              // d に a と b の積を代入

この、c = (a + b) / 2 とか d = a * b という部分が(expression)です。 式は、変数、リテラル、演算子などで構成されます。

演算子(operator)とは、数学でよく使う +-×÷ などのことです。 (ただし、C# では、 掛け算のために * を、割り算のために / を使います 。また、代入のための = も演算子の一種です。) C# では、数学などで使う記法とほぼ同じ書き方で四則演算などが行えます。 加減算よりも乗除算のほうが計算の優先順位が高いのも数学と同じです。

int a = 5 * 2 + 3 * 4; // 掛け算が先。a の値は (5×2) + (3×4) で 22 になる。

C# の演算子の一覧と優先順位は 「組込み演算子」 で説明します。

(statement)とはプログラムの処理の単位のことです。

int c, d;         // 宣言文: 変数を用意。
int a = 3, b = 5; // 宣言文: 変数の宣言と同時に初期化もできる。
c = (a + b) / 2;  // 代入文: c に a と b の平均値を代入
d = a * b;        // 代入文: d に a と b の積を代入

例えば上の例では、4つの文があります。 C# では、文と文は ; (セミコロン)で区切られます。 最初の2つの文は変数の準備と初期化を、残り2つの文は計算を行ってその結果の代入を行います。

また、複数の文を {} で括ることで一塊の文とみなすことができます。

{
  c = (a + b) / 2;
  d = a * b;
} // 2つの文を1つのグループに

このようにグループ化された文を複文またはブロック(block)といいます。

サンプル

using System;

class StatementSample
{
   public static void Main()
   {
      double x, y, z;  // 変数を宣言。

      // xにユーザーの入力した値を代入。
      Console.Write("input x : ");
      x = double.Parse(Console.ReadLine());

      // yにユーザーの入力した値を代入。
      Console.Write("input y : ");
      y = double.Parse(Console.ReadLine());

      // 入力された値を元に計算
      z = x * x + y * y; // z に x と y の二乗和を代入
      x /=  z;           // x =  x / z; と同じ。
      y /= -z;           // y = -y / z; と同じ。

      // 計算結果を出力
      Console.Write("({0}, {1})", x, y);
   }
}
input x : 3
input y : 4
(0.12, -0.16)

演習問題

演習問題は 「組込み演算子」 まで説明した後でまとめて行います。

Transtation into English

[お問い合わせ](q)