经典的
const a = doSth()
if(a) {
  const b = doOtherThing(a)
  if (b) {
    ...
    return xxx
  }
}
return yyy
提供什么 pipe chain flow 有啥用,连这个常见的 pattern 都抽象不出来还搞啥 functional programming
而 optional chain 又不是 kotlin 有 scope 函数可以灵活调整 receiver ,结果只能取值或者取函数进行调用
|  |      1murmur      2022-03-08 14:34:03 +08:00 看了半天没看懂你要说什么,能给出一个你需要的执行效果么,这种嵌套 if 我认为没问题 js 就是 js ,js 不需要是其他语言,不会都 2022 年了,还有人认为语句的长度反比于执行性能把 哪个语言语法糖多你就用哪个啊 | 
|      2dcsuibian      2022-03-08 14:40:22 +08:00 如果 a 和 b 是对象的话,doSth( )?.doOtherThing( )?.doAnotherThing( )也许可以满足你的要求 | 
|      4lmshl      2022-03-08 15:08:23 +08:00 讲道理 explicit null + CFA 肯定比 Maybe Monad 入门更容易。 Union Type 也比 Either 更容易,总不能让每个人都学一遍 Monad Transform 吧。 虽然我都会写,但我不否认 explicit null 的心智负担是真的低 | 
|      5lmshl      2022-03-08 15:10:31 +08:00 ```EitherT<Promise, Exception, A>``` ```OptionT<Promise, A>``` 要是让前端们写这个,他们还不提刀顺着网线来见你 | 
|  |      6neptuno      2022-03-08 15:11:43 +08:00 你是说 swift 里面的 objectA?.value 或者是 objectB !这种特性吗 | 
|  |      7debuggerx      2022-03-08 15:25:30 +08:00 因为太蹩脚了,不屑于用。 | 
|  |      8leopod1995      2022-03-08 15:27:03 +08:00 | 
|  |      9cheng6563      2022-03-08 15:33:41 +08:00 本来就是程序语言不支持才搞出一堆设计模式 | 
|      10yazinnnn      2022-03-08 15:34:09 +08:00 没有 do { } 或者 bind 语法的话,其实也挺累的 | 
|  |      11zhuangzhuang1988      2022-03-08 15:50:42 +08:00 脱裤子放屁的功能 | 
|      12yor1g      2022-03-08 16:05:48 +08:00 rxjs ? pipe? | 
|  |      13IvanLi127      2022-03-08 16:08:56 +08:00 你在说啥,能不能把 kotlin 对应的优雅写法举例出来看看,不然有点难理解你想要的是什么。 | 
|      14yazinnnn      2022-03-08 16:24:53 +08:00  1 f# async { let! result = workTask |> Async.AwaitTask do printfn $"the result is {result}" } haskell do x <- initialExpression y <- expressionUsingX x z <- expressionUsingY y return x+y+z scala for { x <- initialExpression y <- expressionUsingX(x) z <- expressionUsingY(y) } yield { x+y+z } kotlin nullable{ val a = optA().bind() val b = foo(a).bind() bar(c) } | 
|  |      15intmax2147483647      2022-03-08 16:41:15 +08:00 JS 有没有我不知道 但是 fp-ts 好(zhuang)用(bi)的一笔 | 
|  |      16haozhang      2022-03-08 16:45:46 +08:00 via iPhone https://github.com/Summerlve/js-optional 6 年前写的 js- optional ,当时就有这想法,可惜现在的 js 被 tc39 一群蠢驴外加一路牛鬼蛇神搞得乌烟瘴气。 | 
|  |      17noe132      2022-03-08 16:52:12 +08:00 via Android 参考 fp-ts , 可以 mapLeft 然后再 pipe 起来 | 
|  |      18Exuanbo      2022-03-08 20:17:49 +08:00 via iPhone 强烈推荐 purify-ts | 
|  |      19Exuanbo      2022-03-08 20:26:12 +08:00 via iPhone | 
|      20TWorldIsNButThis OP @murmur ...就是可能继续有嵌套的 if(b) if(c) if(d) @dcsuibian @leopod1995 这个只能取值,不能作为参数,或者说不能 mapping 成新值 @IvanLi127 kotlin 的有 scope function , if (a) { const b = doSth(a) if (b) { ... } } return yyy 可以变成 a?.let { doSth(it) }?.let { doOtherThing(it) } ?: yyy 第一个 it 就是不为 null 的 a ,第二个 it 就是不为 null 的 b @intmax2147483647 @noe132 fp-ts 看过,但是概念太多了,感觉是一个完整的体系,一时半会整不明白 @Exuanbo 看了一下很精简啊,感谢推荐 | 
|  |      21wangtian2020      2022-03-09 08:41:04 +08:00 const a = doSth() if (!a) return yyy const b = doOtherThing(a) if (b) { ;('') return xxx } |