RubyのProc - Rubyプログラミング(15)

プログラミング、サーバー、ネットワーク、IT用語、ハマったときのトラブルシューティングなど様々なIT関連の話題をひたすら書いていく技術ブログです。

2017年4月15日土曜日

RubyのProc - Rubyプログラミング(15)


ここではRubyのProcモジュールについて紹介します。ざっくり言うと、Procsはブロックをオブジェクト化したもので、変数の内部に保存されるメソッドです。はい、何言っているかわからないですよね。

Procのコードサンプル

まずは、シンプルなprocを作成してみましょう。


上記のプログラムを呼び出す方法は2つあります。1つ目は、[]と渡したい引数を使います。

p full_name["Taro", "Yamada"]

もう一つは

p full_name.call("Taro", "Yamada")

Procのプロセスを確認してみましょう。上記のコードでは新しいProcインスタンスを作成して、full_nameという変数にそのインスタンスをアサインしています。Procはパラメーターとしてコードのブロックを取ることができます。ここではfirstとlastという2つの違った引数をProcに渡しています。その引数はProc内に進んでいきます。Proc内ではなんでもできます。このケースでは単純に、firstとlastを表示しています。

また、下記のような方法でもProcを作成できます。


Taroと5回表示されると思います。

ブロックとは?

この記事の最初にProcは「ブロックをオブジェクト化したもの」と書きましたが、ブロックとはなんでしょうか?他のプログラミング言語ではブロックをクロージャーなどど呼んでいます。ブロックを使用して一連の流れをグループにして、何かの処理をカプセル状態にすることができます。

Rubyでは2つの方法でブロックを作成できます。

Curly braces

Curly bracesとは「{}」のことです。

add = Proc.new { |x, y| x + y}
add[1,2]

上記を実行すると3が返ってくるでしょう。curly brancesの内側のコードがブロックの内部です。

do...end

もう一つの方法は、do...endを使う方法です。

add = Proc.new do |x, y|
x + y
end

add[1,2]

2つとも同じ結果になるでしょう。

なぜProcを使うのか?

メソッドでほぼ同じことが実現できるのに、なぜProcを使用するのでしょうか?それは通常のメソッドより柔軟性を与えてくれるからでしょう。Procだと一連の流れ(メソッドの内容)を変数に保存することができて、プログラムのどこからでもその変数を呼び出すことができることが大きなメリットでしょう。

◯「Rubyプログラミング」シリーズの一覧はこちら



最近の投稿