Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyでのラムダの使用

ブロックはRubyの非常に重要な部分であり、ブロックなしで言語を想像するのは難しいです。しかし、ラムダ?ラムダが好きなのは誰ですか?あなたはそれを使わずに何年も行くことができます。まるで過ぎ去った時代の遺物のようです。

...しかし、それは完全に真実ではありません。ラムダを少し調べてみると、ラムダにはいくつかの興味深いトリックがあります。

この記事では、ラムダの使用法の基本から始めて、さらに興味深い高度な使用法に移ります。したがって、ラムダを毎日使用していて、それらについてすべて知っている場合は、下にスクロールするだけです。

Lambdasについて覚えておくべき主なことは、それらが関数のように機能することです。ブロックとProcsには用途があります。しかし、どちらも実際の機能のように100%動作しません。ラムダはそうします。リストを下に移動しましょう。

ラムダは正しい数の引数を強制します

Rubyでのラムダの使用 Procsとは異なり、ラムダは正しい数の引数を強制します

ラムダはデフォルトの引数をサポートします

以下の例では、デフォルトの引数値が「helloworld」であるラムダ関数を作成します

Rubyでのラムダの使用 ラムダはデフォルトの引数をサポートします

return キーワードは期待どおりに機能します。

これは小さなことのように聞こえるかもしれませんが、proc内でreturnを使用しようとしたことがあれば、そうではないことがわかります。

以下の例は、私が何を意味するかを示しています。 somethingというメソッドを定義しました Procを呼び出します 。 Proc returnステートメントがあります。しかし、そのreturnステートメントには注意が必要です。 procから戻るのではなく、somethingメソッドから戻ります。

しかし、lambdaで似たようなことをすると 、return ステートメントはラムダから戻るだけです。他の関数と同じです。

Rubyでのラムダの使用 ラムダ内でreturnキーワードを使用すると、ラムダから戻ります

ラムダはクロージャです

素晴らしいスタックオーバーフローの投稿を引用するには:

クロージャを考える最も簡単な方法は、**変数として格納できる関数**(「ファーストクラス関数」と呼ばれる)であり、ローカルの他の変数にアクセスする特別な機能があります。作成されたスコープ。

ラムダが作成されたスコープにローカルな他の変数にアクセスできるとはどういう意味ですか?見てみましょう。以下の例では、marcoという名前のローカル変数を作成しました。 。その変数をラムダ内で使用できます。そして、その変数の値を変更すると、ラムダは新しい値を認識します。

Rubyでのラムダの使用 Rubyラムダはクロージャです

ラムダはカメレオンです

ラムダの本当に奇妙なことの1つは、ラムダをさまざまな方法で呼び出すことができることです。以下のサンプルは、ラムダを呼び出す3つの方法を示しています。それらはすべて同等です。

Rubyでのラムダの使用 Rubyでラムダを呼び出すには少なくとも3つの方法があります

おそらく、これはあなたには少し奇妙に思えます。最初はそうだった。そして正直に言うと、l.(arg) 構文はまだ私を困惑させます。しかし、l[arg] 構文はかなり興味深いものです。これは、限られた範囲で、通常は配列またはハッシュを使用する場所でラムダを使用できることを意味します。

計算されたハッシュと配列としてラムダを使用する

テストスイートがあると想像してください。初期化の一環として、偽のPersonレコードを作成する必要があります。それは簡単です。新しいFakePersonレコードを作成し、名と名前を渡すだけです。

しかし、テストを実行するたびに異なる名前と名前を使用してシステムを「ファジングテスト」したい場合はどうでしょうか。

これを行う1つの方法は、ハッシュの代わりにラムダ関数を渡すことです。 。この例では、ラムダ関数を使用して、優れたFakergemを介して偽の名前を生成します。

Rubyでのラムダの使用 ここでは、ラムダはハッシュのふりをしています。

ラムダにはカリー化が組み込まれています

カリー化は、関数型プログラミングでよく使用されるクールな手法です。これは、既存の関数から新しい関数を作成できるようにする方法です。実際に見てみるとわかりやすいです。

以下のコードには、2つの数値を加算するラムダ関数があります。便利なことに、それは追加と呼ばれます。次に、カリー化を使用して、インクリメントと呼ばれるより特殊な関数を作成します。任意の数に1を加えるだけです。

Rubyでのラムダの使用 Rubyで任意のprocをカレーできます

ラムダは特別な種類のProcです

すべてのコードサンプルで、ラムダ関数を定義すると、代わりにProcが返されることに気付いたかもしれません。これは、Rubyがラムダを一種のProcとして実装しているためです。したがって、この記事で示した多くのことは、ラムダだけでなくProcsでも実行できます。

スタビーラムダ

この記事では、わかりやすくするためにlambdaキーワードを使用しました。しかし、Ruby 1.9で導入され、「スタビーラムダ」として知られるラムダを定義するためのより簡潔な構文があります。仕組みは次のとおりです。

Rubyでのラムダの使用 Rubyのスタビーラムダ構文はバージョン1.9で導入されました


  1. RubyでのAWSLambda関数の構築、テスト、デプロイ

    ソフトウェアの開発は難しい場合がありますが、それを維持することははるかに困難です。メンテナンスには、ソフトウェアパッチとサーバーメンテナンスが含まれます。この投稿では、サーバーの管理と保守に焦点を当てます。 従来、サーバーはオンプレミスでした。つまり、物理ハードウェアを購入して保守していました。クラウドコンピューティングでは、これらのサーバーを物理的に所有する必要がなくなりました。 2006年にAmazonがAWSを開始し、EC2サービスを導入したとき、現代のクラウドコンピューティングの時代が始まりました。このタイプのサービスでは、物理サーバーを保守したり、物理ハードウェアをアップグレードし

  2. Ruby2.6の9つの新機能

    Rubyの新しいバージョンには、新しい機能とパフォーマンスの改善が含まれています。 変更についていきますか? 見てみましょう! 無限の範囲 Ruby 2.5以前のバージョンは、すでに1つの形式の無限範囲をサポートしています( Float ::INFINITY を使用) )、しかしRuby2.6はこれを次のレベルに引き上げます。 新しい無限の範囲 次のようになります: (1..) これは、(1..10)のような終了値がないため、通常の範囲とは異なります。 。 使用例 : [a, b, c].zip(1..) # [[a, 1], [b, 2], [c, 3]] [1,2,3,