読者です 読者をやめる 読者になる 読者になる

ゆるふわで雑な日記

Microsoft系の技術情報を中心にゆるふわに綴っていく予定です

コードレビューの最中、素敵なコードを見かけたので

.NET C# プログラム

晒してみる…

以下原文まま(VBです) [vbnet] Private Function GetPathJoin(meinPath As String, ParamArray joinPath() As String) As String For Each joinstring in joinPath meinPath += "" & joinstring Next return meinPath End Function [/vbnet] 以下機械的にC#にしただけのもの [csharp] private string GetPathJoin(sting meinPath, params string joinPath) { foreach(var joinstring in joinPath) meinPath += "\" + joinstring; return meinPath; } [/csharp]

このコードは業務で実際に作成されたものです。 見ての通り?業務Logicは含まれていません これ、どうなんでしょう? このコードは、private(BL層のclass)に作成されています。 Loopの中で文字列を加算演算子を使って結合しています。 第一引数はstringで、第二引数はstringの可変長引数です [csharp] private string GetPathJoin(params string joinPath) { return string.Join("\" ,joinPath); } [/csharp] このコードと結果は同じでは? 各要素の最後が"\"の場合が想定されていないのが気になります。 全て受け入れたとしても、Path.Combine(params string[])を再作成しているだけだと言うのが特に気になります。 (結果が同じになるとは限らないんですが、目的(文字列要素をPathの構成要素として連結する)がという意味で) 結局、これを書いた方は何を考えていたのかが未だ不明です。 同project内でもPath.Combineは使っているので… 今回はただ愚痴と言うか、文句になっていますが、アンチパターンとして誰かの役に立てばいいなと…