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

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

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

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

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

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

有没有同样的感想?

10175 次点击
所在节点    程序员
95 条回复
powerman
2022-01-28 13:52:01 +08:00
@Leviathann

这就是通常程序员挑起语言圣战的起源,

说实话 我根本不想争论这些东西,既然选择要吃 iOS 这个饭,肯定要吃这个屎,全盘接受是没办法的

你提到的那几个省略,除了带来心智负担以及编译器 语法令牌树难以实现外 跟 程序员炫技之外

我看不到任何好处在哪里,节省的那几个字符,在 IDE 补全下,也根本不是问题
ysn2233
2022-01-28 13:52:11 +08:00
java 啰嗦也导致代码很容易看懂
WispZhan
2022-01-28 13:57:01 +08:00
想要工程化,就必须牺牲一些灵活性。
JVM 栈,目前依然还是工程化程度最高的开发工具之一。
powerman
2022-01-28 13:57:29 +08:00
@Leviathann 首先最后一个拉曼达可以写在括号外面,这个特性 我实在看不到好处在哪里,除了心智负担,另外写在外面就算了 把括号()都省了,那前面那个被调用的函数 就更难理解

var body : some Scene {
WindowGroup { ContentView() }
}
在一个不是很熟悉的 swift 语言的我,看 WindowGroup ContentView 结构体的定义 看了几遍,硬是没理解明白

而且这些语法糖大多是没有提示 也没有解释的,只能去翻语法书,而且提出这个问题的人不仅是我
https://stackoverflow.com/questions/65384567/swiftui-is-this-code-instantiating-a-new-scene-object
dbpe
2022-01-28 14:13:50 +08:00
不支持协程这个倒是...导致一堆异步的操作需要类似 callback 回调..写起来真特么恶心
lybcyd
2022-01-28 14:16:07 +08:00
@powerman swift 为了声明式 UI 的确有点过了,不过 Java 离这个阶段还远着呢,现在完全用不着害怕语法糖影响可读性。别的不说,getter setter 到现在还得靠 lombok ,就算用了 lombok 也得 a.setX(a.getX+1),比较字符串还得 Object.equals ,List 和 Map 也只能 get, set ,不能用方括号直接取值赋值。目前来看,改掉这些东西完全不会影响可读性,反而会增加可读性。
jorneyr
2022-01-28 14:16:15 +08:00
不知道大家去看 Groovy 、Scala 写的大一点项目的代码是什么感想,我是想抽写代码的人。
des
2022-01-28 14:20:59 +08:00
别的就先不说,啰嗦居然成了优点?
如果真的优秀,那为什么 Java 也在加语法糖?
powerman
2022-01-28 14:22:46 +08:00
@lybcyd

是的,这点我也赞成,但是语法糖这个口子 一旦打开,很多时候就会走向反面,目前 lombok 这样的解决方案也没有那么难懂,而且很多历史原因 不少框架还依赖 java bean 的 getter setter 约定
MakHoCheung
2022-01-28 14:23:44 +08:00
@powerman 就是为了 SwiftUI 能用 DSL 写界面啊。就 Java 这种语法基本做不了声明式 UI ,就算利用上了 lamda 也是无论写起来跟读起来都很不好看(可以参考 JaFu https://github.com/spring-projects-experimental/spring-fu/tree/main/jafu)。尾随闭包之前一直有的,后面为了 SwiftUI 还加上了多尾随闭包,看过讨论说都是为了 SwiftUI

其实扩展函数、尾随闭包这些语法很有利于编程语言作为 DSL ,作为类型安全的描述语言代替 XML 、HTML 、SQL
des
2022-01-28 14:24:57 +08:00
@des 以及为什么那么多基于 jvm 的“方言”?
还有 Java 就不能整花活了?那可真小瞧 Java 了
cyspy
2022-01-28 14:26:48 +08:00
上面说的很多都是 library 层的事情,只是语言提不提供官方实现和语法糖的问题,尤其是 java 生态已经有那么多编译时改代码和改 class 的工具,不存在什么功能实现不了的问题。倒不如说是 Spring 生态太一家独大,新技术懒得在 java 上下功夫
lisongeee
2022-01-28 14:27:07 +08:00
@partystart

1.我寻思 async await 和 futureTask 有啥关系? async await 是用同步的写法来实现异步回调,简便了开发成本,拒绝回调地狱或者链式回调。async await 就是语法糖而已。

2.只支持一个包名一个版本,如果 pack_A@1.0.0 依赖 pack_B@1.0.0, pack_C@1.0.0 依赖 pack_B@2.0.0 并且 pack_B 的 1.0.0 到 2.0.0 有完全破坏性更改,请问如何同时安装 pack_A@1.0.0 和 pack_C@1.0.0 ,并保证流畅运行 ?

多版本包共存在 npm/pnpm/yarn 管理下是很常见的,但是 java 的模块机制已经决定很难 多版本共存
powerman
2022-01-28 14:32:03 +08:00
@MakHoCheung

第我没觉得这种方式有什么优势在哪里,该用 DSL 应该就发明 DSL 去做,就像 HTML 用来描述结构,CSS 用来描述样式,各施其职,javascript 负责逻辑跟交互
MakHoCheung
2022-01-28 14:33:10 +08:00
@golangLover 不支持协程可以理解。并发吞吐差是什么鬼,底层有线程池和 Netty ,再往上层就是 Vert.x 、Quarkus 、Spring Flux ,这些一样可以做到高并发高吞吐,只是没这么流行而已😂
hello2090
2022-01-28 14:34:38 +08:00
无所谓,谁给钱多就听谁,给我 200 万一年写 C 语言都行,C++, 150 万,Java go C# 100 万
powerman
2022-01-28 14:36:13 +08:00
@MakHoCheung 而且 C 时代,用宏创建 DSL 也不是新鲜事,但是读起来是真的难懂,当然 C 那个时代 连范型都没有,也可以理解
MakHoCheung
2022-01-28 14:37:11 +08:00
@powerman 你不觉得优势而已,但是现在就是这种潮流,JSX 、Flutter 、Jetpack Compose 、SwiftUI 都是这种。Gradle 的 build.gradle 就是用 Groovy DSL 或者 Kotlin DSL 代替 Maven 的 pom.xml 。Spring 的 Java Config 代替旧版本的基于 XML 的配置
lolizeppelin
2022-01-28 14:37:22 +08:00
你用 angluar 会发现....写 ts 也能写得和 java 一样啰啰嗦嗦 哈哈哈
chniccs
2022-01-28 14:37:45 +08:00
真有劲呀,各位,都在家隔离着不能出门吗?

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

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

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

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

© 2021 V2EX