我真正喜欢IDE的一个方面是能够“最小化”代码段,以便:
while(conditions){
// Really long code...
}
可以成为:
while(conditions){ // The rest is hidden
我的问题是这样的东西是否可以接受格式化
// Code
{
// More code
}
// Code
我知道在括号内完成的任何事情都有限制范围,但我也可以在外部范围内编辑变量。
所以,对于一个简短的,不必要的例子
int x = 1;
{ // Create new variable, add and output
int y = 2;
cout << x + y;
}
会变成:
int x = 1;
{ // Create new variable, add and output (The rest of the code is hidden)
那么这可以接受,还是避开?
这是我想要隐藏的一个真实例子。
/// Add line to msg vector
// Check to see if each side X is needed
if(uniqueSide && line == 1){
// Create stringstream to hold string and int (e.g. "Message " + 1 + " - Side " + 1
stringstream tempString;
// Add full line to stringstream. validMessages.length() + 1 will make Message X be incremental
tempString << "Message " << (validMessages.length() + 1) << " - Side " << numSide;
// Then append full string (e.g. "Message 1 - Side 1") to msg
msg.append(tempString.str());
}
// Else just add Message X using same method as above
else if(line == 1){
stringstream tempString;
tempString << "Message " << (validMessages.length() + 1);
}
// Add each line to msg vector with double space indent and (width) before each line
stringstream tempString;
tempString << setprecision(5) // Makes width be output as 10.325 or 100.33
<< " (" << width << ") " << tempInput
msg.append(tempString.str());
感谢。
答案 0 :(得分:5)
至少在我看来,如果你需要(甚至想要)这么多,你可能不会很好地构建你的代码。
隐藏代码的兴趣往往表明你可能有太多代码被挤在一起,最好分成更有意义的函数或(通常更好)通用算法。
我想详细介绍一些有关如何改进代码的更具体的建议,但是当问题如此笼统,并且它包含的小代码缺少任何上下文时,很难做到这一点,所以它是几乎不可能猜出它代表什么,这是你需要做的第一件事来改善它。
那就是说:作为一般规则,我认为添加一个不受流控制语句控制的块是完全合理的 - 但是通常 来控制对象的生命周期 - 如果你想要创建和销毁的东西,使用RAII对象并把它放在一个块中,所以当执行退出块时,它会被自动销毁。
编辑:至少在我看来,你的样本看起来很成熟(过期了?)进行了一些严肃的重构。
/// Add line to msg vector
// Check to see if each side X is needed
if(uniqueSide && line == 1){
// Create stringstream to hold string and int (e.g. "Message " + 1 + " - Side " + 1
stringstream tempString;
// Add full line to stringstream. validMessages.length() + 1 will make Message X be incremental
tempString << "Message " << (validMessages.length() + 1) << " - Side " << numSide;
// Then append full string (e.g. "Message 1 - Side 1") to msg
msg.append(tempString.str());
}
// Else just add Message X using same method as above
else if(line == 1){
stringstream tempString;
tempString << "Message " << (validMessages.length() + 1);
}
现在,你的else
子句并没有真正做任何事情(在tempString
放置一些东西,但那是本地的,所以它在从块中退出时消失。让我们假设评论是正确的,所以其他应该有:
msg.append(tempString.str());
退出之前。在这种情况下,代码的两条腿足够相似,它们应该(大部分)合并:
stringstream tempString;
tempString << Message << validMesssages.length()+1;
if (uniqueSide && line == 1)
tempString << " - Side " << numSide;
msg.append(tempString.str());
然后,由于最后一部分是无条件执行的,我们可以将其余的代码与前面的代码合并(并且在此过程中,消除了相当多的代码,因此我们最终得到类似的东西:
stringstream tempString;
if (line == 1) {
tempString << "Message " << validMesssages.length()+1;
if (uniqueSide) tempString << " - Side " << numSide;
}
tempString << setprecision(5) << " ( " << width << " ) " << tempInput;
msg.append(tempString.str());
从那里开始,问题在于将它转换为函数或函子是否有意义,因此调用代码最终会像:
msg.append(msg(line, validMessages, uniqueSide, numSide, width, tempInput));
你是否愿意这样做,只有你可以说。就个人而言,我认为这取决于你是否在许多地方编写类似的代码。如果这是唯一一个像这样的代码的地方,我可能会离开它,但如果你需要两个(或更多)位置的相同代码,一个函数开始变得更有意义。