
では、今回もRubyを学んでいきますよ。今回は変数について学習しましょう

まず、変数が何なのかわかりません

もちろん、わたしもわかりません

あまり馴染みのない言葉ですからね。大丈夫、ゆっくり理解していきましょう。まずは、変数の説明からいきますよ
変数とは


二人ともゲームはしますか?

たまにやりますよ

わたしはむしろ、ゲームしかしてこなかったと言えるくらいです。どや

ゲームをするときに、最初に名前を入れることもありますよね。すると、自分が入れた名前でゲームが進んでいくでしょう。あれが変数です

わたしは、すでに何度も変数を使っていたのか……
他にもゲーム内では、点数が増えていったり、減っていったりします。
ゲーム以外では、Amazonや楽天で買い物をするときに名前を登録しておくと、いろいろな場面で自分の名前が出てくると思います。
Amazonや楽天では、一度ログアウトしてもう一度ログインすると前の状態を引き継いでいますよね。ポイントや残高も引き継いでいるでしょう。
変数の例


では、典型的な変数の例から紹介します
name = “田中一郎”
score = 400
上の例では、nameという変数に”田中一郎”という文字列を代入しています。
下の例でも同じように、scoreという変数に400という整数を代入しています。
=という記号があるので、左辺と右辺が同じなのかな、と思うかもしれません。しかし、Rubyで=は等しいとか同じという意味はありません。必ず代入の意味で使われます。
さらに具体的な例
さて、
name = “田中一郎”
score = 400
print name,”さんの得点は”,score,”点です。\n”
と書くと、
田中一郎さんの得点は400点です。
と表示されます。ここで田中一郎さんに40点入ったとします。これをプログラムで書くと、

name = “田中一郎”
score = 400
print name,”さんの得点は”,score,”点です。\n”
score = score + 40
print name,”さんの得点は”,score,”点です。\n”
のようになります。出力は、
田中一郎さんの得点は400点です。
田中一郎さんの得点は440点です。
のようになります。
score = score + 40
がscoreの値を400から440に変えた行です。

ここまでは大丈夫ですか?

ゲームの話だからか、わかりやすいなぁ
前述のように、scoreとscore+40が等しいという意味ではありません。scoreと40の和をscoreに上書きすることを意味します。右辺と左辺でscoreの値が変わっていることに注意してください。
また、このプログラムでは、nameとscoreの二つの変数が使われていて、別々の働きをしていることに注意してください。このようにプログラムの中では複数の変数を別の役割で使うことができます。
変数名

変数の文字列が違えば別の変数になりますが、どんな文字列でも変数になるわけではありません。

んん? どういうこと?

変数にはいくつかのルールがあるんですよ
- 一文字目は英小文字かアンダースコア(_)が使えます
- 二文字目以降は英数文字、かアンダースコアが使えます
- 予約語は使用できません
こんなルールです。Rubyの変数として可能なものをもっと具体的に紹介しましょう。
score
totalScore
_age
firstName_LastName
highScore2020
このような文字の組み合わせなら変数として使えます。
Rubyの予約語

「予約語は使えない」と言っていた部分がよくわからないです

そうですよね。実は、Rubyでは以下のような構文が特殊な意味で使われます。そのため、変数名には使えないんですよ。ちょっと難しく感じるかもしれませんが、今は「そういうもの」として覚えておいてください
- BEGIN class ensure nil self when
- END def false not super while
- alias defined? for or then yield
- and do if redo true LINE
- begin else in rescue undef FILE
- break elsif module retry unless ENCODING
- case end next return until
ただ、予約語を部分文字列に含む文字列は変数名として使えます。例えば、
begin3
do_if
fal
などです。

それでも、予約語と紛らわしいのなら、なるべく使わないほうがいいでしょうね
全角文字もなるべく使わないように

さて、全角文字は変数名としても使えるのですが……なるべく使わないほうがいいです。

どうして?

全角文字を使うと、紛らわしいケースが増えるんですよ。たとえば、数字の一と、長音記号ー、マイナス記号−。これの区別をつけるのは、大変じゃないですか?

なるほど。全角文字が使われていない前提なら、わかりやすくなりますね
基本的には英語が使われる
変数は、慣用的に英語の単語が使われると覚えておいてください。
日本語をローマ字読みしたものは慣習として使われません。これはローマ字読みに表記揺れがあるからです。たとえば「東京」のローマ字読みには、tokyo, tokio と複数の可能性があります。

ふむふむ。紛らわしいのは、やめておけ と
また、変数名として、a,b,x,yのような簡潔な文字列を使うことも考えられますが、後々読み直すことを考えて変数の意味をよく表した適切な単語を使うほうが良いです。
一度名前を付けてしまうと、名前を付けなおすのが困難になることがよく知られています。よく考えてから変数に名前を付けましょう。
面倒くさがって、a1,a2,a3とかいう名前を付けてしまうと、さらにa1a,a1b,a22,a3_2、と変数名を付けてしまいがちですが……後でプログラムを見直すときに絶望的な気持ちになります
また、

name = “田中一郎”
puts name
name = 400
puts name
のように、一度変数に文字列を入れて、後で数値を入れるような変数の使いまわしも可能ですが、プログラムの保守がしにくくなります。避けたほうが良いでしょう。
変数の使い方

複数の変数を使うと、保持、代入、演算などができます。たとえば……
score1 = 40
score2 = 60
totalScore = score1 + score2
puts totalScore
と書くと、scor1の値40とscore2の値60の和がtotalScoreに代入されます。


これはゲームでよく見るやつだ!
自己代入演算子

前に、
score = score + 40
という代入式の例を挙げました。

この式は等式ではないと分かっている、プログラミングに慣れている人でも一瞬「あれっ」と思います

たしかに……

ほんと、紛らわしいよね

だから、余計なことを考えさせないために、こんな書き方もあるんですよ
score += 40
この書き方を自己代入演算子と言います。
慣れると簡潔で見やすくなるので、こちらを用いたほうが良いです。+=の他にも、
-=
*=
/=
%=
**=
などがあります。ただ、それらはあまり使わないので、説明は省略しますね。
多重代入


最後に、多重代入を紹介します
score1 = 40
score2 = 60
score3 = 80
のように、複数の変数に代入をする時に、
score1, score2, score3 = 40, 60, 80
のように簡潔に書くことができます。これを多重代入と呼びます。

これはわかりやすいし、使いやすそうで良いですね
今回はRubyの変数を学びました


さて、今回の授業ではRubyの変数を学んだわけですが、どうでしたか?

予約語の部分がちょっと心配です。あと……結局、自分で変数を書いてみないとなかなか覚えられないかもしれません

そうですね。変数に限らず、プログラミングは自分でコードを何回も書いていくと、早く身につきやすいです

でも、今回も勉強になりました

よーし、次行ってみよー