Java 的缺点就是啰嗦 Java 的好处也就是这里了吧?

2022-01-28 11:37:03 +08:00
 partystart

转了语言后 回过头来回忆下以前的做过的项目 感觉到 Java 项目的优点就是结构稳定吧

Spring 提供官方脚手架,自己公司也可以基于脚手架进行定制化开发。 无论是新的项目还是以前老的项目包层次划分统一整齐。

Maven 官方统一固定了文件路径 代码放 src 资源放 resousrce 有人想动这个路径 直接不支持 而且代码 review 直接骂的狗血淋头 我是没见过这年头有人不用 maven 做包管理的

至于业务层次包 大家好像也形成了统一的规范? Api/RPC Service Dao Mdeol 这几层大体结构

有没有同样的感想?

10169 次点击
所在节点    程序员
95 条回复
banmuyutian
2022-01-28 11:39:53 +08:00
统一的规范,写法上也没有太多的魔法
LazyYum
2022-01-28 11:41:22 +08:00
确实啰嗦,语言特性太弱。尤其是 orm 框架,在查询语法上和 C#比起来弱了一个层级
powerman
2022-01-28 12:36:04 +08:00
@LazyYum

其实有 IDE 自动补全加强 语法啰嗦点真不是坏事,

我看 typescript 跟 ant-design 写的那个 rule 检测表达式,简直就跟鬼画符一样,贼鸡儿难理解

我再让你看看 swift 的不啰嗦 怕不是要把新手往死里坑

https://stackoverflow.com/a/68696283/7250073

https://i.stack.imgur.com/sJs9j.png
golangLover
2022-01-28 12:38:29 +08:00
缺点很多。
不支持协程,并发吞吐差
只支持一个包名的一个版本,不能共存,时常版本被覆盖
操作复杂 json 想吐
没有原生热更新
没有 async await
Jooooooooo
2022-01-28 12:38:35 +08:00
一种功能写法越少越好, 要不然有个一二十种方法写循环, 你最多用个两三种, 剩下的根本不用, 其他人用上了你还得重新学.
powerman
2022-01-28 12:39:36 +08:00
@LazyYum 而且语法糖越多,越容易坑人,少写的那点几个字符 根本省不了多少时间,让新手阅读起来那是真的坑人,而且大部分简写方式的语法糖 在 IDE 增强辅助下,根本不会降低效率,但是语法糖会直接降低 新手或者不熟练这门语言的程序员的心智负担。
sutra
2022-01-28 12:40:13 +08:00
"有人想动这个路径 直接不支持" - 其实支持的。
只是遵循约定大于配置。
powerman
2022-01-28 12:44:05 +08:00
@Jooooooooo

是啊,抽象能力是一回事,有模板跟范型可以进行抽象,提供这种抽象能力无可厚非,

但是其他很多东西真的没必要搞几个回字的写法,像 js 里面的拉曼达表达式有好几种写法,

最后的结果就是造成不熟练这门语言程序员的心智负担,而大部分时候多种写法并没有任何效率提升,

除了带来不必要的心智负担

stackoverflow.com/a/68696283/7250073

以 Swift 为例,我光是看 Swift 这个 UI 声明,就浪费了大半天,其中至少包含了 3 个语法糖
PDX
2022-01-28 12:57:25 +08:00
最开始用 node.js 的时候感叹 js 的灵活和便捷,用 swift 的时候感受写代码居然还能这样炫酷

可是时间长了发现,这样的语言给每个人施展拳脚的空间实在太大了,每个人都在炫技,这写人完全不考虑读代码的人的感受,可是真正好的代码不应该是清晰明了简单易懂的吗?

据说 C++的作者故意提高了写代码的难度,而 java 却确实降低了写代码的难度。
voidmnwzp
2022-01-28 12:57:31 +08:00
@golangLover 你说的包名问题,自定义 classloader 没接触过?很多人都是这种半桶水,连 se 基础都没掌握好就来跟风吐槽
pengtdyd
2022-01-28 13:01:06 +08:00
说 java 啰嗦的人估计是没有写过 c++
powerman
2022-01-28 13:06:37 +08:00
@PDX swift 的炫技 真的是难懂 trailing closure 以及 last param trailing closure 还有 setter 的省略写法...
真的是无语 真不知道为啥 要加这么多语法糖 是为了干啥
kogorou
2022-01-28 13:12:03 +08:00
萌新发抖
xiao109
2022-01-28 13:18:16 +08:00
论最佳实践是否有必要
partystart
2022-01-28 13:18:41 +08:00
@sutra 想动就动被 只要脸皮够厚 不怕代码 review 被怼死。


@golangLover
1. 支持多线程就要支持协程?
并发吞吐差 哪个场景?哪个框架对比 直接贴链接
2 操作复杂 json 想吐
官方的简陋 开源的方便
3 没有原生热更新

jdk 提供热更新 不过你要热更新干嘛?直接不发版部署?

4 没有 async await

jdk futureTask 了解一下


5 只支持一个包名一个版本

go 就支持? 我不理解 一个包名多个版本你到底想干嘛?热更新?

还有 java 不负责管理包 目前是 maven 管理

工作中少玩点花活行吗?
gam2046
2022-01-28 13:24:23 +08:00
Java 这种语言就是下限高,瞎写,也能跑,也凑合能看懂,当然这方面,我觉得 C#比 Java 更好。

其他比如 JavaScript ,来个变量连类型都不确定,c/cpp 的指针 void*又是万能指针,都需要对代码有相当的了解程度才能看懂意图。
reeco
2022-01-28 13:31:32 +08:00
Java 至少没 errlang 那么啰嗦吧
shyangs
2022-01-28 13:32:58 +08:00
@powerman

說的像 Java 的 Lambda 只有一種寫法(沒有語法糖). 我一樣可以用 Java 寫出兩種 Lambda.


```
// Java 沒有語法糖
Multiset<Integer> lengths = HashMultiset.create(
FluentIterable.from(strings)
.filter(new Predicate<String>() {
public boolean apply(String string) {
return CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string);
}
})
.transform(new Function<String, Integer>() {
public Integer apply(String string) {
return string.length();
}
}));
```

```
// Java8 加語法糖
Multiset<Integer> lengths = HashMultiset.create(
FluentIterable.from(strings)
.filter(string -> CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string))
.transform(string -> string.length()));
```


有多少人喜歡第一種沒有語法糖的 0.0
Leviathann
2022-01-28 13:37:57 +08:00
@powerman 你学过 swift 吗
如果没学过 那看不懂很正常
我会 kotlin 不会 swift
除了 some 关键字和 getter 省略没见过其他都很清楚啊
如果所有语言语法都要和 java 一样那还发明新语言干嘛

具体说说,
最后一个 lambda 可以写在括号外面,
如果只有一个 lambda 参数直接可以省略小括号
如果 lambda 是无参数的可以省略参数声明和箭头
lambda 最后一行就是返回值
Scala 就有,kotlin 也学的 scala

构造函数不用 new
新语言很多都这样 new 就是多余的 构造函数就是普通的函数 不需要特殊对待
powerman
2022-01-28 13:44:05 +08:00
@shyangs 你这样杠就没意思了,能简洁的地方 简介并不是坏事,而且第一种并不是拉曼达 第一种是匿名类的方式
这两种写法 并不会造成太大的理解困难

我抨击的是 swift 跟 js 那种 会造成令人困惑的写法

![]( )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/831086

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX