Skip to content

分支结构

顾名思义,分支结构意味着,经过某个功能的时候,后续流程分叉了,分叉之间是互相排斥的,属于是 要么...要么... 的句式。和前面的顺序结构不同,分支结构并不会依次执行每个分支,因此,对于产生分叉的结构来说,每个分叉中的数据流并不共享,先按下不表,以后的章节解释。

条件分支

条件分支可以说是通过数据流影响流程的典型了,位于 Library 的 Core 分组的 If,这个功能非常简单,当流程执行到它的时候,叫一下暂停,去看看 condition 输入端的值是什么,如果是true,那后续就走 True,否则,那就走 False。可见,这个功能会对当前的流程进行分叉,形成互斥的两个分支,属于是 要么...要么... 的句式。

alt text

匹配分支

其实分支的匹配和条件分支从本质上来说并无二至,条件分支只处理两种情况,因为布尔值只存在两个值,而匹配分支,位于 Library 的 Core 分组的 Switch,从某种程度上来说,是条件分支的升级版。都是从数据流取一个值来决定后续的流程怎么发展,也是实现了数据流对流程的影响。

alt text

数据流来的str可以是任何值,所以后续的流程不是固定的,通过加号可以增加数据流情况的考量(Case),如果数据流的值跟任何一个 Case 都没有匹配的话,那就会走default

异常捕获

正所谓人非圣贤,孰能无过?凡事都有例外,有例外就有异常,有异常不可怕,怕的是异常没有得到合适的处理,异常捕获功能位于 Library 的 Core 分组的 TryCatch,这也会让流程产生分支,但是它并不是直接由数据流决定的。

alt text

认识异常

在理解什么是异常捕获之前,我们需要先理解什么是异常,简单来说就是程序在运行时 “出的岔子”,出岔子之后直接摆烂终止。 为了方便理解,下面人为制造一些异常看看:

alt text

如图所示:

  1. S1:创建一个名为 VarA 的 str 变量,初始值是1023
  2. S2:由于 VarA 是一个 str 所以不能直接加 1 需要转换成 int,再加 1,这一步的 Print 是没问题的,下方的输出面板也看到了 1024
  3. S3:因为 VarA 是str,所以可以是任何文本内容,这里将 VarA 设置成 abc,再做一次和 S2 相同的事儿,但这时候出岔子了。

为什么出岔子了?因为,我们对两次 Print 做的事情设定是转 int 之后加 1,这个设定是不变的,但具体情况会随传入的参数发生变化, 因为 1024 的输出,证明程序是跑起来了的,但是当数据发生改变,再次实行相同的流程,却直接停止了,说明这个错误是运行时错误, 系统也不知道这种情况应该干嘛,所以直接给出异常,然后终止。

TIP

报错提示小弹窗下方的超链接会指出具体是执行到哪个流程出现的异常,有时候会有多个超链接,当 NCF 嵌套比较深的时候,会告诉你是谁调用的它出现的异常

那么问题来了,系统虽然认为这是异常,但如果我不认怎么办?这种情况叫做异常捕获,我们用另一个分支 Catch 来处理有异常的情况。

alt text

这样一来就是说,Try 后面的流程是尝试运行后续流程,如果遇到异常,告诉系统别着急,这种情况我早有打算,这点异常不算什么,你直接走 Catch 分支。

创建异常

上述例子是系统给出的异常,我们也可以自己定义,Core 分组的 Exception,可以主动抛出异常,也就是说,我们可以为自己的程序设定什么时候“摆烂”,

  • 直接“摆烂”

alt text

  • 有条件的“摆烂”

alt text

这样的异常和系统的异常一样,都会直接终止,将错误显示在前台,也都可以用 Catch 来接住。