前回の勉強「【C♯初心者】文字列と数値の扱い方を覚えよう!」のつづき。

??
変数ってなに?

C♯にはいろんな文法規則があるらしい。
変数はその中の基本中の基本のようだ。
どんなプログラムを作るにも必ず使うみたいだぞ。

んん〜〜
をん、お散歩行ってくる。

ダメだ。
ここにいろ。
プログラミングの勉強はここからが楽しくなってくるんだぞ。

おお!
目次
変数とはなんだ?
一般的なプログラムでは、その利用者が入力した値を使ってなんらかの処理をする。

ふむふむ。
例えばゲームでいうと「主人公の名前を入力する」ことだな。
その処理をするには、入力した値を一時的に記憶(保管)しておく必要がある。
その仕組みを「変数」という。
変数は、数値や文字列などを一時的に保管する「箱」のようなもの。
この箱はコンピューターのメインメモリ上に作成(確保)される。
変数(箱)は何個でも作ることができる。
そしてコンピューターがその個々の箱を特定できるように、箱に名前をつける必要がある。
この変数(箱)の名前を「変数名」と呼ぶ。
変数ひとつひとつの箱には一つの値しか入らない。
C♯では変数(箱)にどのような種類の値を入れるのか、箱を作る際に決めておく。
例えば文字列の変数(箱)には文字列しか入れられないし、整数用の変数(箱)には整数しか入れられない。
これはプログラムのバグの発生を防ぐ上でもとても重要な機能である。

確かに・・・
文字列も数値も全部同じ箱に入れてしまったら足し算や引き算ができなくなってしまうな。

そうだよね。
「をん」+「1」÷「にゃ」とか絶対エラーになるよね。
変数の基本的な使い方
以下、変数に入れた値を表示するだけの簡単なプログラムの例
using System; namespace MySample { class Program { static void Main(string[]args) { int age; age = 10; Console.WriteLine(age); } } }
このプログラムを実行すると・・・

10
と表示される。
注目する箇所はMainメソッド内の3行(9〜11列)。
age = 10; ②
Console.WriteLine(age); ③
この部分。
変数の基本的な操作は、上の図の例を上から順番に見ていくと
①変数を用意する
「age」という名前で整数型の変数(箱)を用意する
②変数に値を入れる
「age」変数に「10」を入れる
③変数の値を取り出す
「age」変数の内容を表示する
この3つの操作が示される。
以下、①〜③を具体的にみていくと・・・
①変数を用意する
↑これが変数を用意しているところ。
「int」は変数の型を示すC♯のキーワード。
(integerの先頭3文字を取ったもので「整数」を表す)
「int」は、-2,147,483,648〜2,147,483,647までの整数を扱うことができる。
「int」を使って用意した変数を「int型の変数」という。
今回の例では「これからint型の値を扱うageという名前の変数を扱います!」
と宣言しているということ。
これを「変数の宣言」という。
変数の名前「変数名」はプログラマーが自由に決めることができる。
一般的な変数の宣言は、
という書式で行う。
②変数に値を入れる(代入文)
この部分。
これは「変数ageに、10という値を入れなさい!」という意味。
ここでいう「=」は「等しい」という意味のイコールではなく、
「値を変数に入れろ」という命令になる。
変数に値を入れることを「代入」と呼ぶ。
そしてこの1行を「代入文」という。
代入文の一般的な書式は
となる。
右辺の「値」には数値以外にも文字列、変数、式などを書くことができる。
変数を宣言してから最初に値を代入することを「変数の初期化」と呼ぶ。
これまでの例では
age = 10;
と2行で表記していたけど、これを
と1行で書くことも可能。
※変数の宣言と初期化を同時に行える
C♯では、変数に値を設定しないまま(初期値を与えないまま)利用することは不可能なので、
最初から1行で書いて変数の宣言と初期化を同時に行うことが推奨されている。
つまり、最初の例で書いた
static void Main(string[]args) { int age; age = 10; Console.WriteLine(age); }
ではなく
static void Main(string[]args) { int age = 10; Console.WriteLine(age); }
と書くのが推奨されるということ。
どっちも出力結果は同じだけど、2番目のほうが短いしコードがスッキリ!
③変数の値を取り出す
この部分。
変数とは、最初に説明した通り
「入力した値を一時的に記憶(保管)しておく」
「コンピューターがその個々の変数(箱)を特定できるように、箱に名前をつける」
というのがポイント。
「変数の値を取り出す」とは
変数(箱)に代入(記憶)した値を、変数名(箱)を指定して取り出すということ。
なので、値を取り出すときは単に変数名を書くだけでOK。
今回の変数名は「age」なので、
と書いて

