问题标签 [guard-statement]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1221 浏览

ios - Swift:通过在 defer 语句中捕获返回值使调试更容易

所以我喜欢声明变量来保存返回值,然后在下一行返回所述变量,从而使调试我的代码变得容易,我可以在返回行设置一个断点并查看它返回的值。我在任何地方都使用它,它使我的所有代码都更容易调试。

但是,您会遇到这样一种情况,即您必须满足选项和不同的条件才能使您的方法有意义。守卫声明非常适合确保满足某些条件,同时不会引入末日金字塔

但是提前返回的问题是您从您的方法中至少获得了两个退出点(因为在这种情况下guard需要 a return),这使得调试变得更加困难。

如果 Swift 3.X 能让defer 语句能够捕获返回值,那该多好,不是吗?

这将使调试变得更加容易,同时仍然使用guard和早期返回。我不知道在编写编译器等方面有什么意义,但感觉在即将到来的 Swift 版本中实现这一点并不

你能想出一种不同的方法来实现单点读取具有多个退出点的方法的返回值吗?(无需等待我建议的改进defer?)

编辑
我上面的登录示例不是一个完美的示例,对不起,我为什么要编写这样的代码?哈哈!但是还有很多其他类似的场景,可能是这样的,使用do-try-catch也会使代码难以调试:

0 投票
0 回答
68 浏览

swift - Guard 语句参数错误

为了编写更易读的代码,我尝试在适用的情况下使用保护语句来首先检查正确的条件。但是,我遇到了编译时错误。

这是我的代码:

这是我得到的错误:

MyPlayground.playground:511:35: error: 'count' is available: 没有普遍好的答案,请参阅讨论守卫的文档评论 let x = testVar where x.count > 2 else { ^~~~~

Swift.String:114:16:注意:'count' 已在此处明确标记为不可用 public var count: Int { get } ^

0 投票
2 回答
1335 浏览

swift - 如何获得 Guard Statement Fall-through 的测试覆盖率

我今天开始使用 BDD 方法编写 iOS 单元测试。我有一个关于guard语句和达到 100% 代码覆盖率的问题。

我有以下代码,它处理对象的Data转换Customer

创建我们的后端时,一些客户只获得了一个姓氏,其中包含他们的名字和姓氏。这就是为什么客户的名字是可选的;他们的全名可能是last_name.

在我的代码中,客户的名字是可选的,而他们的姓氏是必需的。如果从网络请求收到的 JSON 中没有返回他们的姓氏,那么我不会创建客户。此外,如果Data无法序列化为Dictionary,则不会创建客户。

我有两个 JSON 文件,它们都包含我用来测试这两个场景的客户信息。

一个在 JSON 中不包含名字:

另一个包含 JSON 中的名字:

在我的单元测试中,使用 Quick 和 Nimble,我在Customer名字不可用时处理了 a 的创建:

这可确保我Customer在返回的 JSON 中缺少或存在第一个名称时创建一个。

当我的代码由于数据能够转换为有效的 JSON 对象而没有命中语句的else子句时,如何使用 BDD 达到此方法的 100% 代码覆盖率?guard我是否应该只添加另一个.json包含无法转换为 JSON 对象的数据的文件以确保Customer未创建 a 以及.json包含缺失的文件last_name以确保Customer未创建 a ?

我只是在想“100% 代码覆盖率”的概念吗?我什至需要测试语句的else子句吗?guard我什至有使用 BDD 方法的适当方法吗?

0 投票
2 回答
118 浏览

swift - 有条件地绑定到现有属性

我正在寻找一种改进这种代码模式的方法:

unwrappedI删除临时变量会很好。有什么建议么?

0 投票
1 回答
288 浏览

swift - 正确使用 Swift Guard 关键字?

我一直在寻找如何在 Swift 中使用 guard 关键字。最近一位开发人员告诉我,如果闭包中没有错误,下面的代码将打印“成功” 。

我对他的说法有些困惑。在阅读了 Apple 的闭包和保护关键字文档后,在我看来,他的代码只有在出现错误时才会打印出“成功” 。

我觉得他在反向使用它,但我可能错了。有人可以为我分解它并解释在有或没有错误时是否打印成功

谢谢你。

0 投票
2 回答
4648 浏览

swift - swift guard在使用=操作符时如何判断真假

通过阅读语言指南 (developer.apple.com) 学习 swift 3.1。我了解到,在 swift 中,赋值运算符 (=) 不会返回值。在控制流章节中得到了一个守卫语句的例子:

我的问题是,如果 '=' 运算符不返回值,那么:

守卫如何确定name = person["name"]是真还是假,并取决于它去 else 并返回?

0 投票
2 回答
241 浏览

haskell - 为什么守卫被称为“守卫”?

有谁知道名为guards的结构名称的由来吗?

维基百科文章Guard_(computer_science)给出了一些历史观点,但没有解释名称的来源(它只是提到 SASL 是最早使用该名称的人之一)。

到目前为止,我找到了对 Edsger Dijkstra 和他的 Guarded Command Language 的引用。他是第一个使用“守卫”这个词的吗?

0 投票
2 回答
854 浏览

swift - (Swift) 在保护语句中调用函数

我试图在保护语句中调用一个名为“nextPage”的函数,但它说“()”不能转换为“布尔”。我需要做什么才能调用此函数

0 投票
2 回答
1077 浏览

haskell - 如何在 Haskell 中使用 let 和守卫?

我正在尝试在 Haskell 中执行以下操作:

因此 a 和 b 的值将取决于是否满足守卫中的条件。这种语法不断给我错误,我不知道为什么。我需要使用 where 子句还是有正确的“let”语法来实现我想要的?

谢谢你的帮助

0 投票
3 回答
209 浏览

swift - 如何优雅地将保护语句与条件结合起来?

我目前有警卫声明:

但是我只想在变量needsQuota == true. 我想跳过守卫语句 if needsQuota == false。有没有比带有返回的 if 语句更好的方法呢?

编辑:

如何将其简化为单个守卫?