柠檬友玩

首页 > 游戏资讯 > 正文

精读《pipe operator for JavaScript》

时间:2022-11-12 10:14:01

APP永久免费入口

const result array=input array|filter (,str=str.length=0)/hack|map )、str='[' str '] )/hack|

精读《pipe operator for JavaScript》

要创建新运算符,如果用|表示Hack语法,用|表示F#语法呢?

const result array=input array|filter (,str=str.length=0)/hack|map )、str='[' str '] )/hack|

如何用现有语法模拟Pipe无需Pipeoperator(|) for JavaScript的建议,也可以利用js中的现有语法模拟Pipe效果。 以下是一些方案。

Function.pipe ( )使用自定义函数构建pipe方法。 此语法类似于F#。

const resultset=function.pipe ( inputset,$=filter($,x=x=0) $=map($,x=x * 2) $=new Set($ ) ) )

使用中间变量说白了就是分解Pipe流程,一步一步地写:

constfiltered=filter(inputset,x=x=0) const mapped=map ( filtered,x=x * 2) const resultset=newset ( mapped ) )

改造复用变量,将中间变量变为复用:

let$=inputset$=filter($,x=x=0) $=map($ ) $,x=x * 2) const resultSet=new Set($ ) $这样做可能会导致变量污染

精读Pipe Operator语义的价值非常明显,它还可以改变编程思路,在串行处理数据时非常重要,因此命令行场景非常常见:

cat 'somefile.txt' | echo的命令行是典型的输入输出场景,因为大部分都是单输入、单输出。

处理普通代码场景,特别是处理数据时也需要此特性。 大多数具有抽象思维的代码都进行了各种类型的管道抽象,包括:

如果constnewvalue=pipe(value,doSomething1,doSomething2,doSomething3) pipeoperator(|) for JavaScript的提案通过,将实现pipe动作

const new value=value|do something1( % )| doSomething3(% ) % )这等效于以下内容:

const new value=do something3( do something2) dosomething1) value ) )显然,利用pipe特性写处理流更直观,执行逻辑和解读逻辑一致

实现pipe函数无需pipeoperator(|) for JavaScript建议,即可在一行中实现pipe函数。

constpipe=(args )=args.reduce ) ( ACC,el ) ) ),但是不可能实现Hack参数样式,最多实现F#参数样式

根据js实现pipe语法的考虑事项提案记录,F#失败的原因有三个。

内存性能问题。 await特殊语法。 打破js生态。 其中js生态意味着,由于F#语法的特殊性,如果依照该语法实现功能的数据库过多,就有可能无法复用到非Pipe语法场景中。

一些成员反对“隐藏编程”( Tacit programming ),而另一些成员反对表象化建议Partial Application Syntax。 它们使js支持的编程样式与当前大不相同。

位于轻蔑链顶端的编程风格能否得到js的支持,这不是能否得到的问题,而是是否不想得到的问题。

pipe语法的弊端其次是普通的setState语法:

setstate(state=)…state,value: 123} ) )改为immer表示法如下。

setstate ( produce ( draft=draft.value=123 ) )多亏了ts型的自动导出,在内层的produce中已经知道value是字符串型,此时输入字符串的话就会出现错误

但是,如果写成pipe模式的话:

由于produce(draft=draft.value=123 )| setState先考虑如何修改数据,因此此时不知道后面的pipe流程是什么,因此无法确定draft的类型。 因此,pipe语法仅适用于固定数据处理流。

将pipe直译为管道,是“数据像流水线一样处理”的潜在含义。 也可以将每个函数想象为单独的管道。 很明显,下一个管道处理上一个管道的数据,并将结果作为输入输出到下一个管道。

合适的管道数量和体积决定了生产线是否高效。 过多的管道类型反而会使管线变得零散杂乱。 过少的配管会使管线变得沉重而难以展开。 这是工作中最大的考验。

讨论地址精读《pipe operator for JavaScript》issue # 395dt-Fe/weekly