Result 的方式处理异常用的多吗,我看了下好像和比较受好评的 rust result 用法差不多

2021-08-04 01:44:15 +08:00
 Leviathann
但是网上搜了下好像完全没什么热度
4110 次点击
所在节点    Kotlin
14 条回复
billlee
2021-08-04 03:39:40 +08:00
主要是在函数式写法里面有用
Origami404
2021-08-04 08:27:23 +08:00
如果不想用异常那就只能用返回码咯(但是大部分语言里都有异常所以 emmmmm ),高级一点的函数式语言又有自己的异常处理方法,所以貌似只有既想要高级抽象又想要底层开发的 rust 常用。(我见过的第二个把 result 写进语言里的是 zig,也是对标 c 语言的)
SoloCompany
2021-08-04 08:42:32 +08:00
一般而言 runCatching 没有 try 表达式直观
rayw0ng
2021-08-04 09:02:25 +08:00
borrow 概念用的也不多啊,并不影响 rust 的热度。
Leviathann
2021-08-04 09:12:27 +08:00
@SoloCompany 但是因为 kotlin 没有对异常的检查,很容易会忘了处理调用的函数里抛出的异常
maninfog
2021-08-04 09:12:41 +08:00
不实用啊
cache
2021-08-04 09:48:08 +08:00
Rust 的 Rusult 可以用?操作符向上传递错误,用起来特别爽
yazinnnn
2021-08-04 10:46:10 +08:00
没有 flatten api,如果出现 Result<Result<Int>> 这种类型的话,处理起来就不好看了
SoloCompany
2021-08-04 10:55:52 +08:00
@Leviathann #5 你这样说和 runCatching {}.getOrThrow() 有啥区别呢, Result 又不是设计用来 checked exception 的, 我是同意 kotlin 的价值观的, checked exception 就是糟糠
Leviathann
2021-08-04 12:33:02 +08:00
@cache
这个 kotlin 只能最外面包一层 runcatching,然后里面 getOrThrow
会稍微麻烦点
rust 函数如果声明返回值是 result,应该就相当于函数里面都是在被 catch 的环境里
Leviathann
2021-08-04 12:49:09 +08:00
@SoloCompany
io 相关的 api 用 result 包起来我觉得还是很合理的吧
像 rust 写文件的 api 返回就是 result
并且有编译器检查 result 是否被处理过
no1xsyzy
2021-08-04 13:05:05 +08:00
@Leviathann #10 没有 catch 环境,当然你从 catch 角度理解也行……
但实际上是一个 match(result){Err=>return result;Ok(value)=> do with value } 的语法糖
GiantHard
2021-08-04 16:27:40 +08:00
函数式编程语言都会有这么一个类型
piping
2021-08-05 02:11:00 +08:00
Result, Option, Variant Enum 是编程语言设计中的一大进步,要是它在 C 语言中存在,早就没 exception 什么事了。Exception 只在没有编译期类型检查的语言里有用

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

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

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

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

© 2021 V2EX