メソッド名が「Try」で始まる場合の意味について同僚と話し合っていました。
以下の意見がありました。
- メソッドが null 値を返す可能性がある場合は、"Try" を使用します。
- メソッドが例外をスローしない場合は、「Try」を使用します。
正式な定義は?メソッド名の「Try」は何と言っていますか? これに関する公式のガイドラインはありますか?
メソッド名が「Try」で始まる場合の意味について同僚と話し合っていました。
以下の意見がありました。
正式な定義は?メソッド名の「Try」は何と言っていますか? これに関する公式のガイドラインはありますか?
これはTryParseパターンと呼ばれ、Microsoft によって文書化されています。公式の例外とパフォーマンスの MSDN ページには次のように書かれています。
例外に関連するパフォーマンスの問題を回避するために、一般的なシナリオで例外をスローする可能性があるメンバーの TryParse パターンを検討してください。
したがって、通常の使用例では例外がスローされる可能性がある (int の解析など) コードがある場合、TryParseパターンは理にかなっています。
(訂正) Erik が提案したように、公式のガイドラインがあります。
メソッドを見るTrySomething
と、それを想定しています
bool
Something
自分で例外を処理できるメソッドが存在します。(編集、Jesse Webbの提案)try
進めたいときに使うといいと思います。メソッドが何らかの値を返すかどうかは問題ではありません。
ケース 1: 正常に返された場合は、何らかの方法で続行できます。
ケース 2: 戻らない場合: それでも問題ありません。他の方法で進めることができます。
そして、そのメソッドの出力として何らかの値が期待される場合は、out
パラメーターを使用してください。
int value
if (dictionary.TryGetValue("key", out value))
{
// Proceed in some way
}
else
{
// Proceed in some other way
}
次の場合は、必ずメソッド名に含めtry
てください。
bool TrySomething(input, out yourReturn)
したがって、基本的にtry
-methods を使用すると、ブール値の結果しか返されません。
したがって、次のコードは例外をスローしません。
string input = "blabla";
int number;
if (int.TryParse(input, out number))
{
// wooohooo we got an int!
} else
{
//dooh!
}
このコードは例外をスローできます (この場合はスローします)。
string input = "blabla";
int number;
try
{
number = int.Parse(input); //throws an exception
}
catch (Exception)
{
//dooh!
}
Try メソッドを使用することは、より安全で防御的なコーディング方法です。また、コード スニペット #2 は、整数でない場合、実行により多くのパフォーマンスが必要です。
メソッド呼び出しが無効な結果を生成する可能性があるという事実を明らかにしたい場合は、メソッド名に「Try」を使用する必要があります。ちなみに、.NET 標準に従うと、これは例外を発生させる関数ではなく、プログラムの観点からすると、何らかの値VALID
または値を返す関数です。NON_VALID
最後に、これはすべて、グループで使用することを決定した命名規則に関するものです。