10
と表示させることができる。
数値と文字列を組み合わせる
上の例では

10
とだけ表示させたけど、
「年齢:10」のように文字列と組み合わせて表示させることもできる。
と書くと、

年齢:10
のように、
文字列の{0}が、変数ageの値に置き換えられて表示される。
その他の例として、
のように、
文字列と文字列の間に{0}を指定することもできる。
また、置き換える変数が複数ある時も対応可能。
例えば・・・
int number = 5;
Console.WriteLine(“{0}歳の人は{1}人います”,age, number);
と入力すると

10歳の人は5人います
と出力される。
このように、
{}内の数値は、置き換え対象の番号を示す。
{0}は0番目のage。
{1}は1番目のnumber。
0番目??
と違和感があるかもしれないけど、プログラミングの世界ではC♯に限らず多くの言語は0からの順番で始まる。

なんか難しくなってきたね。

読んでるだけだと難しく感じるが
実際に入力しながら勉強すると「なるほど」って思うぞ。
文字列型(string型)の変数の場合
これまでの例は「int型(整数)」。
次は「string型(文字列)」の変数の例。
stringは文字列型を表すキーワード。
string name; name = "をん" Console.WriteLine("{0}は散歩へ出かけた",name); Console.WriteLine("{0}はつまづいて転んだ",name);
と入力すると

をんは散歩へ出かけた
をんはつまづいて転んだ
と出力される。

何この例。
痛い。

キーワードが「string」に変わるだけで、やってることは「int」と同じだな。
「int」が数字を入れる場合。
「string」が文字列を入れる場合。
これで使い分ければいいわけだ。
「string」も「int」と同じで、
name = “をん”
この部分を
と1行で書ける。
「string」は文字列なので「” “」で囲うのを忘れずに!
変数の値を変更する(再代入)
変数は一度設定した値を後から変更することができる。

「変数」だけに!
以下のコードは、
一度初期値を与えた後に、別の値を代入しているコードの例
string name = "をん"; //←変数nameを"をん"で初期化 Console.WriteLine("{0}は肉を見つけた!",name); name = "にゃ"; //←name変数に別の値を再代入 Console.WriteLine("{0}は肉をゲットした!",name);
これを実行すると

をんは肉を見つけた!
にゃは肉をゲットした!
と表示される。

をんが見つけたのに〜
変数には1つの値しか記憶ができない。
なので、nameに”にゃ”を代入した時点で最初の”をん”はnameから消えることになる。
つまり・・・
string name = "をん"; Console.WriteLine("{0}は肉を見つけた!",name); name = "にゃ"; Console.WriteLine("{0}は肉をゲットした!",name); Console.WriteLine("{0}は肉をおいしそうに食べた!",name); Console.WriteLine("{0}は残った肉を持って帰った!",name);
これを実行すると

をんは肉を見つけた!
にゃは肉をゲットした!
にゃは肉をおいしそうに食べた!
にゃは残った肉を持って帰った!
と表示される。

全部「にゃ」になったな

うおおおおん
ちょっと分けて〜〜
演算した結果を変数に代入する
演算した結果を変数に代入することも可能。
コードの例
int height = 8; int width = 5; int area = height * width; Console.WriteLine("面積:{0}m2",area);
これを実行すると

