来打一架吧!
大家好,我是鱼皮,今天这篇文章,虽然多少会带点戾气,但对学编程的小伙伴来说,应该还是有点启发的。
事情是这样的,昨天晚上,我直播带大家写了一个批量处理表格的程序,用于给之前参与活动的同学批量返现。
但是在写程序的过程中,出现了一些让我感觉不做好的弹幕发言。
比如我在定义 Java 对象的属性时,用了拼音来命名:
// 支付姓名
String zhiFuXingMing;
然后有同学说了:你是不是程序员啊,写代码怎么能用拼音来命名呢?
再比如我在定义金额属性时,使用了 double 类型:
double cost;
然后有同学说了:呵呵,金额竟然用 double 类型?
再往下写,等写到将两个表格中的数据根据某一列相同的值进行合并时,我使用了比较原始的 for 循环 + HashMap 的写法。
然后就有同学说了:用 Lambda 啊!用 Lambda 啊!用 Lambda 啊!
看了这些弹幕,我只有一个感触:大家被八股文和所谓的 “编程习惯” 害惨了。
他们说的没错,变量名是应该使用正儿八经的英文、遵循驼峰式或下划线命名法;在企业中,金额相关的字段的确不应该用 double 这种容易丢失精度的数据类型;Java 8 的 Lambda 表达式的确写起来方便又精简。
但是,没错的写法就一定是最合适的么?
首先,我写的这个表格处理程序是一次性的工具,只是 自己做自己用 。因为最后程序生成的表格是用于转账,所以对于程序逻辑 正确性 的要求最高。
使用拼音主要是因为表格中有很多名称相似的列,比如 “支付昵称”、“支付账号”、“支付姓名”、“账号昵称”,通过拼音可以增加字段的区分度,更容易引起我的注意,不容易搞错。
使用 double 类型来接受表格中的金额数据主要是因为我很 确信 两点:
大家的订单精度绝对不超过小数点后 2 位,范围绝对不超过 10000。 不需要对金额进行任何运算。
在这些情况下,我完全没有必要去使用 BigDecimal 之类的精度更高的数据类型,反而不确定如果用了后,表格处理库还能不能顺利地执行。
而之所以不用 Lambda 表达式,一方面是因为 Lambda 表达式虽然简洁,但却 不够直观 ,在直播时不能很好地让大家理解;另一方面也是自己很少用 Labmda 表达式去写这种逻辑,对于一个 求稳 的程序来说,我不想去冒险。此外,就我的需求来说,这两种方式写起来都不麻烦,Lambda 表达式也不能在开发效率上带来很大的优势。
这就是我的理由。
没有绝对正确的代码,更没有完美的代码,只有相对合适的代码。你只需要 根据实际的场景 去写代码,能够给出自己的理由,这就够了,千万不要墨守成规!
说到这里,又让我想起来之前我在写 Java 的时候,代码缩进是空 2 格,然后一些同学就不满了:代码缩进不是空 4 格么,你一个大厂程序员,怎么这么不规范!?
也是同样的道理,阿里的 Java 代码规范是缩进 4 格,但谷歌的 Java 代码规范是缩进 2 格呀!
没有绝对的规范,只需要在团队内部保持统一,能够发挥规范的作用(保证代码质量、稳定性、提高代码可维护性等),这就足够了。
所以,希望所有学编程的朋友们,不仅要学习他人好的编程习惯;更重要的是在写代码、做技术选型时,想清楚你的目的,根据实际情况去思考、灵活变通。你会发现,编程真的是一门艺术!
在某些情况下,你写有 bug 的代码也未必不是一种正确的选择。
以上就是本期分享。我是鱼皮,点赞 + 在看 还是要求一下的,祝大家都能心想事成、发大财、行大运。
往期推荐