MoonBit 的 is 表达式,让代码更清爽了一点

110 天前
 Hooooooey

最近尝试了一下 MoonBit ,发现它的 is 表达式挺有意思的。简单来说,它用来检查某个值是否匹配某个模式,如果匹配成功,模式中定义的变量就能直接拿来用了。感觉这种方式既简洁又高效,避免了传统的 if 判断,代码更清爽了一些。 这个表达式的语法形式为 expr is pat,这个表达式为 Bool 类型,当 expr 符合 pat 这个模式的时候返回 true,比如:

fn use_is_expr(x: Int?) -> Unit {
  if x is Some(i) && i >= 10 { ... }
}

来源:MoonBit 公众号的周报

1421 次点击
所在节点    程序员
9 条回复
codehz
110 天前
这不是函数式语言的标准功能吗?
dyc12389
110 天前
看起来比 Rust 还要方便点。
Rust 的 if let 是没有办法和别的条件进行混合的。
Wincer
110 天前
pattern matching
jroger
110 天前
这样的语法在语义表达上可读性更强。喜欢~
nagisaushio
110 天前
@dyc12389 #2 Rust 有 matches! 宏,感觉更类似
sagaxu
110 天前
这连 Java 这种不思进取的语言也支持啊,只有某大道至简不喜欢这种语法糖
kagenomirai
110 天前
此事早已在 Haskell 中有所记载。
```haskell
useIsExpr :: Maybe Int -> ()
useIsExpr (Just i)
| i >= 10 = ()
| otherwise = ()
```
my3157
110 天前
有点意思, 有一股很重的 rust 的味, 不过相对于 rust 没有那么烧脑的抽象概念和约束, 风格上有点怪怪的, 不是很统一的样子

不知道 1.0 以后稳定下来啥样子, 另外看 roadmap 好像 1.0 要加入异步, 希望不要走 rust 的老路
FYFX
110 天前

你这个例子还好,这是我在推特上看到的

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

https://yangjunhui.monster/t/1112108

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

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

© 2021 V2EX