Ruby 備忘録①
クラスとインスタンス
・クラスとインスタンスは、下記の様に設計図と設計図から作成される実物体と言われています。 引用元(https://pikawaka.com/ruby/class)
メソッド
# 引数を追加 def say_hello(name) puts "#{name}, hello!" end # say_helloメソッド実行 say_hello("mari") #=> mari, hello!
・インスタンスメソッド
インスタンスメソッドとは、作成したインスタンスから実行出来るメソッドのことです。
先ほど作成したanko_taiyakiのインスタンスは、initializeメソッドでインスタンス変数に「@taste = あんこ, @price = 250」を代入した為、この情報を保持しています。
インスタンスメソッドは、このインスタンスごとに保持している情報を使って処理を書くことが出来ます。
・クラスメソッド
先ほどのインスタンスメソッドは、インスタンスから呼び出すことが出来ましたが、その他にもクラスから呼び出すことが出来るクラスメソッドがあります。
クラスメソッドとは、インスタンスに依存せずにクラス本体に紐づけられるメソッドのことです。
インスタンスの持つデータを使う必要のない処理は、クラスメソッドで定義します。
・クラス変数
インスタンス変数の他に、クラス変数という@が2つ付く変数があります。
インスタンス変数が作成された各インスタンスごとに共有される変数だったのに対して、クラス変数は、全てのインスタンスで共有される変数です。
eachメソッド
eachメソッドとは配列の中身を一つずつ取り出すメソッドです
eachメソッドの構文
配列とは、一つのオブジェクトを複数の値を格納できる便利なものでしたね。
eachメソッドとはその一つ一つ格納されたオブジェクトを取り出すことが出来るメソッドです。
ハッシュ
・シンボル
シンボルはSymbolクラスのオブジェクトで、文字列はStringクラスのオブジェクトです。
シンボルは表面的には文字列と似ていますが、シンボルの中身は文字列とは違い整数で管理されています。その為、文字列よりも高速に処理出来ます。
シンボルは、「同じシンボルであれば同じオブジェクト」という特徴があります。実際に、オブジェクトのidを調べる「object_idメソッド」を使って見ていきましょう。
ブロック
ブロックとは、一言で言えば、「引数のかたまり」です。
ブロックの、do~end までの範囲すべてが引数です。
または、{ } で囲まれた範囲もブロックで、この範囲すべてが引数です。
ブロックとはどのようなものなのか、ここで簡単に復習してみましょう。
サンプルコード(do~endのブロックの例):
- 3.times do | i |
- x = i * 2
- p x
- end
サンプルコードの実行結果:
- 0
- 2
- 4
上の例の、
"do | i |
x = i * 2
p x
end"
までが、ブロックです。
このブロックが、timesメソッドに引数として、与えられています。
timesメソッドは、このブロックを引数として受け取り、0、1、2と数え上げる時に、数え上げている数を変数iに入れて、引数として受け取ったブロックのコードを実行しています。
そしてブロック内で「p x 」が実行されて、画面に実行結果が表示されています。
サンプルコード( { } のブロックの例):
- [ "one", "two", "three" ].each { | n |
- str = "this num is " + n
- p str
- }
サンプルコードの実行結果:
- "this num is one"
- "this num is two"
- "this num is three"
eachメソッドも、
"{ | n |
str = "this num is " + n
p str
}"
というブロックを、引数として受け取っています。
eachブロックは、"one"、"two"、"three"と配列をループする時に、ループ中の配列の要素を変数nに入れて、引数として受け取ったブロックのコードを実行しています。
そして、ブロックで、「p str」が実行されて画面に実行結果が表示されています。
このように、ブロックはコードではありますが、あくまで引数なので、単体では存在できません。
配列
%w()の中にスペースで区切って文字列を並べると、配列を簡潔に記述できます。次の2行は同じ結果になります。文字列の中で式展開やバックスラッシュ記法を使いたいときは、大文字の%W()を使います。()は、<>のように好きな記号を使えます。animals=["dog","cat","elephant"]animals=%w(dogcatelephant)
黒田努,佐藤和人. 改訂4版 基礎Ruby on Rails (基礎シリーズ) (Japanese Edition) (Kindle の位置No.1354-1358). Kindle 版.