0

私が知る限り、これは:

$2 > 50{print}

これとまったく同じように機能します。

{if ($2 > 50) print}

どちらを使用する必要がありますか、それともスタイルの問題ですか?

4

4 に答える 4

2

2番目のものは私の意見でははるかに読みやすいです(特にあなたのコードを維持しなければならないかもしれない非awkの達人のために)。

于 2012-05-22T00:43:06.377 に答える
2

ほとんどスタイルです。最初の例は正規の AWK です。もちろん、if申告が必要な場合もあります。

次のことを考慮してください。

$2 > 50 {foo; print}

次の場合、27 文字に対して 20 文字かかります。

{if ($2 > 50) {foo; print}}

スペースを削除すると、22 文字に対して 16 文字になります。

したがって、経済性(実際のキャラクターとビジュアルの両方)に関心がある場合は、前者がより望ましいです。

potong が指摘してifいるように、複数のステートメントがある場合、フォームには中かっこが必要です (上記の 2 番目の例で示したように)。ステートメントが 1 つしかない場合、それらはオプションです。これは、中括弧を追加せずに記述し、後で追加のステートメントを追加すると、微妙なバグの原因となります。また、スクリプトの読者にとっては、中かっこが含まれていると意図がより明確になります。

于 2012-05-22T00:50:57.460 に答える
1

はい、同じです。ほとんどの代替構文と同様に、トレードオフがあります。

私は John3136 の意見にほぼ同意します。2 番目のフォームは、c、c++、C#、Java などのバックグラウンドを持つ人に理解される可能性が高いということです。

Dennis Williamson が指摘するように、if (...)フォームを使用しなければならない場合もあります。

1行の場合、最初の形式が便利で受け入れられ、awkの主要な設計、つまり [pattern]-[action] (オプションであるか、デフォルトの動作を提供する) を強化するのに役立つと思います。

comp.lang.awk を見ると、ベテランは主にスタイル 1 を好むことがわかります。

私の目には、スタイル 1 の大きなコード ブロックは読みにくいですが、lex コードのように見えます。

だから....依存します;-) ....おそらく非awkの専門家によって最終的に維持されるコードを書いていますか?次に、スタイル 2 に固執します。錆びないように両方使いましょう!

これが役立つことを願っています。

于 2012-05-22T00:50:53.117 に答える
1

はい、それらは同じです。

最初のフォームでは、{ print }これがデフォルトのアクションであるため省略できます。したがって、それも機能します。

$2 > 50
于 2012-05-22T03:53:11.530 に答える