本文是从 Introducing the for-if anti-pattern 这篇文章翻译而来。 这些年来,我看到过大量的反编程模式。我感觉应该向大家分享一些。 今天,我要介绍的是被我称作反for-if编程模式的反模式,也就是人们所说的”我们卖给你整个座位,但你需要的只是一个边。” for (int i = 0; i < 100; i++) { if (i == 42) { do_something(i); } } 这种情况可以简单的写成 do_something(42); 这个反for-if模式可以表现成各种各样的形式。比如: foreach (string filename in Directory.GetFiles(".")) { if (filename.Equals("desktop.ini", StringComparison.OrdinalIgnoreCase)) { return new StreamReader(filename); } } 它是在一个目录里遍历查找一个指定文件,如果找到了,就返回文件的数据流。这段代码的一种不是那么折腾的写法是 if (File.Exists("desktop.ini")) { return new StreamReader("desktop.ini"); } 请注意,两个版本的代码片段具有相同的竞争条件:如果这个 再举一个例子: foreach (object o in hashtable.Keys) { if (o == "target") return hashtable["target"]; } 等同于 return hashtable["target"]; 我猜测这些家伙不喜欢在图书馆里通过书名找一本书,因为他们的做法是如此的繁琐: “不是,这本也不是”, “标题还是不对。” “这本书呢?” ”不是,也不是这本。“ ”老天,我要这样一本一本翻到什么时候…“ |