21 条回复  ·  552 次点击
fgwmlhdkkkw 小成 2024-9-7 22:36:36
Java 的这些东西,下载依赖就要半年,编译一下又要半年,,受不了
f0rb 小成 2024-9-7 22:47:31
都颠了是吧,又开始语言战争了
sagaxu 初学 2024-9-7 23:16:47
@fgwmlhdkkkw

主流依赖管理 Python pip, .net NuGet, js NPM/yarn, Ruby gems, Go get/mod, Rust cargo, PHP composer ...,100%都是源自海外,有的不翻墙还用不了,Java 依赖因为使用太过广泛, 国内可用 mirror 起码就好几个,下载已经算好的了。

Kotlin 编译几万行的项目,gradle 全量编译几十秒也好了,增量编译也就几秒。


@wobuhuicode Java 协程还要再等等,生态还没跟上来,性能优化也不够。由于 checked exception ,Java 的函数式编程也不够爽快。


单从语言自身角度,主流语言 C#语法最靓,文档最强(之一),生态也强(很多是微软维护的),VS IDE 也很强,写服务,写工控,写 Unity 脚本,写 Windows 软件,都很不错。
leconio 小成 2024-9-7 23:59:35
我觉得 kt 判空有点不能理解,明明上面已经判空了,下面还要加!才行。不然就只能用 let ,但是函数比较长的话,其他变量还要控制作用域,用起来不如 swift 的 let 优雅。
还有 boolean 的自动拆箱,当可能空时候,必须用 xxx==true 才行。这种写法好像刚入行 java 小白
Lowae 小成 2024-9-8 00:12:22
@leconio 这个可能 kotlin 版本太老了,新版本 Kotlin 编译器优化了很多判空的智能推断。至于为什么 let, also 等可以,可以看其实现,内部有 Contract 语法,用来告诉编译器如何推断判空
nikenidage1 初学 2024-9-8 00:20:46
可能你没写过 C#
yafoo 小成 2024-9-8 00:21:41
这两年写了 kotlin 和 go ,感觉这两个语言确实不错
zerofancy 小成 2024-9-8 02:24:05
@leconio 因为 Kotlin 的这个判空考虑了多线程。
例如变量 foo 是类成员变量,那么即使你在一个方法中判空了,他还是可能被其他线程修改。

var foo: Int? = null

fun test() {
    foo
    if (foo != null) {
        println(foo + 1) // 错误,foo 可能被其他线程修改,推断类型仍然是 Int?不能直接+1
    }
}

fun test2() {
    val tmp = foo
    if (tmp != null) {
        println(tmp + 1) // 正确,编译器可以推断出 tmp 是 Int 类型
    }
}

用 let 的原理其实也是用本地变量又存了一下,和 test2 类似,这个变量是不会被其他线程修改的,所以后面不用再判空

我更喜欢这样的写法

fun test3() {
    val tmp = foo ?: return
    println(tmp + 1)
}
kiroter 小成 2024-9-8 03:34:33
@nikenidage1 #17 可能你没写 Kt
DaBiaoGe08 小成 2024-9-8 05:42:09
有你女朋友爽嘛
返回顶部