後で誤って変数を使用するのを避けるために、中かっこを使用してコード ブロックを分離することがあります。たとえばSqlCommand
、同じメソッドに複数の を配置するときは、コード ブロックを頻繁にコピーして貼り付け、最後に名前を混ぜ合わせていくつかのコマンドを 2 回実行します。中括弧を追加すると、この状況を回避するのに役立ちSqlCommand
ます。間違った場所で間違ったものを使用するとエラーが発生するためです。以下に図を示します。
Collection<string> existingCategories = new Collection<string>();
// Here a beginning of a block
{
SqlCommand getCategories = new SqlCommand("select Title from Movie.Category where SourceId = @sourceId", sqlConnection, sqlTransaction);
getCategories.Parameters.AddWithValue("@sourceId", sourceId);
using (SqlDataReader categoriesReader = getCategories.ExecuteReader(System.Data.CommandBehavior.SingleResult))
{
while (categoriesReader.Read())
{
existingCategories.Add(categoriesReader["Title"].ToString());
}
}
}
if (!existingCategories.Contains(newCategory))
{
SqlCommand addCategory = new SqlCommand("insert into Movie.Category (SourceId, Title) values (@sourceId, @title)", sqlConnection, sqlTransaction);
// Now try to make a mistake and write/copy-paste getCategories instead of addCategory. It will not compile.
addCategory.Parameters.AddWithValue("@sourceId", sourceId);
addCategory.Parameters.AddWithValue("@title", newCategory);
addCategory.ExecuteNonQuery();
}
これで、StyleCop はブロックが空の行に続くたびに警告を表示します。一方、空行を入れないと、コードが理解しにくくなります。
// Something like:
Collection<string> existingCategories = new Collection<string>();
{
// Code here
}
// can be understood as (is it easy to notice that semicolon is missing?):
Collection<string> existingCategories = new Collection<string>()
{
// Code here
}
そう、
可変スコープの目的のためだけに中括弧を使用してコードのブロックを作成することに何か問題がありますか?
よろしければ、StyleCop の規則に違反せずに読みやすくするにはどうすればよいでしょうか?