你什么时候使用代码块?

Luc*_*nes 4 .net c# coding-style codeblocks curly-braces

什么时候在C/C++/C#等中使用代码块?我知道它们背后的理论原因,但你什么时候在实际程序中使用它们?

编辑:我刚刚意识到我在switch语句中使用它们,否则变量将在相同的范围内(对于类似的东西i):

switch (x) { case "abc": { /* code */ } break; }
Run Code Online (Sandbox Code Playgroud)

等等(只是为了澄清,在switch语句中,额外的括号不是必需的.)


有关:

Pau*_*ane 10

我有时,但很少使用裸代码块来限制范围.例如,请使用以下代码:

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

double bathroomTemperature = ReadTemperature(Room.Bathroom);
database.Store(Room.Bedroom, bedroomTemperature);
Run Code Online (Sandbox Code Playgroud)

乍一看代码看起来很好,但包含一个微妙的复制面食错误.在数据库中,我们存储了两个读数的卧室温度.如果它被写成:

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

{
    double bathroomTemperature = ReadTemperature(Room.Bathroom);
    database.Store(Room.Bedroom, bedroomTemperature);
}
Run Code Online (Sandbox Code Playgroud)

然后编译器(如果足够智能,甚至是IDE)都会发现这一点.

但是,有90%的时间可以重构代码以使裸块不必要,例如上面的代码可以更好地编写为循环或两次调用读取和存储温度的方法:

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

虽然裸体块有用.