[C#入門]第4回 変数について理解しよう(2)

はじめに

前回は、変数の宣言方法やデータ型、変数へのデータの代入方法について学びました。

今回は、データ型を指定しない変数の宣言方法(型推論)と定数、コメントについて学びましょう。

型推論

前回説明した変数の宣言方法は、以下のような書式でした。

データ型を指定した変数の宣言
データ型 変数名;

C#には、もう一つ型推論と呼ばれる変数の宣言方法があります。型推論の書式を以下に示します。型推論による宣言は var というキーワードを使用して、変数に初期値を代入する形で行います。

型推論による変数の宣言
var 変数名 = 初期値;

 

以下に型推論による変数の宣言例を示します。この例では3行目と4行目で型推論による変数の宣言をしています。

3行目は初期値として 0 を代入しています。0 は整数ですので、変数 x は整数型(つまりint型)として自動でデータ型が決まります。

4行目は初期値に「ABC」を代入していますので、こちらはString型になります。

型推論を使用した変数の宣言例(C#)
static void Main(string[] args)
{
    var x = 0;
    var moji = "ABC";

    x = 3;
    moji = "あいうえお";

    Console.WriteLine(x);
    Console.WriteLine(moji);

    Console.ReadLine();
}

 

ほかの言語でも型推論による変数の宣言が可能です。以下に例を示します。VB.NET以外はC#と同じでvarキーワードで宣言をします。

VB.NETの場合
Dim x = 0
Dim moji = "ABC"
Javaの場合
var x = 0;
var moji = "ABC";
Swiftの場合
var x  = 0
var moji = "ABC"

型推論を使用する上での注意点

型推論を使用すると、データ型を書く必要がなくなる分、コード量が減り可読性が上がります。

では、次のように記述した場合は、どうなるのか考えてみましょう。

C#における型推論の例
var x = 0;

x = 3.14;

この例では、型推論で変数 x を0で初期化した後に、3.14 を代入しています。一見すると代入できそうにも思えます。しかし、変数 x は0で初期化をしたのでデータ型は int になります。int は整数しか扱えませんので、3.14は代入できません。よって、エラーとなります。

では、上記例のように 0 で初期化した後に、3.14のような小数を代入するにはどうしたら良いでしょうか?

2つ方法がありますのでみていきましょう。

1つは、前回説明したように小数を代入することができるデータ型を指定して変数を宣言する方法。

double x = 0;

x = 3.14;

もう1つは、型推論の初期値を代入する際に「0」ではなく、「0.0」と記述する方法。初期値として「0.0」を代入した場合は、double型(小数を扱うことができるデータ型です)として判断されます。

 var x = 0.0;

x = 3.14;

定数

C#では変数のほかに定数を使用することができます。

定数とは、プログラム中で値を変更する必要のない、固定値を入れておくための専用の変数です。

例えば、消費税8%を計算するための1.08という値や、円周率の3.14、平成、昭和のような元号を表す文字列などは、プログラム中で変更する必要がないので一般的には定数として扱います。

定数はconstキーワードを使用して宣言をします。

宣言例を以下に示します。

private const double tax = 1.08;

privateというキーワードがついていますが、これはアクセス修飾子と呼ばれるものです。アクセス修飾子については「クラス」の学習時に説明をします。

const以外にもう1つ static readonly キーワードを使用する方法があります。

constは、将来においても変更されないことが保証されている場合に使用します。例えば、円周率3.14はいつの時代においても変わることがないのでconstを使用します。

一方、static readonly は、将来変更される可能性を持つ固定値を管理するのに向いています。例えば2018年7月時点では消費税は8%ですが、今後変更されることが予想されます。このように社会情勢であったり、そのシステムを利用する上で変更が予想されるような場合は static readonlyを使用します。

static readonlyでの定数宣言例を以下に示します。

private static readonly tax = 1.08;

constのバージョン管理問題について

初学者には少し難しい部分もあるかと思いますので、この部分は読み飛ばしていただいて構いません。

C#ではdll(ダイナミックリンクライブラリ)を使用したアプリ開発を行うことができます。

例えば MyLib.dll に以下のように constで定数が宣言されているとします。

public class MyLib {
    public const int luckyNo = 7;
}

このMyLib.dllを使用して、Sample.exeというアプリを作成するとします。

class Program {
  static void Main(string[] args) {
    console.WriteLine(MyLib.luckyNo);
  }
}

この Sample.exe では、MyLib.luckyNo を表示するというシンプルなものです。MyLib.luckyNoは7という値ですから、「7」が表示されますね。

次にluvkyNoを7から3に変更する必要があったため、MyLib.dllを修正してビルドしたとしましょう。MyLib.dllは外部ライブラリなので、Sample.exeはビルドし直す必要はなさそうです。しかし、luckyNoは「3」に変更したにも関わらず「7」と表示されてしまいます。

これは、Sample.exeをビルドした時点で、MyLib.dllのその時点の値が埋め込まれてしまうために起こります。これはconstのバージョン管理問題と呼ばれます。

readonlyキーワードを使用して定数を宣言しておけば、この問題は解決することができます。

実際の開発現場においては、まれにこの問題に遭遇する場合があります。このような場合は定数がconstで宣言されていないかを確認してください。cosntを使用しているdllを修正して組み込む場合には、そのdllを組み込む実行ファイルもビルドし直すようにしてください。

コメント

コメントとは、コード中に書くことができるメモのことです。将来の自分のため、チーム開発している仲間のため、納品先のお客様のためなどに書きます。

コメントは、コード中に記述をしますが、書いたからといって実行するプログラムに影響を与えることはありません。

コメントには「1行コメント」と「複数行コメント」とがあります。

1行コメント

1行コメントとは、文字通り1行のコメントを書くことができます。

1行コメントを書く場合は以下のように先頭に「//」を書きます。この「//」を書いた位置から行末までがコメントになります。

C#での1行コメント
// 1行コメントを書きます。

JavaやSwiftの1行コメントもC#と同様で「//」で書き始めます。VB.NETだけはシングルクォーテーション記号で始めます。

VB.NETでの1行コメント
' 1行コメントを書きます。

複数行コメント

複数行コメントとは、文字通り複数行に渡ってコメントを書く場合に使用します。「/*」〜「*/」の中にコメントを書きます。

C#での複数行コメント
/*
  複数行に渡ってコメントを書くことができます。
 改行を入れて、何行でも書くことができます。
*/

JavaやSwiftも「/*」〜「*/」で複数行コメントを書くことができます。

VB.NETには複数行コメントはありませんので、毎行先頭に「’」書いて複数行コメントを作成します。

VB.NETでの複数行コメント
' VB.NETには複数行コメント専用の記号はありません。
' 毎行先頭にシングルクォーテーションを書いて複数行コメントにします。

次回予定

次回は配列変数について説明します。

C#入門 連載記事



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください