NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

是该放弃 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:541148
用户头像

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

关注

评论

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

一篇读懂https的本质、证书验证过程以及数据加密

梁龙先森

大前端 https

神经网络攻防:01.模型到底是什么?

P小二

神经网络 网络安全 AIPwn AI安全 P小二

字节跳动力推的OKR,是未来企业发展的标配吗?

ToB行业头条

肝了很久,冰河整理出这份4万字的SpringCloud与SpringCloudAlibaba学习笔记!!

冰河

微服务 高可用 高并发 冰河技术 SpringCloud Alibaba

数据产品经理实战-用户运营体系搭建

第519区

算法 数据产品 数据运营

小心你的个人信息——GitHub 热点速览 v.21.09

HelloGitHub

GitHub 开源 终端工具 社交

“蚂蚁牙黑”太火,想玩就用ModelArts做一个

华为云开发者联盟

AI 动画 modelarts 图像

FindBugs:Java 静态代码检查

少平

代码审查

Java 中各种DTO,POJO 等的概念

少平

一个15年的架构师谈“如何成为一名优秀的解决方案架构师”

华为云开发者联盟

架构 软件 架构师 华为云

关于搜商的一点记录「Day 9」

道伟

28天写作

阿里巴巴Druid,轻松实现MySQL数据库加密!

王磊

Java springboot Druid

Mac 下配置 Intellij IDEA + Tomcat 出现权限问题的解决办法

少平

tomcat

vivo 官网资源包适配多场景的应用

vivo互联网技术

低代码 无服务器云函数

云计算带来的变革将如何在2021年加速创新

浪潮云

云计算

工作日志3-1

技术骨干

关于 Synchronized 的一个点,网上99%的文章都错了

yes

Java JVM

翻译:《实用的Python编程》03_02_More_functions

codists

Python

如果重来,结果就会好吗?「Day 10」

道伟

28天写作

第五次作业

Geek_79e983

Elasticsearch Search Options 搜索参数

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

SARIF:DevSecOps工具与平台交互的桥梁

华为云开发者联盟

安全 DevSecOps SARIF 自动化平台 OASIS

入选SIGMOD2021的时间序列多周期检测通用框架RobustPeriod如何支撑阿里业务场景?

阿里云大数据AI技术

人工智能 数据库 大数据

大厂动态规划面试汇总,教你如何修炼内功

盼盼编程

算法 动态规划 数据结构和算法 笔试

产品经理训练营作业 04

KingSwim

dubbo 源码 v2.7 分析:核心机制(一)

程序员架构进阶

架构 源码分析 dubbo 七日更 28天写作

左手画条龙右手画彩虹——认知负荷理论

Justin

心理学 28天写作 游戏设计

第五周 继续文档的一些细节

小匚

产品经理 产品经理新人如何落地 产品经理训练营

产品训练营 - 第五周 - 作业

邹小胖

产品经理训练营

Linux入门篇 —— 手把手教你 Linux 三种网络配置方法

若尘

Linux 网络

一场由fork引发的超时,让我们重新探讨了Redis的抖动问题

华为云开发者联盟

数据库 redis 华为云 GaussDB fork

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