特殊的反 for-if 编程模式

开发 开发工具
本文介绍的是被作者称作反for-if编程模式的反模式,也就是人们所说的”我们卖给你整个座位,但你需要的只是一个边。”这是一个特殊的反for-case模式。下文将详细介绍。
 本文是从 Introducing the for-if anti-pattern 这篇文章翻译而来。

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

今天,我要介绍的是被我称作反for-if编程模式的反模式,也就是人们所说的”我们卖给你整个座位,但你需要的只是一个边。”
这是一个特殊的反for-case模式,其中所有的情况中只有一次会是null。

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

这种情况可以简单的写成

  1. do_something(42); 

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

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

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

  1. if (File.Exists("desktop.ini")) 
  2.     return new StreamReader("desktop.ini"); 

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

再举一个例子:

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

等同于

  1. return hashtable["target"]; 

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

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

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

“不是,这本也不是”,

“标题还是不对。”

“这本书呢?”

”不是,也不是这本。“

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

原文链接:http://www.aqee.net/introducing-the-for-if-anti-pattern/

【编辑推荐】

  1. 你从未听说过的一种编程方式
  2. 回顾过去一年中编程语言领域的起起落落
  3. 编程更像是在写作
  4. 2012纽约市长新年计划:学习编程
  5. 十种可能改变IT行业走向的编程语言
责任编辑:林师授 来源: 外刊IT评论
相关推荐

2014-07-30 10:08:13

Python反模式

2011-05-24 09:30:26

Findbugs

2021-10-29 05:53:51

前端测试开发代码

2023-10-30 18:59:38

REST API开发

2020-09-14 08:30:44

Kubernetes容器

2023-09-13 11:58:17

云原生反模式

2021-01-11 05:37:54

仓储模式接口

2012-01-17 13:41:34

JavaSwing

2021-04-20 22:09:13

Python编程语言

2015-10-10 11:23:17

Java常量反模式

2015-09-22 10:56:13

Java反模式

2024-04-24 13:45:00

2017-09-29 10:49:30

2016-08-04 14:41:21

架构java服务端开发

2022-11-03 15:36:44

事件响应反模式系统

2010-12-02 10:30:09

Apache Hado反模式Map Reduce

2023-12-22 14:27:30

2021-10-13 07:48:23

Options模式编程

2010-09-13 09:18:22

JavaScript模块模式

2012-04-10 10:04:26

并行编程
点赞
收藏

51CTO技术栈公众号