面積:40m2
と表示される。
このように、計算した結果を変数の初期値として与えることも可能。
varを使った変数の初期化
これまでは以下のように「int」や「string」の型名を使用した例。
string name = “をん”;
このように変数の宣言と初期化を1行で書く場合は
「var」というキーワードを使って次のように書くことができる。
var name = “をん”;

すごい!
「int」と「string」が両方とも「var」になったよ!
なんで?
これは、
「age」に入っている「10」は整数なので「int」だな。
「name」に入っている「をん」は「” “」で囲まれているから文字列だ。「string」だね。
と判断することができる。
なのでC♯ではわざわざ「これはint型」「これはstring型」と区別して書く必要がないように「var」というキーワードが用意されている。
この機能は、C♯を扱うプログラマーからの要望で改良された箇所の一つだそう。
最初に勉強した通り「int」「string」で表記しても良いけど、最近では「var」を使う書き方が一般的。
専門用語ではvarで宣言された変数を「暗黙的に型指定されたローカル変数」という。

「var」って便利だね。
カメレオンみたい。
最初からvarで教えてくれたら良かったのに〜。

「int」も「string」も覚えておかないとダメだろう。
基本も知っておかないとプログラマー同士での会話ができないぞ。

は〜い。
varを使った変数の初期化の一般的な書式は
右辺の初期値には、「数値」「文字列」「変数」「式」などを書くことができる。
「式」は「文」の一部を成す構成要素で必ず何らかの値を持つ。
例えば「5 / 2」(←5÷2のこと)や「height * width」などの計算式も式の一種で、計算結果が値となる。
変数に代入できるものは全て式であると考えてOK。
文法的には「8」「num」も式という位置づけ。
注意として、宣言と初期化を2行に分けて書く場合はvarは使えない。
例えば
age = 10;
これを実行するとエラーになる。
これ以降の学習では基本的に「var」を使います。
varを使った変数の初期化(キーボードからの入力)
次のソースコード例は、例えばゲームで主人公の名前を入力する時に使うコード。
Console.WriteLine("名前を入力してください"); var name = Console.ReadLine(); Console.WriteLine("勇者{0}の冒険が始まる!",name);
2行目の「Console.ReadLine」はユーザーがキーボードから入力した文字の1行分を読み取る命令。
読み取った1行分のデータが文字列として返ってくる。
例えばユーザーが名前を「をん」と入力すると・・・

名前を入力してください
をん(Enterキー)
勇者をんの冒険が始まる!
となる。
この例では、ユーザーが文字を入力してEnterキーを押すと、
入力した文字が「name」に代入される。
つまりnameはstring型ということになる。
なのでもしキーボードから入力された値が「123」など数字であっても”123″という文字列としてnameに代入される。

をんの冒険はこれからだ!

やめろ、変なフラグを立てるな。
変数名の付け方
今回の勉強のラスト!
変数名の付け方について。
変数名はプログラマーが自由に決めることができるが、ルールがある。
ルールに従わないとエラーになるので注意。
変数名の付け方のルール
・数字から始まる変数名はNG(先頭以外ならOK)
・C♯が定めた予約語は使えない(stringとかclassはNG)
※予約語については別記事で詳しく
[NG例]
・middle-name
・1st
・int
[OK例]
・colour
・middleName
・_food
・season7
ルールではないけど推奨されていること
・2つ以上の単語を繋げる場合は2番目以降の単語の先頭を大文字にする
〈例〉codeName
※code_nameでも良いけど、アンダースコアで繋ぐのはほとんど使われない
・日本語は避ける(プログラミング言語は世界共通の言語なので)
因みに・・・
「middleName」のような、先頭が小文字、2番目以降の単語の先頭が大文字の書き方を「キャメルケース」
「MiddleName」のような、先頭も大文字にした書き方を「パスカルケース」
「middle_name」のような、アンダースコアで繋げた書き方を「スネークケース」という。

えーっと
var name1 = “をん”;
var name2 = “にゃ”;
Console.WriteLine(“{0}と{1}は仲良くお肉を食べた”,name1,name2);
で、出力すると・・・
「をんとにゃは仲良くお肉を食べた」!
できた!

・・・なかなかやるな。
コメント