プログラミングで最も重要なトピックである「変数」を解説します。変数は C# だけでなく、すべてのプログラミング言語にも通じる超重要な内容なので、正しく理解しておくことが必要です。この記事では「変数」を宣言する方法、また変数の基礎的な知識から使い方を紹介します。
変数の基礎
そもそも「変数」ってなんでしょうか?プログラミング未経験者、経験者にかかわらず「変数」という言葉を聞いたことのある人は多いと思います。
「変数」という単語は数学で出てくる単語でした。関数といった単元で出現する言葉ですね。数学における「変数」は「変わる数」という意味でした。つまり「分からない数」「これから変化していく変数」と言っても良いかもしれません。数学では以下のように使われていました。
3 + x = 10
x = 7
これは数学で使われる変数のサンプルですが、上記の式で右辺と左辺をうまく使うことで、xの値を求めることができますよね。このように「わからない数」を数学では「変数」としていました。
それに対してプログラミングで使われる「変数」とは「値を格納(代入)する箱」のようなイメージでとらえておくと良いと思います。プログラミングでは「値」という概念(これをデータと呼んだりもする)がとても重要で、その値をどうやって保持していくかを考えなくてはなりません。
その時に使われるのが「変数」であり、プログラミングにおける「変数」はわからない数ではなく、「わかっている値」になるんですね。ちなみに「数」としていないのは、プログラミングでの変数は「数」だけでなく、様々なデータを扱えるので「値」としています。
変数を使用する方法
まずは前回に作成したアプリをもう一度作成して、それを書き換える形式で変数について学んでいきたいと思います。
文字列の変数のサンプル
ここでは「文字列」の変数を作成します。まずは新規プロジェクトからコンソールアプリケーションを作成して以下を記述します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace App01
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadLine();
}
}
}
「開始」ボタンをクリックして、ちゃんとアプリが起動して期待通りになっているか確認できたでしょうか。確認出来たら上記のプログラムを以下のように「変数」を使用する形式に書き換えてみてください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace App01
{
class Program
{
static void Main(string[] args)
{
string message;
message = "Hello World!";
Console.WriteLine(message);
Console.ReadLine();
}
}
}
これが変数を使った場合のプログラムになります。上のプログラムにおける「変数」は「message」です。もう少しプログラムを詳しく解説していくと、「messageというstring型の変数を用意して、Hello World!と値を設定して画面に表示する」と命令しています。
まず「string message;」の部分は「変数の宣言」と呼ばれる部分です。変数を使用するには「宣言」をする必要があります。つまり「変数を使います」とパソコンに宣言するわけです。また宣言を行う時は、データの種類も合わせて明記する必要があります。上記のサンプルでは「string message;」の部分が変数を宣言している部分です。
また変数には名前を付けて識別しやすくする必要があります。これを「変数名」と呼んでいます。「string message;」の「message」の部分ですね。変数の宣言は以下のようにまとめることができます。
(変数の種類)(変数名);
そして2行目の「message = “Hello World!”;」では、「文字列の変数・messageに対してHello World!を代入する」という意味合いを一行で表しています。これを代入と呼びます。また二回目に変数名が出てきた場合は、変数の種類(ここでは文字列型)を記述する必要がありません。
最後はこれまでと同様に「Console.WriteLine(message);」で画面に文字を表示させています。括弧の中がmessageになっていることに気付いたと思いますが、もともと「Console.WriteLine();」は文字列を画面に表示させる機能なので、文字列(string)である変数・messageは問題なく使用できます。
数値の変数
では次に「数値」の変数について紹介していきたいと思います。新しいコンソールアプリケーションを作成して、以下のようにプログラムを書いて実行してみてください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace App02
{
class Program
{
static void Main(string[] args)
{
int number;
number = 7;
Console.WriteLine(number.ToString());
Console.ReadLine();
}
}
}
画面上に「7」と表示されていれば、正常にアプリケーションが作成されていることになります。上記のサンプルを日本語で書き表すと「数値型の変数をnumberという変数名として宣言し、初期値として10を代入する」という感じです。
変数の種類で数値は「int」というキーワードで表します。「変数の種類はint」で「変数名はnumber」としています。二行目では変数に対して7を代入しています。文字列と違って、数値ではダブルコーテーションで囲む必要はありません。
また、「Console.WriteLine()」の中に「.ToString()」と新しいキーワードが出てきましたね。これは「数値を文字列に変換する処理」と思っていてください。「Console.WriteLine()」の括弧の中は、文字列である必要があるため変換処理をしています。
数学とプログラミングにおける “=” の違い
この回を終える前に少しだけ補講です。プログラミング初心者で混乱することなる内容なので、初めの内に片づけておきたい内容になります。それは「数学とプログラミングにおけるイコールの使い方の違い」です。
数学とプログラミングでは両者とも「=」(イコール)の記号が出てきますが、数学とプログラミングでのイコールの使い方の違いを押さえます。数学とプログラミングでは同じ「イコール記号」でも使い方・意味合いが異なります。
例えば以下のような数式を数学とプログラミングで考えてみます。
x = 10
上記は数学、プログラミングでも使用可能な式になっています。数学でもプログラミングでも「xの値は10」となりますね。また、数学界でのイコールは「右辺と左辺が等しい」という意味合いを持っているので、右辺と左辺を逆転しても意味合いは同じです。
10 = x
上記の場合でも「xの値は10」であることは変わりません。しかし、これはプログラミングでは通用しない式になります。プログラミングの世界では、イコールは「左辺に右辺を代入する」という意味合いになります。
そう考えたときに「X = 10」という式の意味合いは「xに10を代入する」となります。「10 = x」は「10にxを代入する」となり意味が通じません。「10」はいつ、どんな時も「10」でなくてはならないからです。
結論からいうと「プログラミングにおけるイコール記号は”代入”」だと覚えておきましょう。なおプログラミングの世界では、必ずセミコロンをつける必要がありますので、正確には「x = 10;」となります。そのあたりもプログラミングと数学で異なりますので注意しておきましょう。
変数は再代入が可能
変数の知識でもう一つ重要になってくるのが「再代入」という考え方です。プログラミングでは変数に対して再代入が可能となります。これは変数に対して「何度も代入できる」という意味になります。早速、コンソールアプリケーションを作成して動きを見ていきましょう。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace App03
{
class Program
{
static void Main(string[] args)
{
int number;
Console.Write("最初の変数の値:");
number = 10;
Console.WriteLine(number.ToString());
Console.Write("次の変数の値:");
number = 14;
Console.WriteLine(number.ToString());
Console.ReadLine();
}
}
}
上記のソースの中の「Console.Write();」は初めてかもしれませんが、やっていることは「Console.WriteLine();」と同じです。ただ「Console.Write();」は文字を出力した後に改行を行わず、「Console.WriteLine();」は文字出力後に改行をするという違いがあります。
上記のサンプルでは、はじめにnumberという数値の変数に対して10を代入して画面に表示をさせ、numberに対して14を改めて代入して画面に表示させています。同じ変数に値を代入しなおしているので「再代入」と呼んでいます。
プログラミングでは変数に対して値を設定しても、そのあとでさらに変数に値を設定することが可能です。こうした処理のことを再代入としています。モダンなプログラムの組み方では再代入を不可とする考え方もありますが、それはもう少し先の将来に学べばよいでしょう。