testtest!
オブジェクトと変数・定数
はじめに
オブジェクトと変数・定数
Rubyでは様々なデータを扱う事が来ます。
今回はその為に必要な、 -はじめに
-オブジェクトとは
①オブジェクト -オブジェクトの種類
②変数 ー変数とは
③定数 -変数の種類
ー定数とは
について学んでいきたいと思います。 -参照の仕方
オブジェクトとは
オブジェクトとは一言でいうと「データ」となります。Rubyではデータの基本的単位をオブジェクトとしているのです。
*オブジェクトはインスタンスとも呼ばれます。
オブジェクトの種類
オブジェクトにはたくさんの種類が存在します。その中から代表的なものをいくつか挙げていきます。
◎文字列オブジェクト
画像の例の様に、文字からなるオブジェクトを文字列オブジェクトと呼びます。例で言えば「Hello」も「ありがとう」も「太陽」も、これらの文字列は全てオブジェクト(文字列オブジェクト)という事です。
◎数値オブジェクト
画像の様に、数からなるオブジェクトを数値オブジェクトと呼びます。数値オブジェクトには、数式を表すものなども存在します。
◎配列オブジェクト
配列オブジェクトとは、いくつかのオブジェクト(データ)をまとめたものになります。
画像の例だと、[ 1,2,3 ] は数値オブジェクトであるそれぞれの要素をカンマ(,)で区切り順番に並べ、それらを [ ] で括っています。
下記の例は数値オブジェクトの集まりでしたが、色々な種類のオブジェクトが混ざった配列も作ることが出来ます。では、配列を実際に作ってみましょう!例えば
irb(main):001:0> array = [1, "雨", "雲", 5] |
複数の種類のオブジェクトからなる配列ができました!
また、配列からオブジェクトを取り出したり、既存の配列にオブジェクトを入れたりすることもできる他、[ ] とだけ書けば、中身が空の配列オブジェクトを作ることもできてしまいます。
これらのオブジェクトはクラスというものに属しています。様々なオブジェクトの一つ一つが、どのような性質を持つのかを定義しているのはクラスという事になります。また、オブジェクトはメソッドというものを使う(実行する)事ができます。
じゃあやってみましょう!irbを使ってデモしてみますね。みなさんもテキストエディタを使ってやってみましょう!
irb(main):001:0> "こんにちは" |
まず始めに、文字列オブジェクトを作成しています。文字列オブジェクトは「”」ダブルクオーテーションで文字列を囲う事で、2番目のコードを実行した結果と同じ結果を得る(文字列オブジェクトの作成)事ができてしまいます!この「”こんにちは”」という文字列オブジェクトも先ほど説明したように何らかのクラスに属しているのです。どのクラスに属しているのか調べたいときは、「class」というメソッドを使います。そうするとStringという結果になりますね。これは、文字列オブジェクトである「”こんにちは”」はStringというクラスに属している(Stringクラスのインスタンス)であることを表しています。
変数とは
オブジェクトに付けられる、ラベル(名札)の様なものです。
オブジェクトに名前の書いた名札を付けるには、
変数名 = オブジェクト
という書き方をします。イコールが書かれていますが、数学などの式の様に左辺と右辺が等しいという事を表しているのではありません。
Rubyにおいては、左辺に右辺を代入するという事を表しているのです。つまり、変数名とオブジェクトは等しいのではなく、変数名(変数)にオブジェクトを代入しているという事になります。
Rubyにおいては、4種類の変数が存在します。
①ローカル変数(局所変数)
②グローバル変数(大域変数)
③インスタンス変数
④クラス変数
上記4種類の内、どの種類の変数に分類されるのかは変数名で判断します。具体的に何をもって判断するのかというと、変数名の1文字目(先頭の文字)の部分です。
◎ローカル変数 - 「 _ 」アンダースコア or アルファベットの小文字
◎グローバル変数 - 「$」ドル記号
◎インスタンス変数 - 「@」アットマーク
◎クラス変数 - 「@@」
これらの規則に従って、値(オブジェクト)がどういった内容のものであるのかを分かりやすく識別できるような名前を付けます。例えば、人物名の文字列オブジェクトであれば
irb(main):001:0> names = "yamada" |
というような付け方になります!
◎疑似変数
ここまで4種類の変数を挙げましたが、この他にも「疑似変数」というものがあります。代表的なものをいくつか挙げてみましょう。
・nil
・true
・false
・self
など。
これら疑似変数は、値を変更することはできません。では、試しにnilという疑似変数の値に何か代入してみましょう。
irb(main):001:0> nil = 1 |
代入しようとすると構文エラー:Can't assign、割り当てる事が出来ないと書かれていますね!
変数の種類
◎ローカル変数
ローカル変数とは、決められた有効範囲の中で使用することが可能な変数です。この有効範囲という言葉は、変数のスコープという呼ばれ方もします。ですので、ローカル変数の「ローカル」というのは変数のスコープがローカルなためという事になります。
上記画像でいいますと、特定の場所で「 x = 10 」と 10 を x という変数に代入しています。しかし、これはローカル変数であるので、定義した場所以外(有効範囲外)では、使用不可となります。
または、違う変数として扱われる場合もあります。
上記画像では、AとBの2つの場所があり、それぞれの中で同じ文字である「 x 」に異なる数字を代入しています。
これらは、異なる変数として扱われるのです。では、irbを使って確認してみましょう!
$irb #A irb(main):001:0> x = 10 #変数xに10を代入 => 10 => 10 irb(main):003:0> puts x + 1 #変数x+1の結果をputsというメソッドで出力 11 irb(main):001:0> x #Aで定義した変数xを呼び出し NameError: undefined local variable or method `x' for main:Object => 5 |
まず上記画像のAのエリアに当たるirbで変数xを定義します。Aのirbでは、変数xを呼び出すことも、変数xを使った足し算もできますね!ちなみにですが、classメソッドで変数xのクラスを調べると、Fixnum(整数)になっていますね!
そして、Bのエリアに移ります。BのエリアでAで定義した変数xを呼び出してみると、エラーなってしまいます。それでは、Aで定義した変数xとは異なる変数として、Bで変数xを定義してみましょう。上記例では、5を代入してみました。そして、再度変数xを呼び出してみると、呼び出しに成功していることが分かりますね!
◎グローバル変数
先程の局所的(ローカル)変数とは、反対の変数がグローバル変数です。グローバル変数はどんな場所であっても使用することが出来るのでプログラム全体がスコープ(有効範囲)となります。
一見便利そうなグローバル変数ですが、有効範囲の広さゆえに大きなプログラム等ではグローバル変数を使用することにより複雑化してしまい、修正等が大変になるため使用頻度は低いかと思われます。
◎インスタンス変数とクラス変数
これら2つの変数はクラスを定義する際に使われる変数です。クラスについての章で詳しく学んでいきたいと思います。
定数とは
定数とは、変数と同じくオブジェクトに付けることのできるラベル(名札)の様なものです。では、変数とは何が違うのかというと、
変数 - 一度値を代入し、その後値を変更することができる
定数 - 使用頻度の高い、変更の必要がない値を代入するもの(再代入不可)
定数も変数と同じように
定数名 = オブジェクト
の形で定義します。
irb(main):001:0> class Sample |
上記例の様に、定数にも規則があり先頭(1文字目)が、アルファベット(大文字)で始まらなければなりません。また慣習的には全ての文字を大文字にするようなので「テスト」という定数を定義する場合は test や Test ではなく TESTとなります。区切る場合には「_」アンダースコアで区切ります。
定数について冒頭で再代入不可と申し上げました。では、定数は絶対に値を変更できないかというとそうではなく、変更しようとするとまず警告が出ます。しかし、警告は出るものの値は変更されてしまうようになっているのでご注意ください。
参照の仕方
irb(main):004:0> puts BIRTH_PLACE |
定数の参照の仕方には決まりがあります。上記ではクラス内にて定数が定義されています。このような場合、puts BIRTH_PLACE としてもエラーになり参照できません。ですので、
クラス名 :: 定数名
という形で参照しなければなりません。
では、クラス外で定義した場合にはどのように参照するかというとクラス外で定義した場合は、objectクラスに属しますので
object :: 定数名
となります。または、object は省略可能ですので
:: 定数名
とすることも可能です。
https://tomoyuki65.com/introduction-to-ruby-2/
http://blog.k-kansei.com/?ruby=03-%E5%A4%89%E6%95%B0%E3%81%A8%E5%AE%9A%E6%95%B0
https://tomoyuki65.com/introduction-to-ruby-3/
https://tech-camp.in/note/programming/2672/
https://www.rubylife.jp/ini/string/index1.html
http://marycore.jp/prog/ruby/irb-repl/
まずは無料で14講座から始めましょう!
募集人数には制限があります。サインアップはお早めに。
4月28日まで