2

sumおもちゃの言語の可変アリティ関数を定義しています。引数なしで呼び出して返すことを許可するのは自然なことのように思えます0が、実際の言語(およびその実装)はそれらの間で一致しません。

ゼロを返すことが例外をスローするよりも正しくないユースケースはありますか?

4

2 に答える 2

5

数学的に言えば、空和(数値なしの合計)はゼロと定義されます。数学的に正確に言うと、ここではゼロを返すことが適切な選択のようです。この場合に例外をスローすると、関数の使用が複雑になる可能性があります。これは、何らかの方法で引数を指定しない場合に備えて、各呼び出しをtry/catchで保護する必要があるためです。

お役に立てれば!

于 2012-07-03T21:41:53.177 に答える
0

ゼロを返さないようにする必要がある状況が1つあります。言語が動的に型指定され、+数値以外の型を操作できると仮定します(たとえば、Pythonのように文字列を連結する場合があります)。次に、空の合計は、概念的にどのようなものを合計するかについてあいまいです。結果を数値の場合は0、文字列の場合は ""、リストの場合は[]などにすることができます。

あなたの言語がそのような場合は、(1)とにかく0を返し、数値以外sum(things)+other_thingは等しくないことを受け入れる、(2)例外をスローする、(3)に追加すると0のように動作する特別な値を返すことを選択できます。sum(things together with other_thing)文字列などに追加された場合の「」のような数字、または(4)とにかく(たとえば)0を返し、0+""は""またはそのようなものに等しいと言います。言語がおもちゃ以外のものであるというわずかな危険がある場合は、#4を行わないでください。

ああ、そして別の関連するケースがあります:あなたの言語が静的に型付けされているが、強力な型推論メカニズムを持っていると仮定します。次に、数値の合計と文字列の合計を区別し、2つの場合で異なるものを返す場合があります。(しかし、すべてを機能させるには、非常に洗練された型システムが必要です。おもちゃの言語では気にしないと思います。)

于 2012-07-03T21:54:39.633 に答える