do while(false) :提高代码质量
来源:互联网 发布:河北易众网络 编辑:程序博客网 时间:2024/05/16 04:36
do while(false) :提高代码质量
经常会遇到这样的情况,一大段代码,中间遇到某种情况,比如someObj == null,需要跳出这段代码,但是又不在循环之中,只好处理成这样:
if(someObj != null){
//doSomething
if(someOther fit someCondition){
}
}
最后造成一大堆括号,写起来不舒服,可读性也很差。
巧用do...while(false)可以解决这个问题,看下面的代码:
function LTrim(s){
try{
do{
if(null==s||s.length<=0)
break;
var whitespace=" /t/r/n";
if(whitespace.indexOf(s.charAt(0))>=0){
var len=s.length;
var index;
for(index=0;index if(whitespace.indexOf(s.charAt(index))<0)
break;
if(index s=s.substring(index);
else s="";
}
}while(false);
}catch(Ab){
s="";
}
return s;
}
这个函数是用来去掉字符串前端的空白。使用do...while(false)的用意就在于在do{}的过程中可以break,使得函数唯一的出口就是最后一行的return。
嗯,这是一个不错的方法。以后可以采用,避免过多的嵌套括号。
另一个好处:
比如你想用一个宏,其中包括多行代码。怎么办?这样写?:
#define mymacro(p) statement1; statement2
如果你需要将这个mymacro放到if里用:
if(cond)
mymacro(p);
else
something else
那么我想各位都看出问题了吧?
好的,一种解决方案是用{}括住宏中的两句话:
#define mymacro(p) {statement1; statement2;}
这回看上去是没问题了吧?试试看还是不行。在
mymacro(p);
这样的调用中会出现问题:}后面多了一个;。mymacro(p);被展开为:
{statement1; statement2;};
尽管在C中;可以单独用作一行,但在}后面加;却是错误的。
这时候就是do-while大显身手的时候了:
#define mymacro(p) do { statement1; statement2; } while(FALSE)
看,
mymacro(p);
被解释为:
do { statement1; statement2; } while(FALSE);
这回就没问题了!在这里,我们说do-while“吸收”了多余的分号。
这里有两个问题:
1 因为while的条件是一个编译时常数FALSE,大多数编译器会对其进行优化(完全消除循环的结构),因此无需担心效率问题;
2 如果你因为担心用一个“循环”来取代代码会产生开销而问出了第一个问题,那么请不要告诉我用函数调用去取消宏。
- do while(false) :提高代码质量
- 关于do while(false)
- 关于do while(false)
- 关于do while(false)
- do while(false)妙用
- do{}while(false)
- 关于do{...}while(FALSE);
- do while(FALSE)
- do{ } while(false)
- do{}while(false)
- do while(false)
- do while(false)
- do{}while(FALSE)知多少
- do...while(false)的妙用
- do{} while(false) 的妙用
- do{ ;}while(false)技巧揭密
- do{...}while(false)的用法
- do{ ... }while(false) 适用场景
- Android AIDL——实现机制浅析
- TaskManager开发中遇到的问题 (Form不可见时,最小化切换为Normal,内部控件不见)
- 单链表三(判断一单链表是不是循环单链表)
- 球形空间产生器 Sphere
- Socket.Connected不能在调试时作为套接字是否连接的判断依据
- do while(false) :提高代码质量
- C#编程积累
- 查询同时更新
- 自由摆渡
- oracle 备份还原
- LINUX Ifconfig没网卡
- 常用的一些动作 色彩渐变 转动、颤动 跳动 闪烁 放大 缩小
- C# 按F1键打开帮助
- 异常