• 3181阅读
  • 0回复

do...while(false)的探讨 [复制链接]

上一主题 下一主题
离线cai
 

只看楼主 倒序阅读 0楼 发表于: 2005-10-04
转自:泽欣 http://www.javayou.com/showlog.jspe?log_id=700&cat_id=3


今天看到微软网站上的脚本(就javascript脚本源码来说,微软比google是开放的),发现了很多 do{......}while(false) 这样的代码,乍一看来,好像是相当多余的。因为教科书里都告诉我们,do...while 是一种循环语句,非常类似于while 循环,只是它在每次循环结束时检查表达式是否为真,而不是在循环开始时。那么 do{...}while(false)的写法说明 do{} 中的部分也只会执行一次,那这样的写法有什么必要呢?

通过细看明微软的代码,明白了其意,举例来说:
  1. function LTrim(s){
  2. try{
  3. do{
  4.   if(null==s||s.length<=0)
  5.   break;
  6.   var whitespace=" \t\r\n";
  7.   if(whitespace.indexOf(s.charAt(0))>=0){
  8.   var len=s.length;
  9.   var index;
  10.   for(index=0;index
  11.   if(whitespace.indexOf(s.charAt(index))<0)
  12.     break;
  13.   }
  14.   if(index
  15.   s=s.substring(index);
  16.   else s="";
  17.   }
  18. }while(false);
  19. }catch(Ab){
  20. s="";
  21. }
  22. return s;
  23. }

这个函数是用来去掉字符串前端的空白,我不多说,代码很简单,为什么要使用do...while(false)的用意就在于在do{}的过程中可以break,使得函数唯一的出口就是最后一行的return。

标题我本来想叫做 "do...while(false)的妙处",后来又觉得不妥,于是最后两字改成了探讨,我想一定会有人不屑或反对do...while语法这样的运用,也会有人赞同,见仁见智。

也看过不少 java 的源码,这样的写法相当少,也许对于jvm来说,这样的效率反而是降低的,我没有用javap来做一番分析,因为我对虚拟机没有深入的了解。有朋友有兴趣如果能给出详细的比较,不甚感激。

就我个人的意见,如果一个函数很长,有多处return的可能的话,do...while(false)还是有助于避免一些隐患的。
快速回复
限100 字节
 
上一个 下一个