反for-if编程模式

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

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

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

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

这种情况可以简单的写成

  1. do_something(42);

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

  1. foreach(stringfilenameinDirectory.GetFiles("."))
  2. {
  3. if(filename.Equals("desktop.ini",StringComparison.OrdinalIgnoreCase))
  4. {
  5. returnnewStreamReader(filename);
  6. }
  7. }

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

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

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

再举一个例子:

  1. foreach(objectoinhashtable.Keys)
  2. {
  3. if(o=="target")returnhashtable["target"];
  4. }

等同于

  1. returnhashtable["target"];

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

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

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

“不是,这本也不是”,

“标题还是不对。”

“这本书呢?”

”不是,也不是这本。“

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值