写点什么

使用编程语言的惯用语和范式交流意图

  • 2008-02-18
  • 本文字数:926 字

    阅读完需:约 3 分钟

是不是在努力使代码更清晰易读?Reg Braithwaite 坚信,通过恰当选择程序语言的惯用语有利于表达代码的意图。他强调,尽管有多种方式实现这一目标,但我们不能随意选择,而应该选择最易于表达代码意图的方式。例如,选择适当的语法有助于传达关于代码意图的有用信息:

以 Ruby 中的代码块为例。当一个代码块包含多行代码时,一些人使用 do … end,而当只有一行代码时就只用{…}。目前就我所知,一个流行且被认可的用法就是:针对重点关注执行的“副作用”的代码块使用“do…end”,针对重点关注返回值的代码块使用{…}: foo.map { |x|

我关心执行结果

}
foo.each do |x|

我关心副作用

end 尽管计算机并不在意这些,但这段代码的确传达出一些额外的信息。事实上,在第一段代码中,我们主要关心它的结果值,而后一段代码中则是它执行的一系列“副作用”操作。

Braithwaite 认为,这种方法并不限于程序语言的语法,同样可以扩展到范式(译注:paradigm,一类典型的编程风格)上。某些语言(例如 Ruby)支持“同一个功能可以使用多种完全不同的表达方式”。这样就可以尝试选择一个最佳范式来表达代码意图。

让某个功能模块看上去就是该功能,你就可以清晰表明这段代码是严格为要达成的结果所开发的。 像 for 和 while 之类“语气较重”的命令式语法元素,应该用在需要修改变量的值或者想引发“副作用”操作的情形下。……同样地,而当你为现实世界的实体进行建模或需要长期的持久化状态时,面向对象(OO)是极佳的范式选择。象 Ruby 这样的语言,在一般情况下,会迫使你以不明显的方式使用 OO 式编程;除非你想让同事知道用到了实体对象,否则你的代码看上去不可能象是“面向对象”的代码。

尽管有时使用这种方式可能会影响性能,但是尽可能使用这种约定可以为程序员提供额外的信息使代码更易读懂,意图表达得更清晰。

一些人认为,使用无文档且未校验过的约定可能会导致更多的混乱。然而,Reg 指出,任何一个项目都会有某些编程约定,例如“使用 Bang! 这个方法名来表示状态发生了变化(比如 sort 和 sort!)”;而且如有必要,团队也会写文档来记录建立好的编程约定。

对于在代码中使用惯用语作为标记来表达意图,您怎么想?

英文原文链接: Communicating Intent through Idiom and Paradigm Selection

2008-02-18 10:23825
用户头像

发布了 100 篇内容, 共 21.8 次阅读, 收获喜欢 5 次。

关注

评论

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

软件测试/测试开发 | app自动化测试(Android)--元素定位方式与隐式等待

测试人

软件测试 自动化测试 测试开发 appium

除 svn、Testlink 外,还有哪些不错的测试用例管理工具?

爱吃小舅的鱼

项目管理 管理工具 测试用例管理平台

移动开发平台真的能提升App开发效率吗?

Onegun

移动应用开发 移动端开发

阿里、腾讯、蚂蚁金服Java技术面试及经验总结(文末分享答案)

程序知音

Java java面试 后端技术 春招 八股文

混合式APP开发框架

力软低代码开发平台

软件测试/测试开发 | app自动化测试(Android)--高级定位技巧

测试人

软件测试 自动化测试 测试开发 appium

架构实战 5 -微博评论高性能高可用计算架构

架构实战营 「架构实战营」

2022年中国跨境支付行业年度专题分析

易观分析

金融 跨境支付 市场

各大互联网公司面经分享:Java全栈知识+1500道大厂面试真题

程序知音

Java java面试 java架构 大厂面试题 八股文

国家先进计算产业创新(宜昌)中心来了!

SENSORO

人工智能 大数据

chatgpt小试牛刀

阿呆

ChatGPT

软件测试/测试开发 | app自动化测试(Android)--App 控件定位

测试人

软件测试 自动化测试 测试开发 appium

如何集中式管理多个客户端节点传输任务-镭速

镭速

C4D和3dmax有什么区别?

Finovy Cloud

3DMAX C4D

网易游戏实时 HTAP 计费风控平台建设

Apache Flink

大数据 flink 实时计算

年度技术盘点:水稻、韦伯、脑机接口、AI预测及创作、快速充电

B Impact

2023最新版本水果FL Studio宿主软件安装包下载

茶色酒

FL Studio21

由浅入深,聊聊 LeackCanary 的那些事

Petterp

android 内存泄漏 LeakCanary

从零到一,臻于至善|网易邮箱基于StarRocks 开发大数据平台的实践

StarRocks

数据库

CleanMyMac X2023完整版本MAC电脑系统清理工具

茶色酒

CleanMyMac

Github霸榜!竟是阿里技术官的微服务分布式项目实战笔记总结

程序知音

Java 分布式 微服务 java架构 后端技术

推荐几款实用的移动开发平台

FinFish

移动开发 开发平台 移动开发平台 移动端开发 小程序技术

架构训练营模块五作业

现在不学习马上变垃圾

架构训练营10期

尚硅谷Spring6发布视频教程

小谷哥

一种前端无源码定制化开发能力专利解读

元年技术洞察

低代码 数字化转型 无源码 元年方舟

模块五计算架构模式

程序员小张

「架构实战营」

2022年12月视频行业用户洞察:世界杯后半程看球热度不减,优质IP创新与开发助力用户留存

易观分析

音视频 视频

运维百家讲坛第 1 期:井源 - 运维几何

巴辉特

太狠了,Spring全家桶笔记,一站式通关全攻略,已入职某厂涨薪18K

程序知音

Java spring ssm java架构 后端技术

MixMIM 创建混合图像,提出新型掩码方案

Zilliz

计算机视觉

在人间vpn搭建

阿呆

vpn

使用编程语言的惯用语和范式交流意图_研发效能_Sadek Drobi_InfoQ精选文章