【未経験からのRuby on Rails – 第3回】変数と定数


スクリーンショット 2015-08-10 16.23.33
こんにちは。新卒1年目のmatsuariです。

今回はRubyに限らずプログラミングを学ぶ上で非常に重要となる「変数と定数」について、ご紹介していきます。


変数とは・・・

オブジェクトを一時的に格納しておく箱で、オブジェクトを識別するために利用します。

言葉だけでは理解が難しいかと思いますので、まずは変数を利用した例を挙げてみたいと思います。

[code lang=”ruby”]
test = "Hello World" #変数を定義
number = 1
[/code]

変数 = 格納するオブジェクトという形で変数を定義します。

この場合、「“Hello World”」という文字列オブジェクトが、「test」という変数に代入され、
「1」という数値オブジェクトが、「number」という変数に代入されました。

変数を「箱」と考えると、下図のようなことになります。

★このように、変数にはどんなオブジェクトでも代入することができます!

定義した変数を用いたコードを書く

今回も、前回と同様に「irb」を使ってやっていきます。

はじめに、「irb」を起動します。

[code lang=”ruby”]
$ irb # irbを起動
irb(main):001:0> # ここにプログラムを書く
[/code]

先ほどの挙げた例の通り、「“Hello World”」という文字列オブジェクトを、「test」という変数に代入し、
「1」という数値オブジェクトを、「number」という変数に代入します。

[code lang=”ruby”]
irb(main):001:0> test = "Hello World"
=> "Hello World"

irb(main):002:0> number = 1
=> 1

irb(main):003:0> puts test
Hello World
=> nil

irb(main):004:0> puts number
1
=> nil
[/code]

※変数の名前や代入するオブジェクトは自由に設定可能です。

その後、putsメソッドを使って「test」を呼び出すと、「変数test」に代入された「“Hello World”」が出力され、「number」を呼び出すと、「変数number」に代入された「1」が出力されます。

この時、返り値が「nil」となっています。
「nil」は、何も代入されていないことを意味します。

変数に代入したはずなのに・・・と思いますが、putsの返り値は「nil」と決まっているためであり、変数の定義が上手くいっていないわけではありません!

また、変数はプログラム中に何度でも代入(変更)できる、
つまり、1度オブジェクトを代入した後も、別のオブジェクトを代入することが可能
です。

[code lang=”ruby”]
irb(main):001:0> test = "Hello World"
=> "Hello World"

irb(main):002:0> puts test
Hello World
=> nil

irb(main):003:0> test = "ruby on rails"
=> "ruby on rails"

irb(main):004:0> puts test
ruby on rails
=> nil
[/code]

「“Hello World”」という文字列オブジェクトを、「test」という変数に代入し、putsメソッドを使って「test」を呼び出すと、「変数test」に代入された「“Hello World”」が出力されます。

その後、「“Hello World”」という文字列オブジェクトが代入された、「test」という変数に
「”ruby on rails”」という文字列オブジェクトを代入すると、変数は上書きされ、
再びputsメソッドを使って「test」を呼び出すと、「“ruby on rails”」が出力されます。

このように、★変数はプログラム中に何度でも変更することが可能です!

★文字列を代入した後に、数値を代入することも可能です!
(もちろん、数値を代入した後に、文字列を代入することも可能です。)

 

[code lang=”ruby”]
irb(main):001:0> test = "Hello World"
=> "Hello World"

irb(main):002:0> puts test
Hello World
=> nil

irb(main):003:0> test = "ruby on rails"
=> "ruby on rails"

irb(main):004:0> puts test
ruby on rails
=> nil

irb(main):005:0> test = 100
=> 100

irb(main):006:0> puts test
100
=> nil
[/code]

 

頻繁に利用する、かつ文字数の多いオブジェクトを変数として定義して利用することで、
毎回長いコードを書く手間も省けて便利ですね。
変数には、

  • ローカル変数
  • グローバル変数
  • インスタンス変数
  • クラス変数

の4種類があります。

ここまででご紹介してきた変数は「ローカル変数」で、最も一般的な変数です。

「ローカル変数」は、英小文字または「 _ 」で始まる識別子で、定義された時点で使用可能になります。
その他の種類に関しましては、必要となった時に覚えるくらいで良いかと思いますので、ここでは簡単に触れる程度にしておきます!

 

 

「グローバル変数」
$で始まる変数。プログラムのどこからでも、同じ名前であれば同一の変数として扱われる。

「インスタンス変数」
@で始まる変数。同じインスタンス内であれば、メソッド定義を超えて参照できる。

「クラス変数」
@@で始まる変数。クラス定義の中で定義され、同じクラス内でのみ参照できる。

 

定数とは・・・

オブジェクトを一時的に格納しておく箱であることは、変数と同じですが、変数との大きな違いは、

変数は「プログラム中に何度でも変更することが可能」であるのに対し、
定数は「一度オブジェクトを代入したら、再代入することができない」
ということです。

