# Day3--向左走?向右走?再走一次?那些替你做决定的小事

条件运算

条件运算会分成三个部分,在我目前学到的Swift语言中,我认为有三种条件运算必须要整合成一个单元来复习:

  1. if…else(最基本的条件运算)
  2. guard…else(则否条件运算)
  3. switch case(切换条件判断)

简言上述三种条件运算的逻辑:
if…else比较属於是直线式逻辑,一个东西进来之後,一直经过层层过滤,最後才认为它被归属为哪个条件之下的产物。

guard…else 则如其名,像个守卫,如果你符合它守护的原则,那麽你所提的条件就会被它接纳,否,则被踢除,端看else後的条件是什麽,产出产物。

Switch case有趣些,它比较像是平行所有的条件,然後你符合Switch语法里的哪一个case,就走那向case给出的条件过滤,然後产出那个条件下的产物。

if...else

最常见的就是if...else的运算,或者也可以直白的以中文来说,就是:「如果...就...」

if…else语法应该是最基础的条件运算语法了,几乎每个程序语言都有,我之前写过的Python也有这种运算的语法,只不过如果要详细一点说,Swift的if条件运算语法有三个小分类:

  1. 单纯的if
if A{
  return B
}

如果A条件成立,就执行B

  1. if...else
if A{
   //implement B
}else{
   //implement C
}

如果A条件成立,就执行B,若否,就执行C
这种运算的想法跟guard…else很像,只要条件一没有成立,就是走向另一个结果。

  1. if...else if...
if A1{
  //implement B
}else if A2{
  //implement C
}else if A#{
  //implement D
}

这种逻辑则偏向多条件式的运算,且通常具有顺序性,假若条件A1失败,那就走向条件A2,依此类推,符合其条件的就执行其中的内容。
不过由於它是层层的过滤条件,因此在速度上会比Switch case慢些。

guard...else

条件运算这件事情,除了基本型的if…else,还有一种,叫做guard…else,诚如上一篇简短的描述:

guard…else 如其名,像个守卫,如果你符合它守护的原则,那麽你所提的条件就会被它接纳,否,则被踢除,端看else後的条件是什麽,产出产物。

guard的逻辑是某条件为真,不然就是某条件为假,产出两种结果。

if…else则是可以包含多重条件的前提,然後进行筛选,和guard比较的话,会有一种感觉是:guard比较单纯,就是符合条件或不符合条件两者。

总之,guard在操作上有点像个守卫,你是好人,就让你进来,你是坏人,就掰掰。

func passwordCheck(code:String){
    guard code == "password" else{
       print("shit,not right,Bro!")
       return
    }
    print("Ok,got you now")
}

let rightcode = "password"
passwordCheck(code:rightcode)

所以,要记得一件事情,guard...else有一个特点是:会先描述条件不符合後执行的内容,然後在执行完後,若符合条件才会执行符合条件的内容。

或者回到刚刚的说法:守卫总是会记得谁看起来像是坏人,谁是坏人就让坏人不能进来,好人则可以进来。

使用guard…else的优势
这里我想套用之前在网路上看到彼得潘对guard…else的描述:
可读性佳

不用浪费时间读取不需要的程序码

大概在这里可以重新描述他在第一点里提到的:if…else通常会把所有条件论述一遍,最後才产出结果,而guard…else只有执行一回合的程序语言,如果执行如果为否,则立马产出结果。

而可读性这件事情,大抵可以说大家都知道guard是只要了解一个条件,就会产出两个结果,且一翻两瞪眼的逻辑,所以不用if…else这要查看很多逻辑条件啊!

补充:三元运算子(termary operator)

如果你对上一篇的if…else算是熟悉,你可以大概的知道if…else的程序逻辑是一个区块又一个区块的,而在这里,三元运算子提供了一个更简便的写法:

原先的if…else大概会让程序语言的呈现变成下面这样:

let isTainan = true
if isTainan{
    print("food alway sweet")
}else{
    print("not really add suger in food")
}

但这种情况由於逻辑简单,所以可以以三元运算子的方式下去处理,公式大概如下:

「条件」?「符合条件的结果」:「不符合条件的结果」
或者套用Syashin Chen的说法更为简单:

公式: a ? b : c,条件 a 为 True ,回传 b。条件 a 为 false ,回传 c。

let isTainan = true
print(isTainan ? "food alway sweet":"not really add suger in food")

Switch case

Switch case到底在干什麽呢?要我形容,它就是一个多条件同时判断的判断式,网路上有相关评测大概是有提到if…else跟Switch case到底哪个比较耗时,结论是if…else比较耗时。(前提是跑类似内容的东西,我不知道我这样讲好不好)
1.Switch Case
如下面所说的,Switch case一次就会描述所有的条件,然後,还会追加一个条件叫做默认条件(default),基本上Switch case在运作的时候,只要匹配到第一个符合条件的项目,就会结束整个程序,这也就是它跟if…else相比快的地方。

Switch case在写的时候,必须注意几件事情:

  1. 条件有没有穷尽?case必须穷尽所有情形。
  2. 一定要有default的情况,否则程序会有问题。
    switch case也有一种方式可以宣告暂时性的常数或变数,并进行条件限制上的制定:

tags: 铁人赛

<<:  物件与类别 (object and class)

>>:  [NestJS 带你飞!] DAY03 - Controller (上)

day 16 - 开启git worktree 进行redis lua-script 测试比较

今天要来换个redis写法, 看看能不能缩短执行时间。 首先我会用git worktree再开一个专...

[Day 30] 颜色APP操作与结语

相信经过这29天的文章,大家已经了解颜色app的制作过程以及各功能该如何撰写与应用。既然功能都完成...

铁人赛 Day8 -- PHP SQL基本语法(三) -- $_POST & $_GET

前言 我觉得要讲理论还是解释$_POST & $_GET是什麽的,我可能也讲不出个所以然,也...

Day6:如何使用Parrot Security的Recon-ng进行足迹和侦察

今天我们来谈一下使用Parrot Security的Recon-ng进行足迹和侦察 登入Parrot...

Vue.js 从零开始:物件参考 深拷贝 浅拷贝

资料处理是JavaScript非常重要的一环,如果观念不正确,常常会卡在那边,就算可以运行了,也不知...