问题标签 [guard-clause]

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 投票
4 回答
1233 浏览

c# - 相同条件的保护子句和异常处理

我遇到了以下代码片段。名称已更改以保护无辜者:

我知道这里有一些问题:

  • 异常类型没有单独处理
  • 错误消息信息不足

请放心,我也会解决这些问题,但我的主要问题是在 try/catch 块之前检查文件是否存在。这让我觉得有点多余。

异常处理的重点是捕捉意外情况。我完全希望文件在那里,因此删除存在检查并让异常处理捕获它,如果它对我来说不是一个合理的解决方案。

你怎么看?

0 投票
18 回答
20837 浏览

c# - 我应该如何在 C# 中重写一个非常大的复合 if 语句?

在我的 C# 代码中,我有一个很天真地开始的 if 语句:

它正在增长。我认为现在必须有20个条款。

应该如何处理这个?

0 投票
4 回答
6892 浏览

haskell - 模式匹配相同的值

我只是想知道是否可以使用函数式编程语言(Haskell/F#/Caml)的模式匹配工具多次匹配相同的值。

想想下面的例子:

当使用两个相似的值(将存储在 中a)调用函数时,将调用第一个变体。

这是一个更有用的应用程序(简化 AST)。

但是 Haskell 拒绝这些代码并警告我冲突的定义a- 我必须做明确的 case/if-checks 来确定函数是否有相同的值。有什么技巧可以表明我要匹配的变量会出现多次吗?

0 投票
5 回答
1618 浏览

c# - 与 F# 匹配表达式最接近的 C#?

我的很多类都是不同类型的知名但无序对象的容器,例如容器可能如下所示:

因此,如果o是类型A,则应将其存储在属性A中,键入属性等等。BB

在 F# 中,该StoreIfKnown方法可以编写如下(请原谅语法错误,我的 F# 不是很好而且很生锈):

但在 C# 中,唯一的方法似乎是相当冗长:

我可以使用as关键字来避免测试/演员模式,这会更快,但更冗长。

在 C# 中有什么优雅的方法可以做到这一点吗?

0 投票
5 回答
16978 浏览

c# - 重构保护子句

人们采取什么方法(如果有的话)来管理您班级中的保护条款爆炸?例如:

在我目前正在处理的项目中,有许多类在公共方法上有一组类似的保护子句。

我知道 .NET 4.0 代码合同,但目前这不是我们团队的选择。

0 投票
2 回答
699 浏览

c++ - vim + c++:在保护子句中插入 uuid

我正在尝试自动化文件注释标题。我一直在试图弄清楚如何uuidgen使用 vim 的 autocmd 将命令的结果插入到我的标题中。

在标题内,存在占位符文本,如下所示:

_UUID_在 .vimrc 中填充的 autocmd 行是:

问题出现在 r!uuidgen 下。 如何将 shell 命令执行的结果作为文本插入 autocmd 行?或者在 vi 替换命令中?

0 投票
3 回答
2583 浏览

haskell - 模式与守卫:否则不匹配?

当给定一个空字符串时,以下两个函数的行为不同:

这是我的输出:

问题:为什么“否则”关闭不捕获空字符串?

0 投票
1 回答
292 浏览

c# - 保护条款不触发

所以我一直在尝试让保护条款与 Caliburn.Micro 和绑定的文本框一起使用。

风景:

视图模型:




出于某种原因,在我开始输入文本框后,保护子句没有触发,这是我认为应该发生的。有任何想法吗?

0 投票
3 回答
4442 浏览

c# - 具有非空保护子句的自动实现属性?

我同意 Mark Seeman 的观点,即自动属性在破坏封装时有些邪恶。不过,我确实喜欢它们带来的简洁语法、可读性和便利性。

我引用:

代码片段的问题不在于它包含太多仪式。问题是它破坏了封装。实际上

“[...] getter 和 setter 没有实现封装或信息隐藏:它们是一种语言合法化的违反它们的方式。”</p>

James O. Coplien & Gertrud Bjørnvig。精益架构。威利。2010 年。134.

大多数情况下,添加非空保护子句对于属性设置器来说已经足够了,我想知道是否有比以下方法更好的方法。更好,我的意思是更简洁/更少重复的方式。

使用代码契约:

使用香草 .NET:

0 投票
4 回答
5010 浏览

f# - 在 F# 中使用守卫与 if/else 构造进行模式匹配

在 ML 系列语言中,人们倾向于使用模式匹配来if/else构建。在 F# 中,if/else在许多情况下,在模式匹配中使用守卫可以轻松替换。

例如,一个简单的delete1函数可以在不使用的情况下重写if/else(参见参考资料delete2):

另一个例子是求解二次函数:

我们应该使用带有守卫的模式匹配来忽略丑陋的if/else构造吗?

将模式匹配与警卫一起使用是否有任何性能影响?我的印象是它似乎很慢,因为在运行时检查了模式匹配。