写点什么

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

  • 2008-04-14
  • 本文字数:970 字

    阅读完需:约 3 分钟

随着 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”的文本的序列,然后对它们应用某些风格。最后,他的函数就简化到只有三条查询语句:

  • 将 whitespace 区域与预设的区域合并
  • 为所有的范围映射风格
  • 合并相邻的范围,并使用相同的风格

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

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

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

未来的 C#编程会彻底放弃使用 loop 吗?如果真是那样的话,它会是件好事吗? 查看英文原文 Is it time to abandon loops?

2008-04-14 01:541172
用户头像

发布了 90 篇内容, 共 12.9 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

英特尔CEO帕特·基辛格:面向未来的数字化需求,推进未来计算创新、探索与颠覆

科技新消息

项目进度经常超时怎么办?项目经理如何有效管理项目进度?

优秀

项目管理工具

火爆 GitHub!这个图像分割神器开源了

百度开发者中心

人工智能 开源 最佳实践 图像

Vue进阶(五十九):ES数组操作:splice() 实现数组删除、替换、增加指定元素

No Silver Bullet

Vue 8月日更 splice

LVS 学习: netfilter 与 ipvs 无秘密

绅鱼片

Linux 负载均衡 LVS Netfilter IPVS

BI软件漫谈

格林海文

BI Tableau 帆软

做正确的事情,而不是把事情做正确

非著名程序员

个人成长 提升认知 认知提升 8月日更

Agora 教程丨一个典型案例,教你如何使用水晶球“数据洞察”

声网

Agora 教程 水晶球

微信架构图设计&“学生管理系统”毕设架构

Imaginary

中国法定数字货币(DCEP)全面启航!全国普及势在必行

CECBC

探索技术与应用融合的区块链 实现产业良性发展

CECBC

亚信数据库AIDB通过统信UOS认证,国产自主可控项目新选择

亚信AntDB数据库

国产化 国产数据库 亚信数据库AIDB

最好用的 Angular 甘特图组件 ngx-gantt

PingCode研发中心

软件 工具 甘特图 ngx-gantt

Linux内核源码分析方法—程序员进阶必备

Linux服务器开发

操作系统 Linux内核 内核源码 底层原理 内核开发

python通过Matplotlib绘制常见的几种图形

Python研究者

8月日更

InnoDB 表空间

leonsh

MySQL innodb 表空间

Python代码阅读(第16篇):列表求差集

Felix

Python 编程 Code Programing 阅读代码

Go- for循环

HelloBug

for Go 语言

ipfs投资者靠什么赚钱?投资ipfs要多少钱?

投资ipfs要多少钱 ipfs投资者靠什么赚钱

模块五:微博评论模块高性能高可用计算架构设计

kk

架构实战营

跨团队项目的集成测试实践分享

PingCode研发中心

软件测试 测试

搭建太阳系3D可视化平台,科普宇宙的未知奥秘

一只数据鲸鱼

科普 数据可视化 智慧宇宙 太空

ipfs矿机公司哪家好?ipfs矿机公司实力排行?

分布式存储 Filecoin ipfs挖矿 ipfs矿机 ipfs矿商排名

上游思维:凭一己之力能做些什么?

石云升

读书笔记 8月日更 上游思维

Go- 函数返回值

HelloBug

函数 返回值 Go 语言

快手基于 Flink 构建实时数仓场景化实践

阿里云大数据AI技术

量化策略APP系统开发,马丁策略交易平台

13530558032

BuildPacks 打包

Zhang

Docker image CNB OCI

Tron波场链智能合约系统开发案例|波场链源码搭建

Geek_23f0c3

TRONex波场智能合约 DAPP智能合约交易系统开发 波场DAPP

干货!DataPipeline2021数据管理与创新大会全篇划重点

DataPipeline数见科技

大数据 数据融合 数据管理

Go- switch-case结构

HelloBug

Go 语言 switch case

是该放弃loop语句的时候了吗?_.NET_Jonathan Allen_InfoQ精选文章