Rubyで遅延評価を実行する方法を現役エンジニアが解説【初心者向け】

初心者向けにRubyで遅延評価を行う方法について解説しています。最初に遅延評価によってプログラムにどのような影響があるのか学習します。次にEnumerable#lazyメソッドを使った遅延評価の実行方法を見ていきます。サンプルで書き方を確認しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Rubyで遅延評価を実行する方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

遅延評価を実行する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

遅延評価とは

遅延評価とはあるプログラムにおいて引数や変数の値が必要となるまで評価を行わないことです。

裏を返せば、引数や変数が参照される時に評価されるということとなりますので、引数や変数が必要となるまでは結果として引数や変数に渡すメソッドを実行することがないので、プログラムの高速化が期待できます。

遅延評価に対しては正格評価があります。こちらは引数が変数が必要とされなくてもメソッドを計算します。通常はこちらでプログラムは実行します。

 

遅延評価を実行する方法

遅延評価を実行する代表的なものとしては、Enumerable#lazyメソッドで遅延評価を行うことなどがあります。

例えば、

配列.select{ |item|  item % 2 == 0 }

こちらのメソッドから偶数を3だけ取得した場合などにおいて、もし配列の数が10000とかあった場合、その10000を全部計算してから3つ取得するとなると、膨大ば時間とメモリーを消費します。

このような時にはlazyメソッドで遅延評価を行うことで効率を上げることができます。

配列.lazy.select{ | item |  item % 2 == 0 }.force

forceメソッドも使うことによって値が一つずつブロックに渡されます。

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

それでは実際に書いてみましょう。

例えば、以下のようなメソッドがあったとします。

p (1..100000000).select{ |item| item%2 == 0}.take(3)

こちら実行してしまうと100000000回、配列を生成してからselectメソッドを実行します。通常のプログラムは正格評価と言って

このように実行しますが、取得するのはたった3つです。効率が悪いと感じるかと思います。ではlazyメソッドを使って以下のコードで実行してみてください。

 

p (1..100000000).lazy.select{ |item| item%2 == 0}.take(3).force

 

こちら実行してみるとわかりますが、すぐに値が返ってきます。これはlazyメソッドによって配列が直ちに実行されないからなのです。3つ取得したら終了となります。

実際のプログラムコードを書く際にはSQLに無駄な処理をなるべくさせないように工夫すべきなのです。

今回の遅延評価はSQLに無駄な処理させないようにするメリットがあります。

 

筆者プロフィール

町田 耕

学生時代は会計学専攻。塾講師勤務を経て、企業のCFOとして会社経営に携わる。

会社経営から一線を退いた後、インフラエンジニアの妻の勧めでプログラミングを独学で始め、プログラミングセミナーなど転々としながら、開発案件に携わるようになる。

現在、フリーランスとして活動しながらテックアカデミーのメンターも勤めている。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。