• WebCampPro_インタビュー
    未経験から上京し、エンジニアとしてチームラボグループに転職!【WebCampPro卒業生インタビュー】
    2018.03.10
  • WebCamp_インタビュー
    「1カ月頑張ればこの先が見えてくる」地元メディアを立ち上げたママさん
    2017.07.20
  • WebCamp_インタビュー
    【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
    2018.01.15
  • WebCamp_インタビュー
    “未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
    2017.10.04
  • WebCampPro_インタビュー
    未経験31歳からエンジニア転職を実現【実際に聞いてみた】
    2017.04.01
  • WebCamp_インタビュー
    【卒業生インタビュー】台湾で月間100万UUの訪日旅行メディアを手掛けるCEOが、プログラミングを学んで得たものとは?
    2018.01.15
  • WebCamp_インタビュー
    時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
    2018.01.26
  • WebCamp_インタビュー
    【WebCamp受講生インタビュー】起業準備中にCEOが気がついたプログラミングスキルの重要性とは?
    2017.12.25
  • WebCampPro_インタビュー
    未経験でも寿司職人からWebデザイナーになった!ホスピタリティでスクールを支える宮脇トレーナー
    2017.05.26
  • WebCampPro_インタビュー
    自分で稼ぐ力をつけるため、新卒5年目の営業マンがエンジニアに転職!【WebCampPro転職者インタビュー】
    2018.02.02
  • WebCamp_インタビュー
    「自信の持てるスキルを得たい!」内定辞退した女子大生がプログラミングを学習したワケ。
    2018.04.28

◆当サイトで人気のプログラミング教室のおすすめランキングはこちら!
プログラミングは独学では非効率で、時間を無駄にするリスクがあります。効率的なカリキュラムで学べるスクールを受講しましょう。

Web Camp【マンツーマンサポート】1ヶ月短期集中でプログラミングを学ぶスクール
1ヶ月通い放題・メンター常駐の教室環境でWebサービス等作りたい方
TechAcademyオンラインで開講しているプログラミングスクール
オンラインでどこでも学べる!/教室に行くのが忙しい人でも安心!
Tech Camp教養としてのITスキルを学べるスクール
Webデザイン/AI(人工知能)/IOS/Androidアプリ制作/VRを学びたい方!
WebCampPro転職保証付き!エンジニアとして転職したい人におすすめ!
未経験からプロのエンジニアを3ヶ月で目指すプログラミングスクールです。
9月生募集中!当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のWebCamp Proコース。
8月受入枠は満員となっております。9月枠に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

プログラムで、値や文字列を一時的に格納する「変数」の特徴を、どのくらい詳しく説明できるでしょうか?

「値や文字列を入れる箱で、計算したり表示したりするときに、入っている値や文字列を表す記号としても使える」程度は説明できる人は多いですが、変数にはそれ以外にも押さえておくべき特徴があります。

今回は、そんな「変数」の特徴を詳しく説明していきます。

変数はプログラムの基本

変数は、上述のように、値や文字列を格納して、プログラムの中でそれらの代わりとして扱うことができる便利なものです。

プログラムでは、様々な値や文字列が変化していきますので、そのためにも変数は欠かすことのできないものです。

変数とは

いままで、サンプルプログラムや参考書などで、いろいろな「変数」に出会ったことがあると思います。

それらの変数は、どうやって使われていたのか、改めて整理してみましょう。

値や文字列を格納する

a = 1
b = "ruby"

といった具合に、値や文字列を格納して保持する使われ方です。

値や文字列の演算結果を格納する

a = 1 + 2 + 3
b = "I " + "love " + "Ruby"

変数には、計算したり文字列をつなげたりした結果を、格納することもできます。

他の変数の内容を格納する

a = 10
b = 100

c = a
d = b

他の変数の内容も、格納することができます。

メソッドによって処理される。値や文字列を渡す。処理結果を受け取る

a = "length"
b = a.size

メソッドというのは、何らかの入力に対して処理をして、結果を出力する処理単位です。

そのメソッドへの入力と出力の受け取りに、変数が使われます。

