专栏首页java一日一条大量参数与信息丢失之间不可不说的故事

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

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

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

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

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

曾几何时……

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

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

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

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

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

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

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

用参数对象施加援手

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

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

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

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

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

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

我来展示一下:

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

本文分享自微信公众号 - java一日一条(mjx_java),作者:收听我

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个 2 年 Android 开发者的 18 条忠告

    我仍记得2014年我决定做安卓开发的那天,这是我一生中做出的最好决定之一。到现在已经有2年半了。

    哲洛不闹
  • Java核心技术点之集合框架

    Java集合框架由Java类库的一系列接口、抽象类以及具体实现类组成。我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据。集合类型就是...

    哲洛不闹
  • 有没有一段代码,让你觉得人类的智慧也可以璀璨无比?

    Kyle McCormick 在 StackExchange 上发起了一个叫做 Tweetable Mathematical Art 的比赛,参赛者需要用三条推...

    哲洛不闹
  • 深度学习与TensorFlow:VGG论文复现

    上一篇文章我们介绍了下VGG这一个经典的深度学习模型,今天便让我们通过使用VGG开源的VGG16模型去复现一下该论文.

    云时之间
  • 深度学习与TensorFlow:VGG论文复现

    云时之间
  • 深度学习与TensorFlow:VGG论文复现

    上一篇文章我们介绍了下VGG这一个经典的深度学习模型,今天便让我们通过使用VGG开源的VGG16模型去复现一下该论文.

    用户1332428
  • ​笔记:竞品分析和市场分析(一)

    市场规模(Market Size),即市场容量,市场规模主要是研究目标产品或行业的整体规模。简单点讲,可以理解为一定时间内,一个(类)产品或服务在某个范围内的市...

    AilsaEvans
  • 混合线性模型介绍--Wiki

    混合线性模型: 是即包括固定因子,又包括随机因子的模型。 混合线性模型被广泛应用于物理、生物和社会科学。尤其是一些重复测量的数据及面板数据。混合线性模型比较突出...

    邓飞
  • 利用Python获取疫情数据

    疫情到现在过去很久了,国内已经大体控制下来了。这次的目标是爬取利用python爬取疫情数据(基于丁香园的数据) 这期本来3.9就创建了的,但一直拖到今天4.13...

    叮当叮
  • 大数据分析考科目三到底哪里容易被挂

    就在上周五, 也就是5月24号, 也就是本狗的阳历生日的这天, 本狗考了科目三, 结果是:“唉”, 没想到过了。用一句小时候经常听的话来讲这次的成绩就是——“一...

    Python知识大全

扫码关注云+社区

领取腾讯云代金券