web-dev-qa-db-ja.com

.Netのラムダ式で使用される「=>」の発音方法

私は他のプログラマに会うことはほとんどありません!

トークンを初めて見たときの私の考えは、「それを暗示する」ことでした。なぜなら、それは数学的証明でそれを読み取るものであるが、明らかにその意味ではないからです。

だから私はどのように「=>」と言うか読むのですか:-

IEnumerable<Person> Adults = people.Where(p => p.Age > 16)

それとも、合意された言い方さえありますか?

158

その演算子を読むとき、私は通常「そのような」と言います。

あなたの例では、p => p.Age> 16は「P、p.Ageが16を超えるようなもの」と読みます。

実際、私は公式のlinqプレリリースフォーラムでこの質問をしましたが、Anders Hejlsbergは次のように答えました。

通常、=>演算子は「bemeses」または「for which」と読みます。例えば、
Func f = x => x * 2;
Func test = c => c.City == "London";
「xはx * 2になります」および「c.Cityがロンドンに等しいc」と読みます

「行く」限り-それは私には意味がありません。 「p」はどこにも行きません。

たとえば、電話で誰かにコードを読む場合、仲間のC#プログラマである限り、Wordの「ラムダ」を使用するだけです。つまり、「p lambda p dot age than-than 16。"

コメントで、Steve Jessopは、変換の場合の「マップ先」に言及しました。したがって、Andersの例を取り上げます。

x => x * 2;

読むだろう

xはx回にマッピング2。

これは、この場合に「なる」よりも、コードの実際の意図により近いように見えます。

148
Erik Forbes

[〜#〜] msdn [〜#〜] から:

すべてのラムダ式は、ラムダ演算子=>を使用します。これは「goes to」として読み取られます。

56
Kent Boogaart

電話でコードを読む

エリック・リッパートから:

個人的には、c => c + 1を「see see to see plus one」と言います。私が聞いたいくつかのバリエーション:

プロジェクションの場合、(Customer c)=> c.Name:「customer seeはsee dot nameになります」

述語の場合、(Customer c)=> c.Age> 21:「ドットエイジが21よりも大きいことを顧客が見る」

18
Gulzar Nazim

私は常に「王演算子」と呼んでいます:-)

「pの16歳を超えるp wang年齢」

15
Aidos

私は人々が「矢印」と言うのを見ました。

7
Brian

LINQの本が私に言ったので私は「行く」を使用します:)

7
CodeChef

