前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最好的编程语言是怎样的?

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

作者头像
JavaEdge
发布2021-12-07 14:15:46
9110
发布2021-12-07 14:15:46
举报
文章被收录于专栏:JavaEdge

没有语言是完美的。

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

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

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

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 转换。这样一来,列表转换的本身就完全变成了一个声明,这样的写法才是能发挥出列表转换价值的写法。

总结

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Optional
  • 函数式编程
  • 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档