コツコツ独学×スクールで実践。未経験からエンジニアに転職!【WebCamp卒業生インタビュー】
2018-03-22 23:28
今回の記事では、独学でPHPを1年半学習し、その後WebCampを受講して未経験からエンジニアへと転職された佐々木さんにお話を伺いました。 <プロフィール> 佐々木 祐樹 さん(2...

使い方(代入、自己代入)

変数の使い方で、もっとも分かりやすいのが、「値や文字列を格納する」ことでしょう。

その格納することを、「代入」と言います。

この代入の方法と注意点を紹介しておきます。

いろいろな代入の方法

ここまでに紹介した方法以外に、次のような方法でも代入することができます。

a = b = 3

c, d = 10, 20

自分自身に代入する「自己代入」

ある値に決まった演算を施しながら、その結果に従って処理するというのは、比較的多いプログラムです。

例えば、「定期貯金の利息を複利計算するプログラム」では、1年めの利息は、元金×金利ですが、2年め以降は昨年の利息を加えた金額を元金にする必要があります。つまり、基本となる金額が更新されるわけです。

そんなときに行うのが、自分自身に自分を代入する「自己代入」と呼ばれるものです。

先に紹介した利息計算では、次のような計算を預ける年数分繰り返すことになるでしょう。

将来の元金 = いまの元金 × 金利

10万円を年利(1年間の金利)0.01%で1年預けた場合、いくらに増えるかは、次のように計算できます。

Principal = 100000  # 元金
rate = 0.01         # 年利

Principal = Principal * ((rate / 100) + 1)  # 元金の更新……(1)

print("1年後の元金は、", Principal, "円")

この元金の更新の部分が、自分の値を使って自分を更新する自己代入です。
※この自己代入を10回繰り返せば、10年後に貯金がいくらになっているかが計算できます。

また、(1)の部分は、以下のように記載することもできます。

Principal *= ((rate / 100) + 1)  # 元金の更新……(1)

これはかけ算だけではなく、代数演算子(+, -, /, %, *, **)などの演算子で使用できる記載方法です。

宣言しなければ使えない

変数を利用するとき、その前の必ずどこかで代入を行わなければいけません。

つまり、以下のようなプログラムは正常に動く保証ができないわけです。

print("a = ", a)

この、事前に代入して初期化しておくことを「宣言」と呼びます。

数字から始まる名前は使えない

変数名は、半角の英数字と「_(アンダーバー)」の組み合わせであれば、どんな名前でも構いません。

しかし、サンプルプログラムの変数名のような無意味なものではなく、中に入っている値の意味が分かるように付けるようにすべきです。そうしておけば、あとでプログラムを見たときにスムーズに理解することができるでしょう。

また、変数名は数字から始めることはできません。数字から始めた場合は、エラーとなってしまいます。

大文字小文字の制限はありませんが、Rubyの場合はすべて小文字を使うのが通例となっています。

代入すると、格納されていた値や文字列は上書きされる

変数には、値や文字列が1つしか格納できません。

そのため、ある値が格納されている変数に別の値を代入すると、もともと格納していた値は失われます。

この問題がもっとも顕著に表れるのは、変数の中身を入れ替えるときでしょう。

# 初期値
a = 10
b = 100

# 入れ替える
a = b
b = a

# 表示
print("a = ", a, "\n")
print("b = ", b, "\n")

このプログラムでは、うまく入れ替えられません。

入れ替える部分の1行め「a = b」でaが100になってしまい、その後の「b = a」では、bは100のまま変化しないからです。

その結果、以下のような残念な出力になってしまいます。

a = 100
b = 100

そのため、変数同士の入れ替えを行うには、一時的に値を退避させる変数を別に準備して、以下のようにする必要があるのです。

# 初期値
a = 10
b = 100

# 入れ替える
c = a  # cにaの値を退避する
a = b  # bの値をaへ格納する
b = c  # 退避していたaの値をbへ格納する

# 表示
print("a = ", a, "\n")
print("b = ", b, "\n")

ここで、代入について、もう少し詳しく説明します。じつは、Rubyの代入というのは、ただ数値や文字列を格納することではありません。

そもそも、コンピュータというのは、すべての情報をメモリ上に配置しています。プログラムで使っている数値や文字列、変数も例外はありません。

もう少し詳しく、以下のサンプルプログラムを使って、Rubyの場合の代入について、動きを説明しましょう。

a = 5
b = 10
c = a + b

プログラムが実行されると、上から順に解釈されて、メモリ上に配置されていきます。

まず、メモリ上に「5」と変数「a」が別々の場所に配置されます。その後、=による代入処理が行われますが、代入で行われる処理は、「5が置かれたメモリ上の位置」がaに設定されるということなのです。

つまり、aに格納されるのは、「5」そのものではありません。

同様に、bには「10が置かれたメモリ上の位置」が格納されます。

最後の「c = a + b」では、まず、「a + b」から処理され、その処理結果(5+10の結果15)がメモリ上に配置されます。そして、これまでと同様に、「15が置かれたメモリ上の位置」がcに格納されるのです。

ここで、勘の良い人は、「変数を代入したら、複数の変数で1つのメモリ上の位置を持ってしまう」と考えるかと思います。もしそうなってしまうと、意図しないところで変数が持っている値が変わることになります。

試してみましょう。

a = 5
b = a

b = 3
puts(a,b)

もし、先ほどの予測が正しければ、次のような結果になっているでしょう。

3
3

しかし、実際には、次のような結果になります。

5
3

確かに、「b = a」の時点では、aもbも同じ「5が置かれたメモリ上の位置」を持っています。しかし、「b = 3」の時点で、bは「3が置かれたメモリ上の位置」に上書きされるわけです。そのため、勝手に変数の持つ値が変わることはありません。

この動きは、少しややこしいですので、理解しなければプログラムが組めないというものではありません。

しかし、「参照渡し」と呼ばれる「値が置かれたメモリ上の位置が渡される」こな動きは、プログラムの動きを理解する中で、とても重要なポイントですので、存在だけでも憶えておけば、役に立つと思います。

時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
2018-01-26 13:03
今回の記事では、WebCampに1ヶ月間通い、未経験からエンジニアとして転職した星野さんにお話を伺いました。 <プロフィール> 星野 智洋 さん(25) 学生時代は日本大学芸術学部...

変数の種類

ここまで、数値や文字列を何気なく変数へ格納してきましたが、じつは変数には種類があります。

種類によって有効範囲(寿命)や扱い方が違ってきますので、次のサンプルプログラムを例にして、説明します。

$a = 1000  # グローバル変数
b = 500    # ローカル変数

def kansu
  c = 5  # ローカル変数
  print("local  c = ", c, "\n")
  print("global a = ", $a, "\n")
  # print("local  b = ", b, "\n") # ERROR(1)
end
print("-- kansu --\n")
kansu()

# ブロック変数
print("-- block --\n")
2.times do |d|
  print("block  d = ", d, "\n")
  print("global a = ", $a, "\n")
  print("local  b = ", b, "\n")
end

print("-----------\n")
print("global a = ", $a, "\n")
print("local  b = ", b, "\n")
# print("local  c = ", c, "\n")  # ERROR(2)
# print("block  d = ", d, "\n")  # ERROR(3)

print("--const ---\n")
E_HENSU = 100
print("local  E_HENSU = ", E_HENSU, "\n")
E_HENSU = 10  # 警告が表示される

グローバル変数

変数名を$で始めることで、グローバル変数を表します。

プログラムが実行されている間、どこからでも利用できる変数です。今回のサンプルプログラムではすべての表示で問題なく表示されているのが分かるでしょう。

また、もっと大規模な複数ファイルで構成されるようなプログラムでは、他のファイルからでも利用することができます。

ただし、グローバル変数はどこからでも利用できる利便性がある反面、どこで値が変更されるか分からないため、きちんと管理しなければ不具合の温床になってしまう危険性があります。

ローカル変数

ローカル変数というのは、ある範囲の中だけで有効な変数のことです。

上述のサンプルプログラムでは、「b」と「c」が該当します。

bはプログラムの最初で宣言され、500に初期化されています。そのため、bはこのプログラムの中ではほぼどこでも有効です。

ただし、defからendの間は、メソッドの定義という別の領域になっています。そのため、そこからは利用することができません。(ERROR(1))

メソッドの定義の中で宣言されたcは、メソッドの中でだけ有効です。そのため、外で表示しようとするとエラーになってしまうのです。(ERROR(2))
※メソッドの定義の詳しい説明は、別の機会に譲ります。

ブロック変数

ローカル変数と同じく、限られた範囲でだけ有効な変数ですが、より狭い範囲に絞られているものです。

サンプルプログラムでは、「d」が該当します。

dは繰り返しの処理の中で宣言されていますので、繰り返しの処理の範囲であるdoからendの間の外からは、利用することができないのです。(ERROR(3))

定数

プログラムの中で、変更することのない固定値を利用することは少なくありません。そんな値や文字列を明示的に格納する変数のことを「定数」と呼びます。

サンプルプログラムでは「E_HENSU」が該当します。

Rubyでは、すべて大文字の変数名の変数を定数として扱い、もし変更しようとすると警告表示されます。
※他の言語では、変更するようなプログラムはエラーを発生させることが多いですが、Rubyはそのあたりはおおらかです。

“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
2017-10-04 10:26
今回の記事では、未経験からWebCampを1ヶ月受講し、その後エンジニアとして転職をした喜田さんにお話を伺いました。 <プロフィール> 喜田 大介 さん (28歳) 大学時代はプ...

変数には上述のような有効範囲による種類もありますが、「型」と呼ばれる、入っている値や文字列に合わせた種類も存在します。

この型は、整数や小数、文字列など様々なものがありますが、宣言時に格納される値や文字列によって規定されます。

宣言時に整数が格納されれば「整数型」、小数が格納されれば「浮動小数型」、文字列が格納されれば「文字列型」などです。

これは、宣言後の動作に影響を与えますので、意識しておかなければいけません。

例えば、以下のサンプルプログラムは思ったような動作をしません。

a = 10
b = 5

c = b / a

print("b = ", c, "\n")

このプログラムの結果は「0.5」ではなく、「0」です。

そのため、小数の計算をさせたければ、最初から小数にすれば良いわけです。

a = 10.0
b = 5.0

c = b / a

print("b = ", c, "\n")

型変換

前述のように、変数はその意図によって宣言時に代入する値をきちんと設定してあげる必要があります。

しかし、宣言時とは違う型で使いたくなることもあるでしょう。

例えば、次のような場合があります。

in_minuts = 90 # 時間に変換したい分
out_hour = 0   # 変換した時間部分
out_minuts = 0 # 変換した分部分

out_hour = in_minuts / 60          # 時間をとるため、60で割った商を得る……(1)
out_minutes = (in_minuts % 60) / 60  # 余りの分を時間に変換する……(2)

print(out_hour + out_minutes)  # 変換結果

この結果は、以下です。

1

入力されているのが90分ですので、「1.5」が正解ですが、整数型の計算をした結果、整数部のみを取り出されて1になったわけです。

そこで、前述の「宣言時に小数で代入する」方法をとってみます。

in_minuts = 90.0 # 時間に変換したい分
out_hour = 0.0   # 変換した時間部分
out_minuts = 0.0 # 変換した分部分

out_hour = in_minuts / 60          # 時間をとるため、60で割った商を得る……(1)
out_minutes = (in_minuts % 60) / 60  # 余りの分を時間に変換する……(2)

print(out_hour + out_minutes)  # 変換結果

しかし、残念ながら、この結果は「2.0」になってしまうのです。

これは、(1)の割り算が時間に換算できる部分である整数しか必要ないのに、小数まで取得してしまっているからです。

勘の良い人であれば、2行めを「out_hour = 0」に戻すことを考えるかもしれませんが、残念ながらin_minutsが「浮動小数型」ですので、その影響で(1)でout_hourも「浮動小数型」になってしまいます。

だからといって、in_minutsまで整数型にしてしまうと、今度は(2)の式の計算が整数型同士の計算になりますので、out_minutesが整数型になってしまいます。

ジレンマですが、以上の検討から導かれる、最終的に必要な処理は、(1)の計算は整数型に、(2)の計算は浮動小数型にできれば、うまくいきそうです。

つまり、一時的に型を変えられれば、良いわけです。

もちろん、Rubyにはその機能があります。「型変換」と呼ばれるその処理を施せば、必要な処理を作ることができるでしょう。

型変換には様々なものがありますが、よく使うものは、整数型にする「to_i」、浮動小数型にする「to_f」、文字列型にする「to_s」を押さえておけば良いでしょう。(他にもありますが、適宜調べていただければ良いでしょう)

最初に出てきた「宣言時に整数型にしているサンプルプログラム」を例にして、修正していきましょう。

対応方法はいくつかありますが、(2)の計算を浮動小数型に型変換する方法を紹介します。

in_minuts = 90 # 時間に変換したい分
out_hour = 0   # 変換した時間部分
out_minuts = 0 # 変換した分部分

out_hour = in_minuts / 60          # 時間をとるため、60で割った商を得る……(1)
out_minutes = (in_minuts % 60).to_f / 60.to_f  # 余りの分を時間に変換する……(2)

print(out_hour + out_minutes)  # 変換結果

なお、(2)で追加している「.to_f」は、分母と分子のどちらか一方だけでもかまいません。

まとめ

変数はプログラムの基本ですので、その動きを理解していくことは、プログラムの理解に大きく貢献します。

もちろん、ここに記載したものがすべてではありませんが、ここに記載したものをベースに、しっかりと学習していっていただければと思います。

こういった部分がちょっとした疑問が浮かぶことも多いと思いますが、サイトという形式では、そこまで細やかなケアはできません。その点、マンツーマンで目の前に講師がいる学習方法の方が、その場で質問できますので効率が良いかもしれません。

・変数は値を格納する
・変数は宣言しなければ使えない
・代入すると、格納されていた値や文字列は上書きされる
・変数には、ローカル変数、グローバル変数、ブロック変数といった、有効範囲の違う種類がある
・変数には、整数型、浮動小数型、文字型など、格納できる値の違う種類がある。
・変数は値が代入されると、その値に合わせた型になる
・型変換することで、一時的に型を変えて利用することができる

WebCamp・WebCamp Proについて

WebCampは1ヶ月でプログラミング・Webデザインスキルを学ぶ通い放題のプログラミングスクールです。WebCamp Proは3ヶ月間で未経験から即戦力エンジニアを育成するプログラミングスクールです。

2つのサービスを運営するインフラトップでは、「学びと仕事を通して人生を最高の物語にする」という理念で会社を経営しています。

キャリアアップを目指す方は、この機会に私達と一緒にプログラミングを学んでみませんか?

8月枠も残りわずか当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のWebCamp Proコース。
7月受入枠は満員となっております。8月枠に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

▼未経験から1ヶ月でWebデザイン・プログラミングを学びたい方はこちら!

▼ついに開講!オンラインでWebデザインを学びたい方はこちら!

 

【インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!

ブラジルから帰国し技術をつけようとRubyエンジニアを目指してWebCampでRubyを学び、見事Webエンジニアとして転職を果たした田中さんにお話を伺いました。

Rubyの学習がしたい。基礎をしっかりと理解したい

転職のサポートがほしい

と考えている方はぜひお読み下さい。

【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
2018-01-15 13:23
今回の記事では、WebCampで1ヶ月間Rubyを学習し、Webエンジニアとして転職した卒業生の田中さんにお話を伺いました。 <プロフィール> 田中 デニス 昭彦さん(...
Rubyの関連記事
  • 【Ruby入門説明書】ruby sliceについて解説
  • 【Ruby入門説明書】chompについて解説
  • 【Ruby入門説明書】selectについて解説
  • 【Ruby入門説明書】matchについて解説
  • 【Ruby入門説明書】リファレンス、sortについて解説
  • 【Ruby入門説明書】リファレンス、moduleについて解説

当サイトで人気のオススメ転職サービスTOP3

1位 マイナビエージェント×IT

おすすめポイント

・平日忙しい人も、土曜日開催の個別キャリア相談会に参加できる

・職種や仕事内容(要件定義、上流工程から携わる仕事など)の要望が細かくできる
・マイナビの規模を活かした豊富で幅広い求人数

マイナビエージェント×ITの登録はこちら

2位 レバテックキャリア

おすすめポイント

・求人登録数4,000件以上

・エンジニア未経験、経験者両方に対応

・有名企業の採用担当者インタビューがみれる

・一次面接NGからの内定実績もあるほど、内定率が高い

レバテックキャリアの登録はこちら

 3位 type転職エージェント

おすすめポイント

転職者の71%が年収アップ

・IT系企業、特にエンジニアに限らず営業職の求人も充実している

各職種専門の転職アドバイザーが援助

type転職エージェントの登録はこちら

おすすめの記事