• break 的一个“高级用法”(转)


    转载:http://blog.csdn.net/lovelan1748/article/details/5321558

    本小节不是很适于没有多少实际编程经历的初学者,所以初学者可以跳过,以后再回头阅读。当然,所谓的“高级用法”的确是应该加对引号的,所谈的内容只是一个高手们常用小小技巧。

    使用do...break...while简化多级条件判断的结构。

    如果你写过不少代码,那么一定会不时遇到类似下的情况:

    假设要找到文件A,复制该文件为B;然后打开B文件,然后往B文件内写入一些内容;最后在写入成功后,我们需要再进行一些相关操作。

    在此过程,遇到以下情况时将放弃后续的操作,认为是操作失败:

    1、如果A文件不存在;

    2、如果B文件已经存在,并且询问用户是否覆盖时,用户回答“不”;

    3、无法复制出B文件;

    4、无法打开B文件;

    5、无法写入B文件;

    6、无法正常关闭B文件。

     

    用伪代码写该段程序为:

     1 if( A文件存在 )   
     2   
     3 {   
     4   
     5     执行A文件的相关操作;   
     6   
     7     if( B文件不存在 || 用户允许覆盖原有B文件)   
     8   
     9     {   
    10   
    11         复制A文件为B文件;   
    12   
    13         if(复制文件成功)   
    14   
    15         {   
    16   
    17             打开B文件;   
    18   
    19        if(打开文件成功)   
    20   
    21              {   
    22   
    23                 写入文件;   
    24   
    25          if(写入成功)   
    26   
    27          {   
    28   
    29                     关闭B文件;   
    30   
    31                     if(关闭成成功)   
    32   
    33            {   
    34   
    35                        执行其它必须在一切成功后进行的操作。   
    36   
    37              ……     
    38   
    39                      }   
    40   
    41                  }   
    42   
    43              }       
    44   
    45         }   
    46   
    47     }   
    48   
    49 }   
    50   
    51     

    可能有些操作和判断可以同时处理,但这个程序的繁琐仍然不可避免,而现实中程序的复杂性往往要远过于此例。从语法上看,这个例子没有任何错误,但它的一层套一层的条件判断却让人难以书写,阅读,调试,在复杂的情况就容易造成人为的错误(比如最马虎的,花括号匹配不对等……)。

     

    同样一段代码“程序老鸟”是这样写的:

     1 do  
     2   
     3 {  
     4   
     5    if(A文件不存在)  
     6   
     7       break;  
     8   
     9    执行A文件的相关操作;   
    10   
    11     
    12   
    13    if(B文件存在 && 用户不允许覆盖)  
    14   
    15       break;  
    16   
    17      
    18   
    19    复制A文件为B文件;  
    20   
    21    if(复制不成功)  
    22   
    23       break;  
    24   
    25    
    26   
    27    打开B文件;  
    28   
    29    if(打开B文件不成功)  
    30   
    31       break;  
    32   
    33    
    34   
    35    写入文件;  
    36   
    37    if(写入文件不成功)  
    38   
    39       break;  
    40   
    41    
    42   
    43    关闭B文件;  
    44   
    45    if(关闭不成功)  
    46   
    47       break;  
    48   
    49     
    50   
    51     执行其它必须在一切成功后进行的操作。   
    52   
    53   ……     
    54   
    55 }  
    56   
    57 while(false);  

    看,代码是不是“直”了很多?这里用了do..while,可是根本不是为了循环,而是为了使用它的break功能。每当有操作不成功,就直接用break跳出循环。所以循环条件总是一个“永假” false。

    在一个程序中,这种结构相当的多,为了更加一步淡化while的原来的循环用途,我们非常值得在代码加入两个共用的宏:

    #define  BEG_DOWHILE do {

    #define  END_DOWHILE } while(false);

     

    这里举的是do...while结构,在某些情况下,可以使用while...来实现类似功能。

  • 相关阅读:
    JSP源码、改写Servlet为JSP、查看转译成为Servlet的文件、JSP字符编码设置
    使用Tomcat部署应用
    缓冲与缓存
    过滤器及请求封装器实现字符编码
    过滤器与请求封装器实现字符替换
    过滤器
    与请求相关的监听器
    区块链简介
    https协议简介
    http协议简介
  • 原文地址:https://www.cnblogs.com/benchao/p/5761136.html
Copyright © 2020-2023  润新知