「マップ先」はどうですか?それは簡潔であり、間違いなく技術的に正確です(すなわち、「行く」または「なる」などの状態変化の示唆、「そのような」または「その」などの特徴的な機能との組み合わせはありません)他の選択肢。 MSDNページが暗示しているように既に標準が存在する場合は、(少なくともC#コードについては)そのまま使用する必要があります。

5
Max Strini

「Maps to」は私の好みの発音です。数学的に言えば、関数は引数を戻り値に「マッピング」します(関数を「マッピング」と呼ぶこともあります)。そのため、プログラミング、特に関数型プログラミング(特にラムダ計算)でこの用語を使用するのは理にかなっています数学に非常に近いです。また、contextfreeが述べたように、状態の変化を示唆しないため、「becomes」、「goes to」などよりも中立です。

3
Will Vousden

ラムダ式が匿名メソッドであると想像すると、「goes to」はまともな意味をなします。

(n => n == String.Empty)

nは、式n == String.Emptyに移動します。

匿名メソッドに送られるため、コード内のメソッドに行く必要はありません!

そのために残念。

正直に言って、「行く」を頭の中で使うのは好きではありませんが、他の人がそれを奇妙に見えると言っていたので、それをはっきりさせようと思いました。

2
Jonesopolis

私はそれについてあまり考えていませんでしたが、私は簡潔に「と」と言います。短く簡潔で、変数が渡されることを意味しますto式。数字の2(「2」)と混同される可能性がありますが、話すときは「to」を「ta」のように発音する傾向があります。 (少なくともラムダを知っている)誰もそれを曖昧だと思ったことはありません...

// "Func f equals x to x times two"
Func f = x=> x * 2;

// "Func test equals c to c dot City equals London"
Func test = c => c.City == "London"
2
Mark Brackett

私の短い答え:「c 'lambda-of' e」。 「 'lambda' c 'function' e」にしがみついていますが、lambda-ofはエキュメニカルな妥協案だと思います。分析が続きます。

これは奇妙な答えのためだけの素晴らしい質問です。ほとんどの翻訳には、ラムダ式以外の意味があり、エキゾチックな解釈につながります。古いラムダ式のハッカーとして、私は.NET表記を無視し、頭の中でラムダとして書き直します。


電話でコードをナレーションするには、誰かにコードを順番に書き留めてもらいたいと思います。それはもちろん問題ですが、ラムダ矢印などがおそらくあなたが手に入れることができる最高のものか、ラムダインかもしれませんが、ラムダオブが最も正確です。

問題は、中置詞の使い方と、全体の名前の付け方と、左右の部分の役割を、中置詞の場所で話されたときに機能するもので表現することです。

これは、制約が厳しすぎる可能性があります!


私は「そのような」を使用しません。これは、右側が左側が満たすべき述語であることを意味するためです。これは、左側が機能パラメーターとして抽象化されている右側について説明する場合とは大きく異なります。 (「すべてのラムダ式」に関するMSDNの声明は、単に不快であるだけでなく不正確です。)

私たちが手に入れることはできる限り近いかもしれませんが、「行く」ことについて何かがランク付けされます。 「Goes to」は変換を意味しますが、cの式に移動する変数cはまったくありません。関数の抽象化は少しわかりにくいです。私はこれに慣れることができましたが、変数の抽象化を強調する何かにまだ憧れていました。

これまでに使用された場合、左側は常に単純な識別子であるため[後で混乱する可能性のある拡張機能を待つ]、 "c => expression"の場合は "c 'lambda-function' expression 「」または「c 'arg' 'function' expression」。最後のケースでは、「b 'arg' c 'arg' 'function' expression」などのように言えます。

ラムダ式が導入されていることをさらに明確にし、「 'arg' b 'arg' c 'function' expression」のようなことを言う方が良いかもしれません。

このすべてを他の言語に翻訳する方法を理解することは、学生のための練習です[; <)。

私はまだ「(b、c)=> expression」およびまだ存在しない場合に発生する可能性のある他のバリアントについて心配しています。おそらく「 'args' b、c 'function' expression」。


このすべての考察の後、「c => e」を「 'lambda' c 'function' e」として翻訳し、正確な形式へのマッピングがコンテキストによって理解されることに気付いていることに気付きます:λc(e )、c => e、f where f(c) = eなど).

これは、支配的な過半数が初めてラムダ式を目にする場所であるため、「行く」説明が優先されることを期待しています。それは残念だ。適切な妥協案は、「c 'lambda-of' e」です。

2
orcmid

上記のスコープの取得(ラムダ式が発生するポイントで通常のコード行のスコープ内にあるすべての変数と定数は、式のコードで使用可能)を除いて、ラムダ式は本質的にインライン関数の構文糖衣です。

プロダクション演算子の左側にある値のリスト( "=>")は、この関数を呼び出すために使用されるスタックフレームの構造と内容を提供します。値のリストは、渡されるパラメーター宣言と引数の両方に寄与すると言うことができます。従来のコードでは、これらは関数の呼び出しに使用されるスタックフレームの構造と内容を決定します。

その結果、値は式コードに「移動」します。むしろ「スタックフレームを定義する」または「行く」と言いますか? :)

フィルター条件として使用されるブール式の厳密に定義されたアプリケーション(この質問に対する他の回答で広く検討されているラムダ式の主な使用)では、コードの意図を支持してメソッドをスキップすることは非常に合理的です。 」と同じくらい簡潔で、コードの意味について詳しく説明しています。

ただし、ラムダ式はLinqの唯一の州ではなく、このコンテキストの外では、「goes to」というより一般的な形式を使用する必要があります。


しかし、なぜ「行く」のでしょうか?

「次のコードのスタックフレームにデータを入力する」というのは、言い続けるには長すぎます。 「〜に渡される」と言うことができると思います。

明示的に渡されたパラメーターとキャプチャされた変数の決定的な違い(正しく覚えている場合-間違っている場合は修正してください)は、前者が参照で渡され、後者が値で渡されることです。

2
Peter Wone

問題の一部は、それがどのように構成されているかに応じて異なる方法で読み上げることができることです。それは、Rubyの|ほどきれいでなく、統合されていないのは残念です。

1
Tad Donaghe

Rubyでは、この同じシンボルは「ハッシュロケット」と呼ばれ、C#プログラマーもその用語を使用していると聞きました(そうすることは間違っていますが)。

1
Pharylon