当前位置:  开发笔记 > 编程语言 > 正文

你什么时候使用代码块?

如何解决《你什么时候使用代码块?》经验,为你挑选了1个好方法。

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

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

switch (x) { case "abc": { /* code */ } break; }

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


有关:

你是否使用花括号进行额外的范围设计?(/sf/ask/17360801/)

Paul Ruane.. 10

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

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%的时间可以重构代码以使裸块不必要,例如上面的代码可以更好地编写为循环或两次调用读取和存储温度的方法:

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

虽然裸体块有用.



1> Paul Ruane..:

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

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%的时间可以重构代码以使裸块不必要,例如上面的代码可以更好地编写为循环或两次调用读取和存储温度的方法:

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

虽然裸体块有用.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有