C# 変数

C#

変数

変数とは、データをメモリに記憶するために必要なもので、データ保管用の箱のようなものをイメージするとわかりやすいかと思います。

そのデータ保管用の箱である変数を使うためには、決めるべき2つのことがあります。1つは、箱の種類。もう1つは、箱の名前です。

一般的に、箱の種類のことを、「変数の型」といいます。また、箱の名前を「変数名」と呼びます。この2つをプログラムの中で決めることによって、自動的に箱の場所と大きさが割り当てられます。箱の場所のことを「アドレス」と呼びます。

この変数を使うことでプログラムの中のデータのやり取りを行うことができるようになります。

変数名

変数名には、次のルールがあります。

変数名のルール
  • 英字(アンダースコア[ _ ]を含む)、又は、数字で作る
  • 先頭文字は、英字のみ可能である
  • 大文字と小文字は異なるものとして扱う
  • 一般的に変数名は、小文字、記号定数は大文字で記述する
  • 予約語は変数名に使用できない

予約語とは、C#で使用される型の名前、制御文、修飾子の名前になります。

予約語

int,char,long,short,float,double,signed,unsigned,void,typedef,

struct,union,enum,auto,register,static,extern,const,volatile

if,else,switch,case,for,while,do,goto,break,default,return

using,namespace,class,new

代表的な予約語をあげましたが、このような予約語以外で変数の命名をします。

変数の型

変数を定義するときに型を指定する必要があります。この型の指定により、変数の種類と大きさが決まります。C#の変数の型には、次のようなものがあります。

型名サイズ[バイト] 説明範囲 
sbyte符号つき整数  -27~(27-1)
short2符号つき整数  -215~(215-1)
int4符号つき整数  -231~(231-1)
long8符号つき整数  -263~(263-1)
byte1符号なし整数0~(28-1)
ushort2符号なし整数0~(216-1)
uint4符号なし整数0~(232-1)
ulong8符号なし整数0~(264-1)
float4浮動小数点数±1.5×10-45~±3.4×1038
double8浮動小数点数±5.0×10-324~±1.7×10308   
decimal  1610進数データ   ±1.0×10-28~±7.9×1028
bool1論理型true / false
char2文字型0~(216-1)
string文字列型
void型なし

変数の書き方

変数を使うために、宣言文を書きます。

宣言文は、次のように書きます。

変数の型 変数名 ;

最初に入れておきたい値がある場合、初期値を代入しておくこともできます。

変数の型 変数名 =  ;

宣言文の一番最後には、セミコロン「;」を付けます。これにより一文が完結したことをコンパイラに知らせます。このセミコロンがないとコンパイル時にエラーメッセージが出ますので忘れないように注意が必要です。

変数の宣言文の例

int a = 123;

int b;

char a = ‘a’;

string str = “string data”;

double v1 = 1.23;

double v2 = 1.0E+10;

文字をchar型の変数に代入する場合は、シングルクォーテーション「’ ‘」、

文字列をstring型の変数に代入する場合は、ダブルクォーテーション「” “」で文字や文字列を囲います。

浮動小数点数は、小数点を付けて表しますが、e又はEを付けて指数で表現することもできます。この場合、e,Eの後ろに続く数値が10のべき乗の値となります。

改行などの特殊な文字を代入する場合、「\」と「文字」で表現します。

バックスラッシュとエンマークは同じ文字です。

特殊な文字

  \n     改行

  \0     null文字(10進数で0)

  \\     ¥文字

  \’     シングルクォーテーション

  \”     ダブルクォーテーション

  \?     クエスチョンマーク

数値を変数に代入するとき、C#コンパイラでは、小数点数値をdouble型に、整数値を大きさに応じてint型、uint型、long型、ulong型に自動割り当てします。

型を指定したい場合は、サフィックスと呼ばれる接尾文字を付けて明示的に指示します。

サフィックス     データ型
Uuintuint uiData = 123U;
Llonglong lData = 123L;
ULulongulong ulData = 123UL;
Ffloatfloat ftData = 1.23F;
Ddoubledouble dbData = 1.23D
Mdecimal       decimal dmData = 1.23M      

定数

定数とは、プログラムの実行前から値が決まっていて、プログラム実行中にその値が変わらないときに使用するデータです。

誤ってデータを書き換えないようにするため、変更のない値や文字、文字列などに対しては、定数を使用します。

定数は、変数の宣言と同じように書くのですが、変数の時との違いは、型の前に「const」という文言を付けることです。

const 変数の型 変数名 =  ;

定数の宣言文の例

 const int a = 123;

定数の場合は、必ず、宣言時に値を代入する必要があります。

宣言以降、定数データを変更しようとするプログラムがあれば、コンパイル時にエラーとなって通知されます。これにより誤った変更を防止することができます。

シンボル定義

シンボルが定義されているかどうかで、処理などを切り替える場合にシンボル定義を使います。

シンボル定義は、次のように書きます。

#define シンボル名

シンボル名は、一般的に大文字で記述されます。

シンボル定義の記述の最後にセミコロン「;」がないことに注意が必要です。

記号定数の定義例

#define DEBUG

#if(DEBUG)

Console.WriteLine(“Debug “);

#endif

この例では、DEBUGというシンボルの定義があるので「#if(DEBUG)」から「#endif」の間のプログラムを有効としてコンパイルします。したがって、プログラムの実行結果として「Debug」という文字列が出力されます。

「#define DEBUG」という行をプログラムから削除した場合、「Debug」という文字列の出力はされなくなります。

ここで使用している「#if-#endif」は、条件付きコンパイルに使用するプリプロセッサです。

C言語では、「#define 記号定数名 置き換える値」のように記号定数として、#defineを使っていましたが、C#では、この使い方はできません。C#で記号定数を定義するとコンパイルエラーとなります。

列挙定数

列挙定数とは、整数定数を順番に並べたものです。

列挙した整数定数に数値指定しない場合、0から順次整数値が割り振られていきます。

定数で特に数値に意味合いがないものや数値を順番に割り振りたいものを作りたいときに列挙定数を使うと便利です。

列挙定数は次のように書きます。

enum 列挙タグ名データ型 { 定数リスト }

データ型は、char型以外の整数型の指定ができますが、次のように省略も可能です。

enum 列挙タグ名 { 定数リスト }

データ型を省略した場合は、定数リストをint型として扱います。

列挙定数の参照は、

列挙タグ名定数リストの要素

のように列挙タグ名と定数リストの要素をドット演算子で接続して記述します。

列挙定数の定義例

列挙定数のプログラム例

using System;

namespace TestConsoleApp
{
    enum boo { NO, YES }
    enum mon { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine((int)boo.NO);
            Console.WriteLine((int)mon.JAN);
            Console.WriteLine((int)mon.DEC);
        }
    }
}

実行結果

0
1
12

booの「NO」には、「0」、「YES」には、「1」が割り当てられます。

monは、「JAN」に「1」が指定されているので、「JAN」は、「1」が割り当てられ、以降、「FEB」に「2」、「MAR」に「3」といったように整数値が順次割り当てられることになります。

コメント

タイトルとURLをコピーしました