スコープを制限するためにネイキッド コード ブロックを使用することは、ときどきありますが、めったにありません。たとえば、次のコードを見てください。
double bedroomTemperature = ReadTemperature(Room.Bedroom);
database.Store(Room.Bedroom, bedroomTemperature);
double bathroomTemperature = ReadTemperature(Room.Bathroom);
database.Store(Room.Bedroom, bedroomTemperature);
コードは一見問題ないように見えますが、微妙なコピペ エラーが含まれています。データベースには、両方の測定値の寝室の温度が保存されています。次のように記述されていた場合:
{
double bedroomTemperature = ReadTemperature(Room.Bedroom);
database.Store(Room.Bedroom, bedroomTemperature);
}
{
double bathroomTemperature = ReadTemperature(Room.Bathroom);
database.Store(Room.Bedroom, bedroomTemperature);
}
そうすれば、コンパイラ (または十分に知的な場合は IDE でさえ) がこれを見つけたでしょう。
ただし、90% の確率で、ネイキッド ブロックを不要にするためにコードをリファクタリングできます。たとえば、上記のコードは、温度を読み取って保存するメソッドへのループまたは 2 回の呼び出しとして記述したほうがよいでしょう。
foreach (Room room in [] { Room.Bedroom, Room.Bathroom })
{
double temperature = ReadTemperature(room);
database.Store(room, temperature);
}
ただし、裸のブロックが役立つ場合もあります。