When do you use code blocks?

情到浓时终转凉″ 提交于 2019-11-29 14:57:18

I sometimes, but rarely, use naked code blocks to limit scope. For example, take the following code:

double bedroomTemperature = ReadTemperature(Room.Bedroom);
database.Store(Room.Bedroom, bedroomTemperature);

double bathroomTemperature = ReadTemperature(Room.Bathroom);
database.Store(Room.Bedroom, bedroomTemperature);

The code looks fine at first glance, but contains a subtle copy-pasta error. In the database we have stored the bedroom temperature for both readings. If it had been written as:

{
    double bedroomTemperature = ReadTemperature(Room.Bedroom);
    database.Store(Room.Bedroom, bedroomTemperature);
}

{
    double bathroomTemperature = ReadTemperature(Room.Bathroom);
    database.Store(Room.Bedroom, bedroomTemperature);
}

Then the compiler (or even IDE if it is intelligent enough) would have spotted this.

However, 90% of the time the code can be refactored to make the naked blocks unnecessary, e.g. the above code would be better written as a loop or two calls to a method that reads and stores the temperature:

foreach (Room room in [] { Room.Bedroom, Room.Bathroom })
{
    double temperature = ReadTemperature(room);
    database.Store(room, temperature);
}

Naked blocks are useful on occasion though.

I do the same thing with switch blocks, even though it isn't required. In general, I use code blocks where they either make code more readable (whether that's through giving similar blocks of code a similar appearance or just getting the indenting) or they properly scope variables.

You can get a finally like behavior in C++ by using code blocks and RAII objects.

{
   std::fstream f(filename)
   ...
}

will release the file descriptor in the destructor no matter what causes us to leave the block.

(Personally, I'm still trying to make a practice of this. My c roots hold a death grip on my habits...)

In addition to the obvious ("when required by syntax", like in a switch or a try catch finally),
Whenever you need to treat a block of 2 or more statements as an atomic unit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!