また、定数を定義する時には名前の最初を大文字にするという決まりがあり、
また識別子を全て英大文字にするという慣習があります。
Rubyは識別子の先頭が大文字である変数を定数として認識します。

[code lang=”ruby”]
irb(main):001:0> CONST = "Hello World"
=> "Hello World"

irb(main):002:0> puts CONST
Hello World
=> nil
[/code]

 

変数と同様に、
定数 = 格納するオブジェクト
という形で定数を定義します。

ここでは、「“Hello World”」という文字列オブジェクトが、「CONST」という定数に代入され、CONST」を呼び出すと、「“Hello World”」が出力されました。

一度値を代入した定数に、再び値を代入しようとすると、警告メッセージが表示されます。

[code lang=”ruby”]
irb(main):001:0> CONST = "Hello World"
=> "Hello World"

irb(main):002:0> puts CONST
Hello World
=> nil

irb(main):003:0> CONST = "ruby on rails"
(irb):3: warning: already initialized constant CONST
(irb):1: warning: previous definition of CONST was here
=> "ruby on rails"

irb(main):004:0> puts CONST
ruby on rails
=> nil
[/code]

変数や定数の名前は自由に設定可能ですが、意味が分かりやすいように名前をつけるようにしましょう!

スクリーンショット 2015-08-10 16.23.33

 

過去記事


DACエンジニア採用情報

  関連記事

ディープラーニングで「顔が似ているAKB48のメンバーを教えてくれるbot」を構築

概要 こんにちは、システム開発部の中村です。 今回は、Facebook Messenger APIを利用して、 画像をアップロードすると、似ているAKB48のメンバーを教えてくれるbotを実装しました。 尚、ディープラーニングやTensorFlowそのものの解説というより、 「エンジンとしてディープ …

【未経験からのRuby on Rails – 第4回】Railsアプリケーション開発をしよう! 〜開発の準備編〜

こんにちは。新卒のmatsuariです。 Rubyについてまだまだ知るべきことはたくさんありますが、とにかく早くアプリを作りたい! ということで、今回はアプリ開発の準備に取り掛かっていきます。 Rubyはアプリを作成しながら、同時に学んでいきたいと思います。 Railsアプリケーション開発の準備《 …

【未経験からのRuby on Rails – 第2回】Rubyのプログラムを書いてみる(Mac)

こんにちは。新卒1年目のmatsuariです。 前回はRubyとは何か、簡単にご紹介をしましたが、 今回は実際にRubyファイルを作成して、プログラムを書いてみるところまでご紹介していけたらと思います。 Mac環境のプログラミング初心者向けです。 はじめに、Rubyのプログラムを書くためのファイルを …

no image
【未経験からのRuby on Rails – 第1回】楽しく書けるプログラミング言語 “Ruby” とは

こんにちは、はじめまして。新卒1年目のmatsuari(女子)です。 この度、Rubyの勉強を始めることになりまして、 まずはたくさんあるプログラミング言語の中で、なぜ自分がRubyを学ぶのか? しっかりと把握した上で学習に取り組んでいきたいと考え、『Rubyとは何か?』調べました。 超基礎的なこと …

初心者がRailsで開発 – deviseでユーザー認証設定 –

こんにちは、2年目のYukaです。 開発部所属でありながら実は、、 実際に自分で手を動かして開発する機会がなかなかありませんでした。。 しかしついに、、、 開発初心者がRailsでWebアプリの開発に挑戦します!! 今回のゴールは社内でも使用しているGoogleアカウントで簡単にログインができるよう …

no image
gulp.jsで広告タグの開発環境を整える

SEOの観点から、サイト表示速度の高速化のためJavaScriptファイルから不用な空白や改行、 コメントを除去したりやローカル変数名を短縮するminifyが奨励されていますが、 これはタスクランナーのgulp.jsとプラグインを使って自動化する事が可能です。 ※gulpの基本的な使い方については下 …

Selenium × PHP でテスト自動化!【環境構築編】

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 テスト自動化の背景 わたくしが担当するXmediaOneでは品質担保のために①コードベ …

Scala番外編「Boxに保存したファイルをBox APIを使ってダウンロードしよう!」

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 Box APIを使う背景・目的 DACはメディアレップです メディアレップとは、インタ …

no image
Angular.jsのvalueとfactoryの違いを考える

次のようなHTMLがあったとする。 [code language=”html”] <!doctype html> <html lang="jp" ng-app="App"> <head> <me …

【小ネタ】JSで要素の組み合わせを列挙する

下記のような、キーの数や要素数が可変のデータの組み合わせを、列挙するjavascriptコードです。 pythonにはitertoolなどの順列・組み合わせ計算を行う定番ライブラリがあるようです。 やっている事ですが、イメージとしては組み合わせを数列に置き換えています。 1桁目が2進数、3桁目が3進 …