最近尝试在 PR 里面用了这个 Java10 就有的关键字,结果老外和国人都不能接受,让我改回去。
但是只要把变量命名写的足够表意,我觉得一定程度上是可以使用 var 关键字的。
难道 java boy 不写动态语言吗?
![]() |
102
lisongeee 2 天前
@cubecube
所以你的意思是,大厂的 CR 只在网页上看就完了,是不需要在本地 idea 打开查看的是吗? 好奇在常用的 java lambda 表达式里,你是喜欢写 (x, y) -> {} 还是喜欢写 (x:XType, y:YType) -> {} 呢? |
![]() |
103
JavasBoy 2 天前
这个问题,我觉得大家的讨论很有价值,看得出各位都是经验丰富的 Javaer 。
首先,我得说,提 PR 被拒,要求改回不用 var ,这事儿确实挺让人郁闷的。毕竟 Java 10 都出来这么久了,var 也不是什么洪水猛兽。 不过,平心而论,大多数朋友的顾虑我也能理解。Java 毕竟是一门强调类型安全的静态语言,var 用多了,确实可能影响代码的可读性,尤其是在那些业务逻辑复杂、动辄几万行代码的大型项目里。一眼看过去全是 var ,确实挺让人头大的,还得一个个去推断类型,这维护成本蹭蹭就上去了。 但话说回来,var 也不是完全没用武之地。在一些类型很明显、或者类型名特别长的情况下,用 var 就能让代码清爽不少。而且,现在很多新语言都支持类型推断,Java 适当借鉴一下也没啥不好。 我觉得吧,这事儿主要还是看团队习惯和项目规范。要是团队里大家都喜欢用 var ,或者新项目从一开始就约定好用 var ,那自然没问题。但如果在老项目里突然冒出一堆 var ,那肯定会有人不适应。 最好能和团队成员沟通,达成共识。 至于我自己,其实我是比较倾向于在合适的时候用 var 的。毕竟,写代码嘛,既要保证代码质量,也要追求一点点简洁和优雅。当然,前提是不影响可读性和可维护性。 像有些朋友提到的,IDE 的自动补全和类型提示功能,确实能很大程度上缓解 var 带来的可读性问题。 总之,var 这东西,用不用、怎么用,没有绝对的好坏,关键还是看具体情况和团队约定。 咱也不能一概而论地说“Java Boy”就是保守,对吧? 毕竟,大家都是为了写出更好的代码嘛! 大家看我 ID !!! |
104
yazinnnn0 2 天前
@JavasBoy
某 java 前沿框架 quarkus 里啥风格的代码都有, 现在 quarkus 支持的最低版本是 17, 源码里还有一对 java 7 风格的代码(匿名内部类), 也用人提交偏 fp 风格的(var 类型推到, final 局部变量) ![]() ![]() 匿名内部类和 var 出现在同一段代码里, 风格是不是很分裂? 话说回来, quarkus 本来就衍生自 vertx, 而 vertx 有很强的 fp 思想, 能熟练编写 vertx 代码的 quarkus 贡献者为啥要手写匿名内部类, 这件事很奇怪 |
105
billccn 1 天前
@Sodacooky 我觉最好还是不要拿 C++的 auto 来比,因为写模板的时候很多中间值你都无法知道它类型是什么,如果不用 auto 就得声明一个新的类型参数,但有的时候又不能改变 API ,导致模板函数套模板函数,编译越来越慢。
Java 的 var 这个就是可有可无,因为类型永远是清楚的。 另外我觉得在 PR 里读到 var 很多的 Java 有点像读找不到实例的 C++模板,你只能靠变量名猜这代码是在干啥,至于对不对是完全无法确定。 |
106
nilaoda 1 天前
话说 Rider 写 C#的时候默认就会提示用 var 代替具体的类型声明……
可能是 C#引入的早( 2007 年),加上 LINQ 和匿名类型的大量使用早就让 var 声明成了最佳实践吧。。而 Java 一直比较保守,到 Java 10 ( 2018 年)才支持了局部变量使用 var ,大部分开发者都不习惯使用。甚至有的编码规范里明确禁止使用 var 。 可能是设计哲学和生态差异吧,Java 社区普遍认为显式类型更受信任,而 C#社区更容易接纳新的东西。 |
108
prosgtsr 1 天前 via iPhone
我最开始学 python ,后来写了几年写 java ,现在用 gdscript 都要写类型
|
110
wxlwsy 1 天前
就像某类人写个三元表达式就卡布其"if else"一样
码农就这样,一个无关紧要的语法都能讨论半天. 就像某碰瓷语言一样,少些几个字母就是"巨大飞跃". |
111
wxlwsy 1 天前
"卡布其"=看不起
|