そもそもこのタイプの構文を使用する理由として、明確な理由はありません。
一般に、離れた場所で任意に見えるブール引数を持たないようにしてください。includeManagement
(ほとんどの場合)結果に大きく影響します。しかし、この議論は「重みが少ない」ように見えます。
enumの使用について説明しましたが、引数が「重みを増やす」ように見えるだけでなく、メソッドのスケーラビリティも提供します。ただし、これはReturnEmployeeIds
-methodがWhatToInclude
-enumに合わせてスケーリングする必要があるため、すべての場合に最適なソリューションではない場合があります(NiklasJの回答を参照)。これは後で頭痛の種になるかもしれません。
これを考慮してください:WhatToInclude
-enumをスケーリングし、ReturnEmployeeIds
-methodをスケーリングしない場合。その後、スローArgumentOutOfRangeException
(ベストケース)または完全に不要な(null
または空のList<Guid>
)何かを返す場合があります。場合によってはReturnEmployeeIds
、ソースコードがすぐに利用できないクラスライブラリにいる場合は特に、プログラマを混乱させる可能性があります。
訓練生がすべての「サブセット」であることがわかると、それWhatToInclude.Trainees
がうまくいくと仮定しWhatToInclude.All
ます。
これは(もちろん)実装されている方法 によって異なりReturnEmployeeIds
ます。
ブール引数を渡すことができる場合、代わりに2つのメソッド(または必要に応じてそれ以上)に分割しようとします。一つは抽出かもしれないReturnAllEmployeeIds
、ReturnManagementIds
とReturnRegularEmployeeIds
。これはすべての基盤をカバーし、それを実装する人には絶対に自明です。これには、前述の「スケーリング」の問題もありません。
ブール引数を持つものの結果は2つしかないためです。2つのメソッドを実装すると、余分な労力はほとんどかかりません。
コードが少ないほど、改善されることはめったにありません。
これは言って、そこにある明示的に引数を宣言し、読みやすさを向上させるいくつかのケースでは。例えば考えてみてください。GetLatestNews(max: 10)
。GetLatestNews(10)
はまだ一目瞭然です。の明示的な宣言は、混乱max
を解消するのに役立ちます。
また、ブール引数が絶対に必要な場合は、true
またはを読み取るだけではその使用法を推測できませんfalse
。それから私は言うだろう:
var ids = ReturnEmployeeIds(includeManagement: true);
..は絶対的に優れており、より読みやすくなっています。
var ids = ReturnEmployeeIds(true);
2番目の例では、true
は何でも意味する可能性があるためです。しかし、私はこの議論を避けようとします。
boolean
メソッド引数を使用する必要がありますか?