2012-08-09 6 views
5

私は場所の多くで使われています一般的に使用されているユーティリティ関数の中で、void戻り値の型を変更すると何か問題がありますか?

public void usefulUtility(parameters...) { 
    string c = "select * from myDB"; 
    do_a_database_call(c); 
} 

のような機能を持っている場合、それを変更することで任意の害を及ぼす可能性があります:

public bool usefulUtility(parameters...) { 
    string c = "select * from myDB"; 
    bool result = do_a_database_call(c); 
    return result; 
} 

これはおそらく任意のコードを壊してもらえますか?

私は何も考えることができません...しかし、それは可能かもしれませんか?

+2

[はい](http://blogs.msdn.com/b/ericlippert/archive/2012/01/09/every-public-change-is-a-breaking-change.aspx) – Servy

+1

Servyは技術的には正解ですが、 'void'戻り型から' string'戻り型に進むと、顧客のコードは損なわれません。 – jp2code

+1

@ jp2codeはい、実際は可能です。私が書いた答えを見てください。この記事では例としてその記事を使用していませんが、公開されている変更は大きな変更であると主張しています。 – Servy

答えて

3

はい、事実上、パブリックインターフェイスに影響を与える可能性のある事柄は大きな変化です。あなたが気にしないほど小さくても、ほとんど誰も、あるいはほとんど誰もコーナーケースを打つことは実際には起こらないかもしれませんが、Eric Lippert explainsはエッジケース(多くはタイプ推論を伴う)があり、これらの一見無害な変化が壊れる。

特定の例では、このコードはその変更によって壊れます。

Action a = usefulUtility; 
+0

しかし、元のバージョンは 'null'を返すので、元のバージョンに' a'を割り当てる方法はありません。正しい? – jp2code

+2

私はLippertの投稿のカタログを私の頭の中に残している唯一の人ではないらしい。@jp2codeこの場合、彼はusefulUtilityメソッドを呼び出さず、デリゲート定義が変更されたために破損するActionメソッドのデリゲートとして保存しています。 –

+0

@ jp2codeこのコードはvoid戻り値の型でうまくいきます。文字列を返すように変更された後はコンパイルされません。 – Servy

0

実際にコンパイルするメソッドにはStringまたはnullを返す必要があります。あなたはもはや戻りなしでメソッドを終了することはできません。

+4

私は彼が "これがライブラリの機能であればこれは私のクライアントにとって大きな変化ですか?" – Servy

1

それは確かに、それはいくつかの他のコードを壊す可能性があり可能です。 Lippertが指摘するように、ほぼEvery public change is a breaking changeという奇妙な状況では、

さらに重要な質問は、は何かを壊す原因となり、答えはノーです。この変更を行うのはかなり安全です。人々が問題を引き起こすためにしなければならない奇妙な種類のことを行う可能性は低いからです。それは他のコードを破ることは不可能ではありませんが、合理的な責任の範囲外です。

+0

影響は、ライブラリがどのように使用されているか(尤度に加えて)の関数でもあります。 BCLメソッドの場合でも、非常にありそうもない状況がまだまだ出てきます。絶対的な数字の点でかなりの場合があります。あなたの会社内のプロジェクトのほんの一部にしか使用されていないライブラリであれば、場合によってはまったく起こらないかもしれません。 – Servy

0

何も壊さないようにしたい場合は、Stringを別の名前に戻すメソッドを与え、voidメソッドのシグネチャをそのままにします。

2

このような変更は、バイナリ互換性とソースの互換性の両方に関して、間違いなく不具合を引き起こす可能性があります。

this StackOverflow answerとそれに関連するスレッドをご覧になりたい場合があります。ここでは、APIの変更点について深く説明します。

+0

ああ!私はあなたのリンクの代理人への参照を参照してください。私はそれを考えなかった。 – jp2code

関連する問題