Ruby入門6: Rubyで使う変数を学ぼう

Ruby入門
CANIT先生
CANIT先生

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

牛山くん
牛山くん

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

猫田さん
猫田さん

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

CANIT先生
CANIT先生

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

変数とは

行動
CANIT先生
CANIT先生

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

牛山くん
牛山くん

たまにやりますよ

猫田さん
猫田さん

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

CANIT先生
CANIT先生

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

猫田さん
猫田さん

わたしは、すでに何度も変数を使っていたのか……

他にもゲーム内では、点数が増えていったり、減っていったりします。

ゲーム以外では、Amazonや楽天で買い物をするときに名前を登録しておくと、いろいろな場面で自分の名前が出てくると思います。

Amazonや楽天では、一度ログアウトしてもう一度ログインすると前の状態を引き継いでいますよね。ポイントや残高も引き継いでいるでしょう。

このようにコンピューター上に値(文字列とか数値)を保存しておいて、必要なときに参照するのに使われるのが変数(Variable)です。

変数の例

パソコン
CANIT先生
CANIT先生

では、典型的な変数の例から紹介します

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に変えた行です。

CANIT先生
CANIT先生

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

猫田さん
猫田さん

ゲームの話だからか、わかりやすいなぁ

前述のように、scoreとscore+40が等しいという意味ではありません。scoreと40の和をscoreに上書きすることを意味します。右辺と左辺でscoreの値が変わっていることに注意してください。

また、このプログラムでは、nameとscoreの二つの変数が使われていて、別々の働きをしていることに注意してください。このようにプログラムの中では複数の変数を別の役割で使うことができます

変数名

パソコン

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

猫田さん
猫田さん

んん? どういうこと?

CANIT先生
CANIT先生

変数にはいくつかのルールがあるんですよ

  1. 一文字目は英小文字かアンダースコア(_)が使えます
  2. 二文字目以降は英数文字、かアンダースコアが使えます
  3. 予約語は使用できません

こんなルールです。Rubyの変数として可能なものをもっと具体的に紹介しましょう。

score
totalScore
_age
firstName_LastName
highScore2020

このような文字の組み合わせなら変数として使えます。

Rubyの予約語

牛山くん
牛山くん

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

CANIT先生
CANIT先生

そうですよね。実は、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

などです。

CANIT先生
CANIT先生

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

全角文字もなるべく使わないように

パソコン

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

猫田さん
猫田さん

どうして?

CANIT先生
CANIT先生

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

牛山くん
牛山くん

なるほど。全角文字が使われていない前提なら、わかりやすくなりますね

基本的には英語が使われる

変数は、慣用的に英語の単語が使われると覚えておいてください。

日本語をローマ字読みしたものは慣習として使われません。これはローマ字読みに表記揺れがあるからです。たとえば「東京」のローマ字読みには、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

という代入式の例を挙げました。

CANIT先生
CANIT先生

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

牛山くん
牛山くん

たしかに……

猫田さん
猫田さん

ほんと、紛らわしいよね

CANIT先生
CANIT先生

だから、余計なことを考えさせないために、こんな書き方もあるんですよ

score += 40

この書き方を自己代入演算子と言います。

慣れると簡潔で見やすくなるので、こちらを用いたほうが良いです。+=の他にも、

-=
*=
/=
%=
**=

などがあります。ただ、それらはあまり使わないので、説明は省略しますね。

多重代入

パソコン 学習
CANIT先生
CANIT先生

最後に、多重代入を紹介します

score1 = 40
score2 = 60
score3 = 80

のように、複数の変数に代入をする時に、

score1, score2, score3 = 40, 60, 80

のように簡潔に書くことができます。これを多重代入と呼びます。

牛山くん
牛山くん

これはわかりやすいし、使いやすそうで良いですね

今回はRubyの変数を学びました

女性 スマホ
CANIT先生
CANIT先生

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

牛山くん
牛山くん

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

CANIT先生
CANIT先生

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

牛山くん
牛山くん

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

猫田さん
猫田さん

よーし、次行ってみよー

挫折率が高い??プログラミング学習のポイント
駆け出しエンジニアが一緒に学ぶ
CANITは、Progateやドットインストールで独学している人達同士をつなげます。駆け出しエンジニアのあなたのためのSNSです。
Ruby入門
【この記事を書いた人】
CANIT 先生

あらゆるプログラミング言語をあやつるフリーの凄腕講師。温和な性格で「わかるまで教えます」がモットー。たまに時間ができると動物の仲間達に、プログラミングを教えることもある。現在の生徒は牛山くんと猫田さん。

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