一元函数控制流微库的JavaScript/TypeScript

2020-05-22 06:59:53

FCF是用Typescript语言编写的一元函数控制流微库,旨在为IF、Switch和While等原生Javascript控制流语句提供功能和语义上的替代。

像if或switch这样的关键字是命令性语句,通常必须组合到函数中才能赋予它们语义,例如:

//错误的命令性(非语义)if(文档。VisibilityState=';Visible';){//使用可见文档}Else if(文档。VisibilityState=';HIDDED';){//处理隐藏文档}。

//好一点.。具有语义函数const isDocumentVisible=()=>;document。VisibilityState=';Visible';const isDocumentHidden=()=>;文档。visibilityState=';HIDDED';//请注意,这里我们没有存储条件的值,//我们需要引入新的变量If(isDocumentVisible()){//用可见文档做事情}Else if(isDocumentHidden()){//用隐藏文档做事情}。

使用FCF,我们可以以更具语义的方式编写程序流,保留其条件语句的值:

从';FCF';常量checkIfApplicationIsActive=FCF导入FCF。IF(Value=>;Value=';Visible';)。然后(()=>;{//使用可见文档返回';活动';})。ELSE IF(值=>;值=';隐藏';)。则(()=>;{//使用隐藏文档RETURN';STANDBY';})//检查条件const{value}=checkIfApplicationIsActive。运行(文档。visibilityState)//匹配(';Active';|';Standby';)控制台的第一个`then`调用返回的值。LOG(值)。

请注意,FCF是严格类型的,因此您可以通过以下方式在TypeScript中重写上面的示例:

从';fcf';const checkIfApplicationIsActive=fcf//导入FCF使用`[string]`可以定义提供给';run';function//`string`是fcf.if对象保留的值。如果<;[字符串],字符串>;(值=>;值=';可见';)。则(()=>;{//使用可见文档返回';active';})//`value`这里是`string`类型。ELSE IF(值=>;值=';隐藏';)。则(()=>;{//使用隐藏文档RETURN';STANDBY';})//检查条件const{value}=checkIfApplicationIsActive。运行(文档。visibilityState)//将为";字符串";控制台类型。LOG(值)

const greetUserByRole=FCF.。开关(USER=>;用户。角色)。箱子(';POWER';)。则(()=>;{控制台。日志(';早上好,高级用户)})。箱子(底座)。则(()=>;{控制台。log(';hello base user';)})。默认(()=>;{控制台。log(';hello,无论您是谁)})const Checkuser=FCF。IF(USER=>;USER。isLogging)。则(user=>;greetUserByRole。运行(用户))。Else(()=>;{控制台。Log(';You Not Login';)})Checkuser。运行({Role:';power';,isLogging:true})Checkuser。运行({Role:';base';,isLogging:true})Checkuser。运行({Role:';power';,isLogging:false})。

selIf(fn:function|any)-添加必须后跟THEN调用的新条件。

THEN(fn:function)-将回调添加到上一个条件并设置Value属性。

FCF。if(False)。则(()=>;{控制台。日志(您永远不会到这里)})。Else(()=>;{控制台。日志(';hello';)})。运行()。

FCF。if(True)。则(()=>;{控制台。日志(您永远不会到这里)})。ElseIf(False)。则(()=>;{控制台。日志(';hello';)})。运行()。

FCF。如果(()=>;true)。则(()=>;{控制台。日志(您永远不会到这里)})。其他如果(()=>;false)。则(()=>;{控制台。日志(';hello';)})。运行()。

FCF。如果(greeting=>;greeting=';再见';)。则(()=>;{控制台。日志(';再见';)})。其他如果(greeting=>;greeting=';hello';)。则(()=>;{控制台。日志(';hello';)})。运行(';hello';)。

const{value}=FCF。如果(greeting=>;greeting=';再见';)。然后(()=>;{return';再见&39;})。其他如果(greeting=>;greeting=';hello';)。然后(()=>;{return';hello';})。运行(';hello';)控制台。log(值)//hello

fcf.switch提供了一种替代原生Javascript switch语句的方法。它还标准化了默认的switch行为,避免了Break语句的需要:匹配的第一个case将避免对其他case求值。

FCF。切换(问候=>;问候)。案例(';你好';)。则(()=>;{控制台。日志(';hello';)})。箱子(再见)。则(()=>;{控制台。日志(';再见';)})。默认(()=>;{控制台。日志(';\\_(ツ)_/';)})。跑(';再见';)。

CASE(fn:function|any)-添加新案例,后面必须跟THEN调用。

THEN(fn:Function)-将回调添加到上一个Case调用,并可以设置Value属性。

FCF。切换(问候=>;问候)。案例(';你好';)。则(()=>;{控制台。日志(';hello';)})。箱子(再见)。则(()=>;{控制台。日志(';再见';)})。默认(()=>;{控制台。日志(';\\_(ツ)_/';)})。跑(';再见';)。

默认方法的工作方式类似于普通的switch语句:如果没有匹配的case,将调用默认方法。

FCF。切换(问候=>;问候)。箱子(再见)。则(()=>;{控制台。日志(您永远不会到这里)})。默认(greeting=>;{控制台。log(问候语)})。运行(';hello';)。

FCF。切换(问候=>;问候)。箱子(()=>;;#39;再见)。则(()=>;{控制台。日志(';再见';)})。案例(()=>;';hello';)。则(()=>;{控制台。日志(';hello';)})。运行(';hello';)

FCF。切换(问候=>;问候)。案例(问候=>;问候=#39;再见';)。则(()=>;{控制台。日志(';再见';)})。案例(greeting=>;greeting=';hello';)。则(()=>;{控制台。日志(';hello';)})。运行(';hello';)。

const{value}=FCF。切换(问候=>;问候)。案例(问候=>;问候=#39;再见';)。然后(()=>;{return';再见&39;})。案例(greeting=>;greeting=';hello';)。然后(()=>;{return';hello';})。运行(';hello';)控制台。log(值)//hello。

fcf.while为本机Javascript While语句提供了一种替代方法,它使用requestAnimationFrame或setImmediate来运行循环,从而使其在浏览器和节点中的行为标准化。

Do(fn:function)-添加一个回调,当WhileFlow运行时将永远调用该回调。如果DO函数将返回FALSE,则会停止While流。

Break(fn?:function)-如果调用,它将停止While流。当流将停止时,它最终接受一个回调来调用。

const loggerFlow=FCF。While(True)。do(()=>;{控制台。日志(';hello';)})。run()//在1秒后停止While循环setTimeout(()=>;{loggerFlow.。Break()},1000)。

fcf//它将一直记录到文档。visibilityState=';可见';//否则它将被停止。而(()=>;文档。VisibilityState=';可见';)。do(()=>;{控制台。日志(';hello';)})。运行()。

FCF。While(True)//它将只记录一次,然后停止While流。do(()=>;{控制台。log(';hello';)return false})。运行()

const greetUser=Fcf。开关(USER=>;用户。角色)。箱子(';POWER';)。则(()=>;{控制台。日志(';早上好,高级用户)})。然后(底座)。则(()=>;{控制台。log(';hello base user';)})。默认(()=>;{控制台。log(';hello base user';)})fcf。While(True)。do(User=>;greetUser.。运行(用户))。运行(用户)