每周源代码10 – 被指有害的模式

[原文发表地址] The Weekly Source Code 10 - Patterns Considered Harmful

[原文发表时间] 2007-10-30 21:54

沿袭我一贯的信念,阅读源代码以编出更好的程序,我为大家奉上第2篇每周系列“每周源代码”,之后还将源源不断地继续。这里是我这周在读的一些代码。

我们这周的主题是“被指认为有害的模式”,在这里为大家呈现一些我们“不该做的”源代码样本。

Brad Vincent.的ÜberUtils - Strings。不喜欢System.String?那么用C# 3.0扩展函数点焊一些有用的东西上去吧。Brad解释了为什么他的util会被认为不好:

“我知道有些人肯定想说,这是滥用扩展函数,但看看我的字符串有多强大,在我的字典里,任何可以帮我更快更好地写代码的,都不能算作是滥用。这是很聪明的编码!”

这是他众多有用增补中的两个,你几乎不能将它认定为有害:

    1: public static string XOR(string input, string strKey)
    2:         {
    3:             if (IsEmpty(input)) return input;
    4:             string strEncoded = string.Empty;
    5:             int nKeyIndex = 0;
    6:             for (int i = 0; i < input.Length; i++)
    7:             {
    8:                 strEncoded += Convert.ToChar(input[i] ^ strKey[nKeyIndex]);
    9:                 nKeyIndex++;
   10:                 if (nKeyIndex == strKey.Length) nKeyIndex = 0;
   11:             }
   12:             return strEncoded;
   13:         }
   14:  
   15:         public static string ToTitleCase(string Input)
   16:         {
   17:             return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(Input);
   18:    }
  “不,你被CS人员洗脑了,他们认为Niklaus Wirth (编者:《GOTO应被认为有害》的作者)其实知道他在说什么。但其实他不知道。他根本没有线索和证据。 ” 

我想Edsger Dijkstra在他结构化编程中引用了一点儿“goto是恶魔”?

没错,他的确引用了,但他已经死了,我们不能对逝者不敬。所以这些天,我只能大说特说Niklaus Wirth ,他采用了“结构化编程”并用他的语言(Pascal和Modula-2 )进行了强化,于是就把他的邪恶灌输给下一代可怜的CS学生,他们能学到的语言几乎都不能运用到实际工作中去

——Linus

把一切都归为一句。我会就此单独写一篇文章,但是Lee HolmesWindows PowerShell指导书的作者)和我最近在做一些PowerShell的东西,解析CSV文件,还有这个。Lee并不推荐这个,但是我觉得这个还不错:

    1: Import-CSv File.csv | Select File,Hits | Group { $_.File -replace '/hanselminutes_(\d+).*','$1' } | Select Name,{ ($_.Group | Measure-Object -Sum Hits).Sum }

如果您找到其他还没被好好读过的比较酷的代码,欢迎随时发链接给我。