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