大量参数与信息丢失之间不可不说的故事

代码越少就越好?对象越少就越好?这些都是真的吗?由绝大多数情况来看,这还真的都不一定。

在我们向代码中添加不必要东西的时候,很有可能就把这个原本简单的事情搞复杂了。在我们制作接口或是一些其他抽象东西的时候,不知道谁这样说了一句:“要是我们将来用更多的东西,现在添加进去会更方便”,上述的问题可能就这样产生了;有时我们忘记了YAGNI( You Ain’t Gonna Need It即你不需要它)原则,故而在写代码的时候我们会添加一些自以为会让生活更加方便的东西,刚才的问题它也可能会因此而出现……此类情况真是太多了。

但是从另一个方面来说,之前在我的近期文章当中描述过一些类似的情况,给大家展示了把几个功能几乎一样的方法添加进同一段代码当中的例子。正因如此,我们受益颇多:代码变得更易于理解了。这些额外添加的代码也让我们更多地了解了这个对象是“做”什么的,而不是它是“如何”做到的。

在这篇文章当中我会给大家展示另外一个例子:更少的代码有时可能意味着更不易阅读。

曾几何时……

今天我来给你们说说这段黑历史:

你可以很容易看出来这个存储方法存储的是什么吗?这个很好理解吗?好吧,就算是可以认出来,但是我们不得不承认这还是很困难的。

如何在方法声明当中提炼出关键信息呢?我敢肯定的是第一步你会去阅读类与方法的名称来弄清楚这个环境。“很好,明白了,我们接下来存储一些历史信息。”现在困难的地方就出现了:你需要把我们想存储的信息给找出来。不能只是仅仅阅读这些信息,因为这些信息没有在代码中呈现出来。在这种情况下,你就需要在一串参数当中找出这些有用信息。你要满怀信心的去阅读,因为只有这样你才可以搞清楚代码的作者到底是想存储什么东西。

或者是去看commit出来介绍代码的信息。

亦或是看一下方法的定义,然后在implementation当中找到问题的答案。

尽管不是最好的方法,但是还能用。

难道你还认为这是一种获取信息的便捷方法吗?我们可以不做任何额外的工作就理解某段代码吗?毫无疑问是可以的,这正是我写下这篇文章的目的。

用参数对象施加援手

为什么我们总是在读了方法声明之后才对它们有所了解?

不知怎么地,我们都能找到一些历史信息——这是因为类的名称给了我们这些信息。

我们可以了解到这是关于存储一些东西的——因为方法的名称总是那么易于描述。

现在的问题是,我们不知道我们想在历史中存储些什么。为什么呢?因为输入参数并没有给我们这些信息。

那些参数表明了我们想存储的pieces,但没有解释当那些pieces放在一起的时候我们需要知道什么。我们获取了implementation(已被使用的部分)的信息,但我们也不知道这个代码到底是干嘛的。

那么我们需要做些什么呢?我们需要隐藏implementation,并且解释我们想让这个代码实现什么样的功能。除此之外,这也是参数对象开始发挥作用的时候了。你可以将它视为一个为不同对象服务的盒子,或是一种降低相关性的解决办法。然而对我来说,用这种方法最大的好处在于需要你命名该对象,并且你这样做了之后会被强制提供有价值的信息。

我来展示一下:

现在我们想存储的信息已经很明显了。我们给阅读我们代码的人共享有用的信息,同时也隐藏了implementation。这样一来读者就可以把注意力放在关键的地方,不会被额外添加的细节所打扰——而这些细节只是你自己写着或者修改方法时有趣罢了。

原文发布于微信公众号 - java一日一条(mjx_java)

原文发表时间:2016-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

如何阅读大牛的代码

一、代码阅读的必要性 阅读别人的代码作为开发人员是一件经常要做的事情。一个是学习新的编程语言的时候通过阅读别人的代码是一个最好的学习方法,另外是积累编程经验。如...

3184
来自专栏take time, save time

八个commit让你学会爬取京东商品信息

我发现现在不用标题党的套路还真不好吸引人,最近在做相关的事情,从而稍微总结出了一些文字。我一贯的想法吧,虽然才疏学浅,但是还是希望能帮助需要的人。博客园实在不适...

2924
来自专栏ThoughtWorks

Rec:一个项目的诞生|洞见

Rec是一个用来验证和转换数据文件的Java应用。从第一行代码到v1版本成形,仅仅经历了一个半月的时间,作为一个开源项目,在很多方面都有着各种各样的纠结。 ? ...

3464
来自专栏CSDN技术头条

【问底】徐汉彬:PHP7和HHVM的性能之争

【导读】徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设。最近,PHP7...

2455
来自专栏后端技术探索

php7和HHVM的性能之争

根据“TIOBE编程语言排行榜”(榜单虽然统计方式有局限,但是仍然不失为一个比较好的参考),2010年PHP最高曾经在世界编程语言中排名第三。可见,PHP语言在...

3722
来自专栏大数据

加速python科学计算的方法(二)

好久不见。有一年了。 很久没有更推文了,我的错。额,进入正题吧。到了年底,很多App都会放出“你今年听了多少歌”、“你今年看了多少帖子”、“你今年剁手了多少次”...

31510
来自专栏极客猴

Python 编码规范

软件行业现在基本上是协同工作,不再是以前个人单打独斗的年代了。在一个团队中,每个人可能负责一个或者多个模块。如果团队没有统一的编程规范,会增加代码理解难度,从而...

1773
来自专栏编程

python笔记5-python2写csv文件中文乱码问题

前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode、decode。 当list、tuple、dict里面有中文时,打印出来的...

3805
来自专栏樊华恒的专栏

海量之道系列文章之弱联网优化 (六)

基于一个快速和高效管理的链路之上,做好IO调度和控制,也是提升效能和改善用户体验的重要环节,本节主要来探讨 IO 管理与 强监控。

3790
来自专栏腾讯开源的专栏

高效使用lua作为业务开发语言的秘诀在这里!

导语 你还在使用c++开发UE4吗?会不会感觉太慢了?会不会感觉编译一次就可以去楼下喝杯咖啡了?会不会感觉总是提心吊胆,搞不好什么时候就crash了?现在不用...

6112

扫码关注云+社区

领取腾讯云代金券