😉

Rubyでのブロック付きメソッドの呼び出しについて

に公開

オブジェクト指向の考え方を使うにあたって多く出てくるであろうブロック付きメソッドについて、ブロック付きメソッドとは、使う利点、意味などを交えてお話ししていこうと思います。

ブロック付きメソッドとは?

具体例:Playerクラスとgreetingメソッド

なぜオブジェクト指向ではこれが便利なのか?

まとめ

ブロック付きメソッドの呼び出し

game.rb
class Game
def initialize(player_names)
  #プレイヤーの作成
  @players  = player_names.map{|name| Player.new(name)}

このコードの流れをざっくり説明すると、

👉 「配列の要素を1個ずつ取り出して、新しい形に変えていく」

という流れになるのですが、もう少し詳しく説明すると

1.player_namesという配列があり(例(["山田","鈴木"])

2.その配列に対してmapメソッドを呼び出して

3.{ |name| Player.new(name) }というブロックを渡す

4.配列の中身をnameにいれて、Player.new(name)を実行する

5.それを新しい配列として返す(@players)に代入する
という風になります。

具体例:Playerクラスとgreetingメソッド&なぜオブジェクト指向ではこれが便利なのか?

もう少し具体的に...
Playerクラスがこのような時↓

player.rb
class Player
  def initialize(name)
    @name = name
  end

  def greeting
    "#{@name}さん、こんにちは!"
  end
end

ここの(name)に["山田","鈴木"]が入るということになり、

player.rb
  def greeting
    "#{@name}さん、こんにちは!"
  end

ここのgreetingメソッドに["山田","鈴木"]が入り、他クラスで例えば

game.rb
# すべてのプレイヤーにgreetingメソッドを実行する

@players.each do |player|
  player.greeting
end

このようにgreetingメソッドが実行されたとき、

こんにちは!私は山田です!
こんにちは!私は鈴木です!

となることで、コードが整理され、何かを変更したいときもPlayerクラスをいじるだけでいいので色々な変更にも柔軟な対応ができるというのが大きい利点だと思います。
まぁ、超ざっくりまとめると....

データ(名前)と行動(greeting)をオブジェクトに持たせることで、Gameクラスのコードをスッキリ整理できる

ということです

まとめ

この記事を書きながら、オブジェクト指向の「データと行動をセットで持たせる考え方」がすごく大事だと実感しました。
これからもいろいろなプログラムを作るときに、この考え方を意識していきたいと思います

Discussion