为什么 guard if比 if 好

var s: String?if let v=s {…}如果这个可选的s可以是个值,将会……guard let v=s else {...}我要把可选的s转成一个值并在后面的程序使用,如果不行就……
&p&if let 和 guard 只是语法糖,没有也可以,但有了可以使得代码更简洁方便。要理解 if let 和 guard,不妨设想假如没有这两者,代码会怎么写。&/p&&p&------------------------------------&br&&/p&&b&if let&/b&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&n&&func&/span& &span class=&nf&&doSomething&/span&&span class=&p&&(&/span&&span class=&nl&&str&/span&&span class=&p&&:&/span& &span class=&n&&String&/span&&span class=&o&&?&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&let&/span& &span class=&nl&&v&/span&&span class=&p&&:&/span& &span class=&n&&String&/span&&span class=&o&&!&/span& &span class=&o&&=&/span& &span class=&n&&str&/span&
&span class=&k&&if&/span& &span class=&n&&v&/span& &span class=&o&&!=&/span& &span class=&n&&nil&/span&
&span class=&p&&{&/span&
&span class=&c1&&// use v to do something&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&Swift 中因为有optional, 经常需要判断是否为空。假如没有if let,大致写成上面的样子,有了if let, 可以改写成&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&n&&func&/span& &span class=&nf&&doSomething&/span&&span class=&p&&(&/span&&span class=&nl&&str&/span&&span class=&p&&:&/span& &span class=&n&&String&/span&&span class=&o&&?&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&n&&let&/span& &span class=&n&&v&/span& &span class=&o&&=&/span& &span class=&n&&str&/span&
&span class=&p&&{&/span&
&span class=&c1&&// use v to do something&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&上面两段代码的控制流是一样的。对照着,可以看出if let的写法更加简洁方便。&/p&&p&------------------------------------&/p&&b&guard&/b&&p&假如if中出现的代码很长,我们写代码时可以将错误情况先返回。比如:&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&n&&func&/span& &span class=&nf&&doSomething&/span&&span class=&p&&(&/span&&span class=&nl&&str&/span&&span class=&p&&:&/span& &span class=&n&&String&/span&&span class=&o&&?&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&let&/span& &span class=&nl&&v&/span&&span class=&p&&:&/span& &span class=&n&&String&/span&&span class=&o&&!&/span& &span class=&o&&=&/span& &span class=&n&&str&/span&
&span class=&k&&if&/span& &span class=&n&&v&/span& &span class=&o&&==&/span& &span class=&n&&nil&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span&
&span class=&p&&}&/span&
&span class=&c1&&// use v to do something&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&这样做可以避免过多的嵌套。上面代码实在太常见了,swift也提供一个guard这个语法糖,用guard可以改写成:&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&n&&func&/span& &span class=&nf&&doSomething&/span&&span class=&p&&(&/span&&span class=&nl&&str&/span&&span class=&p&&:&/span& &span class=&n&&String&/span&&span class=&o&&?&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&guard&/span& &span class=&n&&let&/span& &span class=&n&&v&/span& &span class=&o&&=&/span& &span class=&n&&str&/span& &span class=&k&&else&/span& &span class=&p&&{&/span& &span class=&k&&return&/span& &span class=&p&&}&/span&
&span class=&c1&&// use v to do something&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&上面两段代码的控制流是一样的。也可以看出guard的写法更加简洁方便。&/p&&p&------------------------------------&br&&/p&&br&&p&至于if let 和 guard 语法中出现的where,只是附加一些条件。相当于逻辑运算 && 和 ||。SQL中的条件语法也是用where这个关键字。&/p&&br&&p&假如还不理解,动手将一段代码,不用if let 和 guard 进行改写。试多几次,就会发觉很自然了。&/p&
if let 和 guard 只是语法糖,没有也可以,但有了可以使得代码更简洁方便。要理解 if let 和 guard,不妨设想假如没有这两者,代码会怎么写。------------------------------------if letfunc doSomething(str: String?)
let v: String! = str
if v != …
if满足条件需要return时就可以用guard,所有guard使用场景都可以用if来替代。为啥后来特意加了guard特性,那就是guard的可读性强,除此我觉得语言的设计者更在暗示写代码提早return的重要性。&br&需要理解用if的时候少用嵌套,可以参考『禅objective-c编程艺术』中的“黄金大道”,使用guard会让一个程序员终身受益。
if满足条件需要return时就可以用guard,所有guard使用场景都可以用if来替代。为啥后来特意加了guard特性,那就是guard的可读性强,除此我觉得语言的设计者更在暗示写代码提早return的重要性。需要理解用if的时候少用嵌套,可以参考『禅objective-c编程艺术…
已有帐号?
无法登录?
社交帐号登录if let 和 guard 只是语法糖,没有也可以,但有了可以使得代码更简洁方便。要理解 if let 和 guard,不妨设想假如没有这两者,代码会怎么写。------------------------------------if letfunc doSomething(str: String?)
let v: String! = str
if v != nil
// use v to do something
Swift 中因为有optional, 经常需要判断是否为空。假如没有if let,大致写成上面的样子,有了if let, 可以改写成func doSomething(str: String?)
if let v = str
// use v to do something
上面两段代码的控制流是一样的。对照着,可以看出if let的写法更加简洁方便。------------------------------------guard假如if中出现的代码很长,我们写代码时可以将错误情况先返回。比如:func doSomething(str: String?)
let v: String! = str
if v == nil
// use v to do something
这样做可以避免过多的嵌套。上面代码实在太常见了,swift也提供一个guard这个语法糖,用guard可以改写成:func doSomething(str: String?)
guard let v = str else { return }
// use v to do something
上面两段代码的控制流是一样的。也可以看出guard的写法更加简洁方便。------------------------------------至于if let 和 guard 语法中出现的where,只是附加一些条件。相当于逻辑运算 && 和 ||。SQL中的条件语法也是用where这个关键字。假如还不理解,动手将一段代码,不用if let 和 guard 进行改写。试多几次,就会发觉很自然了。
if满足条件需要return时就可以用guard,所有guard使用场景都可以用if来替代。为啥后来特意加了guard特性,那就是guard的可读性强,除此我觉得语言的设计者更在暗示写代码提早return的重要性。&br&需要理解用if的时候少用嵌套,可以参考『禅objective-c编程艺术』中的“黄金大道”,使用guard会让一个程序员终身受益。
if满足条件需要return时就可以用guard,所有guard使用场景都可以用if来替代。为啥后来特意加了guard特性,那就是guard的可读性强,除此我觉得语言的设计者更在暗示写代码提早return的重要性。需要理解用if的时候少用嵌套,可以参考『禅objective-c编程艺术…
var s: String?&br&&br&if let v=s {…}如果这个可选的s可以是个值,将会……&br&&br&guard let v=s else {...}&br&我要把可选的s转成一个值并在后面的程序使用,如果不行就……
var s: String?if let v=s {…}如果这个可选的s可以是个值,将会……guard let v=s else {...}我要把可选的s转成一个值并在后面的程序使用,如果不行就……
已有帐号?
无法登录?
社交帐号登录
iOS 和 C++ 开发者,/hjcapple麻烦大神给我解释下 为什么选D_百度知道
麻烦大神给我解释下 为什么选D
hich of the following commands can be issued without interfering with the operation of loop guard?A. Switch(config-if)#spanning-tree guard rootB. Switch(config-if)#spanning-tree portfastC. Switch(config-if)#switchport mode trunkD
我有更好的答案
题目意思:下面哪一个命令不会受loop guard指令的影响。答案是B:配置了Portfast的端口不受loop guard指令的影响。PortFast的作用:加快终端主机连接入stp网络的收敛。Portfast只适用于在交换机与主机(电脑)相连链路的端口, 不能(不应该)在交换机与交换机,路由器,hub互连的网络设备的端口使用。把一个端口设置了portfast,就是让那个port不再使用STP的算法。LOOP Guard主要用来避免阻塞端口错误地过渡到转发状态而产生桥接环路的情况。即LOOP Guard只在交换机与交换机之间的链路上起作用。当交换机在启用loop guard特性的非指定端口上停止接收BPDU时,交换机将使得端口进入STP“不一致环路”(inconsistentports)阻塞状态,当不一致端口再次收到BPDU时,端口将根据BPDU自动过滤到STP状态。通过sh spanning-t...
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 zend guard 的文章

 

随机推荐