3

条件演算子をステートメントとして使用できないのはなぜですか?

私は次のようなことをしたいと思います:

boolean isXyz = ...;
...
isXyz ? doXyz() : doAbc();

ここでdoXyz、およびdoAbcはvoidを返します。

これは他の演算子と同じではないことに注意してください。たとえば、doXyz()+ doAbc()は、本質的に、doXyzとdoAbcが数値のようなもの(または連結する文字列など)を返す必要がありますが、ポイントは実際には操作するには値が必要です)。

何か深いものがありますか、それとも単なる恣意的な決定ですか。

:私はJavaの世界から来ましたが、これがお気に入りのプログラミング言語で可能かどうか知りたいです。

4

7 に答える 7

5

CそしてC++、そのような構成を許可します。doXyz()同じタイプをdoAbc()返す限り。を含むvoid

于 2009-09-03T10:25:04.340 に答える
2

ポイントは何でしょうか?なぜifステートメントを使用しないのですか(私の意見では、これはよりきれいに見えます)?

于 2009-09-03T10:21:04.910 に答える
1

読みやすさが低下し、エラーが発生する可能性があるためです。

言語は、キーワード「if」を使用して、あなたが望むことを行う手段を提供します。

// Is not much longer than the line below
// but significantly more transparent
if (isXyz) doXyz() else doAbc();

isXyz ? doXyz() : doAbc();

ステートメントは、いくつかの操作を実行するだけであると想定されています。

条件演算子は、値を返すことを目的としています。

于 2009-09-03T10:19:48.020 に答える
1

目新しさとして、mIRCscriptingはこれを可能にします

alias canI? {
   $iif($1 == 1,doThis,doThat)
}
alias doThis echo -a this can.
alias doThat echo -a that can.

で呼び出す/canI? 1とエコーしthis canます。で呼び出す/canI? 2とエコーしthat canます。

于 2009-09-03T10:25:08.553 に答える
0

ifこれはステートメントとまったく同じではないでしょうか?

if (isXyz) doXyz(); else doAbc();

一部の言語では、条件演算子をステートメントとして使用できます。Perlが思い浮かびます。

于 2009-09-03T10:20:27.317 に答える
0

条件式を含む式は、Javaや他の多くの言語でステートメントとして単独で使用できます(現在最も人気のある言語と言っても過言ではありません)。

ここで問題となるのは、特にJavaでの「void-returning」であり、条件とは何の関係もありません。式の中にアクティブな(べき等ではない、副作用のある)コードを隠すのは悪い味と見なされることがあり、アクティブな関数はしばしばvoidを返します。したがって、Javaは規範的な言語であるため、式でvoid関数を使用することはできません。他の多くの言語はより寛容であり、それを可能にします。

doAbcとdoXyzに何か(ゼロ、ブール値など)を返すようにすることで、これを回避できます。両方で同じ型である限り、結果はExpressionStatementに破棄されます。しかし、なぜあなたがそうしたいのか、私にはよくわかりません。他の人が言っているように、これは確かに表現でそれを行うことは味が悪く、ほとんど無意味である場合です。

于 2009-09-03T11:11:30.580 に答える
0

あなたの質問は間違った方法だと思います。「IFTHEN」ステートメントを評価ステートメントとして使用できなかったため、条件演算子が追加されました。

私のオプションでは、条件付きで評価する場合にのみ条件付き演算子を使用する必要があります。これは、純粋に条件を実装するときに「IFTHEN」構文を使用するよりも本質的に明確ではないためです。

条件演算子は通常、各条件結果に複数の命令のブロックを含めることはできません。「IFTHEN」は含めることができます。

于 2009-09-03T11:34:06.920 に答える