我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合公式 > 放弃序列 >

是该放弃 loop 语句的时候了吗?

归档日期:04-25       文本归类:放弃序列      文章编辑:爱尚语录

  随着 LINQ、扩展方法和增强后的匿名代理的加入,许多算法已不再需要进行显式的循环了。在一篇名为“如果你正在使用 loop 语句,那你就做得不正确”的发贴中,Chuck Jazdzewski 探讨了 C# 的一些可能未来。

  Chuck Jazdzewski 引用了他的大学教授在讲 APL 时的一句话作为贴子的开头。APL是 60 年代主要面向矢量和矩阵操作的语言,尽管 loop 语句也存在于其中,但通常是用不着的。Chuck 写到:

  它与 LINQ 相似,如果你正在使用 loop 语句,那你就做得不正确。我后来做了许多原型开发,我强迫自己使用 LINQ,不是我不喜欢它,相反,我真的很喜欢 LINQ,但对 loop 语句的使用习惯已经在我的心里扎了根,所以我不得不想办法让自己停止这种习惯,强迫自己用 LINQ 的方式去思考。每次当我试图使用 loop 语句去处理一个 collection 或一个 array 时,我就会问自己:能不能在这里使用 LINQ 来替代呢?那些拥有数据库背景知识的程序员们在使用 LINQ 时,就像鸭子下水一样自在,他们就是以结果集和矢量计算的方式来思考,而我还不是,但我也差不多快达到那种境界了。

  尽管 Chuck 非常依赖于 LINQ 表达式和那些扩展方法,但他并没有彻底放弃 loop 语句。例如,他在 IEnumerable 扩展方法中就使用 loop 语句来隐藏调用函数的复杂性。在示例函数 Reduce 中就是这么做的,这一函数将一个成员列表和与其相匹配的邻近成员进行组合,而匹配的标准和如何对它们进行组合,则是由传入的一个匿名函数来完成的。经过这样的实现,其它人就无须再来编写相似的函数了。

  Chuck 例举的代码是想创建一个函数,获取一个具有名为“Whitespace”或“keyword”的文本的序列,然后对它们应用某些风格。最后,他的函数就简化到只有三条查询语句:

  尽管大多数评论者都对此给予肯定,但也并不是所有人都认为应该这么做。Holger Flick 写到:

  我认为标题应该改为“如果你正在使用 loop,那当别人读到你的代码时就不用去分析就可以读懂”:)

  别误会我的意思,我是经常使用 LINQ 的,也很喜欢它。然而,在这种情况下要想领会代码的意思很困难,更别说要使用它!恕我直言,我宁可写一个多行的 if 语句来代替一行的实现方法。

本文链接:http://renfriends.com/fangqixulie/220.html