J'ai parfois, mais rarement, utilisé des blocs de code nus pour limiter la portée. Par exemple, prenez le code suivant:
double bedroomTemperature = ReadTemperature(Room.Bedroom);
database.Store(Room.Bedroom, bedroomTemperature);
double bathroomTemperature = ReadTemperature(Room.Bathroom);
database.Store(Room.Bedroom, bedroomTemperature);
Le code semble bien à première vue, mais contient une subtile erreur pasta copie. Dans la base de données, nous avons stocké la température de la chambre pour les deux lectures. Si elle avait été écrit:
{
double bedroomTemperature = ReadTemperature(Room.Bedroom);
database.Store(Room.Bedroom, bedroomTemperature);
}
{
double bathroomTemperature = ReadTemperature(Room.Bathroom);
database.Store(Room.Bedroom, bedroomTemperature);
}
le compilateur (ou même IDE si elle est assez intelligent) aurait repéré cela.
Cependant, 90% du temps, le code peut être refactorisé pour rendre les blocs nus inutiles, par ex. le code ci-dessus serait mieux écrit en boucle ou deux appels à une méthode qui lit et enregistre la température:
foreach (Room room in [] { Room.Bedroom, Room.Bathroom })
{
double temperature = ReadTemperature(room);
database.Store(room, temperature);
}
blocs nus sont utiles à l'occasion cependant.
Vous pouvez également utiliser ceci: Créez un objet wrapper autour d'une primitive de synchronisation et placez-le sur une pile dans le bloc dont vous avez besoin. De cette façon, vous ne pouvez pas oublier de libérer le verrou. – mkb