最好的编程语言是怎样的?

举报
JavaEdge 发表于 2021/12/03 22:23:41 2021/12/03
【摘要】 因语言演化,不同时期不同版本的程序员写的代码,在用同一门语言在编程。所以,我们经常看到各种不同时期风格代码并存。新的语言特性都是为提高代码表达性,减少犯错几率。多用新语言特性写代码,绝对没毛病!那应该如何使用“新”语言特性,让代码写得更好? Optional暂不考虑缺乏封装问题。这段代码有问题。因为未考虑对象...

因语言演化,不同时期不同版本的程序员写的代码,在用同一门语言在编程。所以,我们经常看到各种不同时期风格代码并存。

新的语言特性都是为提高代码表达性,减少犯错几率。多用新语言特性写代码,绝对没毛病!

那应该如何使用“新”语言特性,让代码写得更好?

Optional


暂不考虑缺乏封装问题。这段代码有问题。因为未考虑对象可能为 null。
更好的写法:

这种写法很稀缺,所以,新项目总是各种NPE。如果你要问程序员为什么不写对象为 null 的判断,答曰:忘了。

空指针的发明者 Tony Hoare 将其称为“自己犯下的十亿美元错误”。

还好Java 8有Optional,它提供了一个对象容器,你需要从中“取出(get)”你所需要对象,但取出前,你需判断该对象容器中是否真的存在一个对象。

你再不会忘掉判断对象是否存在,因为你需要从 Optional 取出存在里面的对象。正是这多余的一步,避免你“忘”了。

更简洁的写法:

项目中所有可能为 null 的返回值,都要返回 Optional,可大大减少各种意外惊喜。

函数式编程


准备参数的代码:

  • 筛选出审核通过的章节
  • 再把章节转换成与翻译引擎通信的格式
  • 最后把所有得到的单个参数打包成一个完整的章节参数。

Java8后,不是不需要遍历集合,而是有了更好的遍历集合方式。函数式编程,大部分操作都可归结成列表转换,最核心的列表转换就是 map、filter 和 reduce。

大部分循环语句都是在对一个元素集合进行操作,而这些操作基本上都可以用列表操作进行替代。

再CR这段代码,有一循环语句,这循环语句在处理的是一个集合中的元素,可用列表转换:

有人可能说这段代码还不如我原来的循环语句简单。两种写法根本差异是抽象层次不同,可读性完全不同:

  • 循环语句是在描述实现细节
    必须要做一次“阅读理解”知晓其中细节才能知晓整个场景
  • 列表转换的写法是在描述做什么
    基本上和我们用语言叙述过程对应。

其实大多数人选择循环语句只是因为对列表转换不熟练,多写即可。

为什么我的感觉实践中,使用这种风格,为写出来的代码更难理解?
你在列表转换过程中写了太多代码!很多人直接在列表转换过程中写 lambda。lambda 本身相当于一个匿名函数,所以,很多人写成长函数了。
lambda 是为了写短小代码提供的便利,所以,lambda 中写出大片代码,根本就是违反 lambda 设计初衷的。最好的 lambda 应只有一行代码。

那若一个转换过程中就有很多操作咋办?

提取出一个函数!就像 toSectionParameter:完成从 Section 到 SectionParameter 转换。这样一来,列表转换的本身就完全变成了一个声明,这样的写法才是能发挥出列表转换价值的写法。

总结

代码风格逐步演化,每个程序员对语言的理解程度都有所差异,所以,我们的屎山项目中,各种代码风格并存,各具风骚,加重代码理解难度,这其实就是:不一致的坏味道。

编程风之所以格会过时,是因为它存在问题,新风格就是用更好方案,注意跟上时代,拥抱变化,多用新特性!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。