web-dev-qa-db-ja.com

プログラミングイディオムとは何ですか?

「プログラミングのイディオム」という言葉が、よく理解されているように飛び交っているのが見えます。それでも、検索結果とスタックオーバーフローにはすべてが表示されます...

マイクロから:

  • 変数をインクリメントする
  • 無限ループを表す
  • 変数値の交換

ミディアム:

マクロへ:

「プログラミングイディオム」の単一の一般的な定義はありますか? 「プログラミングイディオム」は多くのスコープで使用されているため、

  • マイクロ:構文のニュアンスまたは一般的な構文
  • 中:一般的なスタイルとパターン
  • マクロ:パラダイムをイディオムとしてプログラミングする

これらのスコープのいずれかでフレーズを使用することは有効ですか?これまでの回答は構文のイディオムに焦点を当てています。他の人も有効ですか?

67
Corbin March

プログラミングイディオムは、特定の言語でタスクをコーディングする通常の方法です。たとえば、ループはCで次のように記述されることがよくあります。

for (i=0; i<10; i++)

PHPは同様の構成を理解します。

for ($i = 1; $i <= 10; $i++)

ただし、PHP for array for looping for the array。この場合、次のように使用します。

foreach ($arr as $value)

Rubyでは次を使用します。

(1..10).each

ループの場合、または:

array.each

それらの言語でループを書く可能性はたくさんあります。イディオムを使用すると、熟練した読者がすぐに識別できます。その後、より重要な問題に時間を費やすことができます。

51

(非プログラミング)言語の「イディオム」は、特定の言語に固有のことわざまたは表現です。一般的に、言語の「ルール」に準拠せず、ネイティブスピーカーがそれが何を意味するかを「知っている」ために存在するだけのものです。 (たとえば、英語では「インライン」と言いますが、「out of line」-それは慣用的です)

これをプログラミング分野に移すと、次のようなものが得られます。

 if(c=GetValue())
 {...}

これは実際には以下を意味します:

 c = GetValue();
 if (c != 0)
 {....}

すべてのC/C++プログラマは理解していますが、別のプログラミング言語から来た人を完全に困惑させます。

17
James Curran

参照 http://en.wikipedia.org/wiki/Programming_idiom

プログラミングイディオムは、パターン、アルゴリズム、またはコードを構造化する方法です。プログラミングイディオムについて話すことは、コードで頻繁に繰り返されるパターンについて話したり、新しいパターンを提案したりすることです。

イディオム、特に大きなイディオムに精通していることの利点は、コードを見ると数行のコードが見られることですが、特定のイディオムに精通しているため、コードを精神的に表現し、その代わりに単一のイディオムとして考えることができます。必ず各行を個別に読んで理解する必要があります。

コードが慣用的ではないと言うことは、人間の読者がコードについて効果的に考えることができるような方法でそれ自体を構成しないことを言うことです。

11
Sam Hasler

WikiPedia から:プログラミングイディオムは、1つ以上のプログラミング言語で繰り返し発生する構成を表現する手段です。

私はあなたがすでにその道を進んでいると思います!

2
Mat Nadrofsky

大規模なプログラムは小規模なプログラムから成長するため、その正確性が確認された標準のプログラム構造(イディオムと呼ばれる)を開発し、実証済みの価値のある組織的手法を使用してそれらをより大きな構造に結合する方法を学ぶことが重要です。

プログラマーは優れたアルゴリズムとイディオムを習得する必要があります。

Alan J.Perlis- SICP序文

2
Ahmad Ajmi

イディオムは言語学からの用語です。それは文字通り発言を意味しない単語のグループです。たとえば、気分が悪いときに誰かが「天候の下にいる」と言います。その特定のフレーズは乗客について話している船員から来ました、船酔いの乗客は船の動きがより少ない「天気」デッキの下に行きます。しかし、私たちのほとんどは船員ではなく、このフレーズの文字通りの意味を知りません。

多くのプログラミングでは、たとえ英語の単語であっても、ほとんどの命令は一般の人には理解されません。たとえば「forループ」。プログラマにとっては理にかなっていますが、他のほとんどの人にとってはそうではありません。

2
Jim C

イディオムは、いくつかの場所で識別できる「パターン」です

特定のプログラミング言語とは関係がないとは思いません。

Iterator foo;
foo.reset();
while (foo.next())
{
    print(foo.value());
}

それは私が「for each」イディオムと呼ぶもののスニペットであり、多くの言語でわずかに異なって表現されます。

イディオムのもう1つの優れた例は、Socketです。ソケットがあると主張するすべてのプラットフォームは、概念的にはすべて同じように動作します。つまり、それらはすべてほぼ同じインターフェースを持っています。

2
Zuu

イディオムは、特定の言語に固有の何かを言う方法です。たとえば、以下は 英語のイディオム の一部です。

これを外挿して、コンセプトをプログラミングに適用できます。

1
Aaron Palmer

早期にわだちに入る:同じ方法で同じプロセスを実行します。イディオムを蓄積します。標準化。シェイクスピアとあなたの唯一の違い(!)は、彼のイディオムリストのサイズであり、彼の語彙のサイズではありませんでした。

  • ALAN PERLIS、プログラミングのエピグラム

http://www.cs.yale.edu/quotes.html

1
ibm2100

それは イディオマティック 単語の意味に由来します イディオム プログラミングでの言葉は、単語の合計以上の意味と含意を運ぶフレーズとして要約できます。プログラミングでは、ほとんどのコードスニペットは実際には慣用的です。 '言語の自然な表現モードに準拠または準拠している'

プログラミングイディオムは、さまざまなケースに転送可能なソリューションのクラスを説明するものと考えることができます。考慮してくださいwhile { ... }do {} whileこれらは慣用的なもので、同じ単語が含まれていますが、順序には重要な違いがあります。正確な表現は言語によって異なりますが、基本的な意味と意味は異なります。例えば ​​do {} whileは、実装に使用する言語やステートメントに関係なく、常に1回実行されます。イディオムとして、それはアイデアの伝達可能な形です。多くの状況で使用でき、異なる単語(ステートメント/コマンド)で表現できますが、基本的な結果は常に同じです。

0
Martin Spamer