V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Leviathann
V2EX  ›  Kotlin

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

  •  
  •   Leviathann · Aug 4, 2021 via iPhone · 4787 views
    This topic created in 1729 days ago, the information mentioned may be changed or developed.
    但是网上搜了下好像完全没什么热度
    14 replies    2021-08-05 02:11:00 +08:00
    billlee
        1
    billlee  
       Aug 4, 2021
    主要是在函数式写法里面有用
    Origami404
        2
    Origami404  
       Aug 4, 2021 via Android
    如果不想用异常那就只能用返回码咯(但是大部分语言里都有异常所以 emmmmm ),高级一点的函数式语言又有自己的异常处理方法,所以貌似只有既想要高级抽象又想要底层开发的 rust 常用。(我见过的第二个把 result 写进语言里的是 zig,也是对标 c 语言的)
    SoloCompany
        3
    SoloCompany  
       Aug 4, 2021 via iPhone
    一般而言 runCatching 没有 try 表达式直观
    rayw0ng
        4
    rayw0ng  
       Aug 4, 2021
    borrow 概念用的也不多啊,并不影响 rust 的热度。
    Leviathann
        5
    Leviathann  
    OP
       Aug 4, 2021 via iPhone
    @SoloCompany 但是因为 kotlin 没有对异常的检查,很容易会忘了处理调用的函数里抛出的异常
    maninfog
        6
    maninfog  
       Aug 4, 2021 via iPhone
    不实用啊
    cache
        7
    cache  
       Aug 4, 2021
    Rust 的 Rusult 可以用?操作符向上传递错误,用起来特别爽
    yazinnnn
        8
    yazinnnn  
       Aug 4, 2021
    没有 flatten api,如果出现 Result<Result<Int>> 这种类型的话,处理起来就不好看了
    SoloCompany
        9
    SoloCompany  
       Aug 4, 2021
    @Leviathann #5 你这样说和 runCatching {}.getOrThrow() 有啥区别呢, Result 又不是设计用来 checked exception 的, 我是同意 kotlin 的价值观的, checked exception 就是糟糠
    Leviathann
        10
    Leviathann  
    OP
       Aug 4, 2021 via iPhone
    @cache
    这个 kotlin 只能最外面包一层 runcatching,然后里面 getOrThrow
    会稍微麻烦点
    rust 函数如果声明返回值是 result,应该就相当于函数里面都是在被 catch 的环境里
    Leviathann
        11
    Leviathann  
    OP
       Aug 4, 2021 via iPhone
    @SoloCompany
    io 相关的 api 用 result 包起来我觉得还是很合理的吧
    像 rust 写文件的 api 返回就是 result
    并且有编译器检查 result 是否被处理过
    no1xsyzy
        12
    no1xsyzy  
       Aug 4, 2021   ❤️ 1
    @Leviathann #10 没有 catch 环境,当然你从 catch 角度理解也行……
    但实际上是一个 match(result){Err=>return result;Ok(value)=> do with value } 的语法糖
    GiantHard
        13
    GiantHard  
       Aug 4, 2021 via Android
    函数式编程语言都会有这么一个类型
    piping
        14
    piping  
       Aug 5, 2021   ❤️ 1
    Result, Option, Variant Enum 是编程语言设计中的一大进步,要是它在 C 语言中存在,早就没 exception 什么事了。Exception 只在没有编译期类型检查的语言里有用
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5627 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 01:35 · PVG 09:35 · LAX 18:35 · JFK 21:35
    ♥ Do have faith in what you're doing.