zoukankan      html  css  js  c++  java
  • 反forif编程模式

    这些年来,我看到过大量的反编程模式。我感觉应该向大家分享一些。

    今天,我要介绍的是被我称作反for-if编程模式的反模式「如果感兴趣可以查看一下这篇文章:for 循环为何可恨?」,也就是人们所说的”我们卖给你整个座位,但你需要的只是一个边。”

    这是一个特殊的反for-case模式,其中所有的情况中只有一次会是null。

    1. for (int i = 0; i < 100; i++) {  
    2.   if (i == 42) { do_something(i); }  
    3. }  

    这种情况可以简单的写成

    1. do_something(42);  

    这个反for-if模式可以表现成各种各样的形式。比如:

    1. foreach (string filename in Directory.GetFiles("."))  
    2. {  
    3.     if (filename.Equals("desktop.ini", StringComparison.OrdinalIgnoreCase))  
    4.     {  
    5.         return new StreamReader(filename);  
    6.     }  
    7. }  

    它是在一个目录里遍历查找一个指定文件,如果找到了,就返回文件的数据流。这段代码的一种不是那么折腾的写法是

    1. if (File.Exists("desktop.ini"))  
    2. {  
    3.     return new StreamReader("desktop.ini");  
    4. }  

    请注意,两个版本的代码片段具有相同的竞争条件:如果这个desktop.ini本来是存在的,但在你创建Stream­Reader之前被删掉了, 你就会得到一个File­Not­Found­Exception错误。

    再举一个例子:

    1. foreach (object o in hashtable.Keys)  
    2. {  
    3.     if (o == "target"return hashtable["target"];  
    4. }  

    等同于

    1. return hashtable["target"];  

    我猜测这些家伙不喜欢在图书馆里通过书名找一本书,因为他们的做法是如此的繁琐:

    他们来到图书馆里员面前说,“把你所有的书都给我,”然后他们拿着装满了上千本书的篮子,坐到墙角里自言自语:

    “不是,这本书的书名不对”,

    “不是,这本也不是”,

    “标题还是不对。”

    “这本书呢?”

    ”不是,也不是这本。“

    ”老天,我要这样一本一本翻到什么时候…“

  • 相关阅读:
    linux
    【转】三种地理参考信息模型:WMS,WFS,WCS
    Flex工程与Asp.net工程集成发布时若干注意事项
    招聘Asp.NET高级开发人员
    【转】2008'中国地理信息系统优秀工程公示
    推荐一本GIS的好书《空间数据库》
    集中推荐一些Map Projection方面资源
    收藏几篇虚拟化的文章
    征集“地图制图”WEB站点、BBS
    [转]NHibernate文章转载
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468410.html
Copyright © 2011-2022 走看看