问题标签 [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.
c# - 相同条件的保护子句和异常处理
我遇到了以下代码片段。名称已更改以保护无辜者:
我知道这里有一些问题:
- 异常类型没有单独处理
- 错误消息信息不足
请放心,我也会解决这些问题,但我的主要问题是在 try/catch 块之前检查文件是否存在。这让我觉得有点多余。
异常处理的重点是捕捉意外情况。我完全希望文件在那里,因此删除存在检查并让异常处理捕获它,如果它对我来说不是一个合理的解决方案。
你怎么看?
c# - 我应该如何在 C# 中重写一个非常大的复合 if 语句?
在我的 C# 代码中,我有一个很天真地开始的 if 语句:
它正在增长。我认为现在必须有20个条款。
我应该如何处理这个?
haskell - 模式匹配相同的值
我只是想知道是否可以使用函数式编程语言(Haskell/F#/Caml)的模式匹配工具多次匹配相同的值。
想想下面的例子:
当使用两个相似的值(将存储在 中a
)调用函数时,将调用第一个变体。
这是一个更有用的应用程序(简化 AST)。
但是 Haskell 拒绝这些代码并警告我冲突的定义a
- 我必须做明确的 case/if-checks 来确定函数是否有相同的值。有什么技巧可以表明我要匹配的变量会出现多次吗?
c# - 与 F# 匹配表达式最接近的 C#?
我的很多类都是不同类型的知名但无序对象的容器,例如容器可能如下所示:
因此,如果o
是类型A
,则应将其存储在属性A
中,键入属性等等。B
B
在 F# 中,该StoreIfKnown
方法可以编写如下(请原谅语法错误,我的 F# 不是很好而且很生锈):
但在 C# 中,唯一的方法似乎是相当冗长:
我可以使用as
关键字来避免测试/演员模式,这会更快,但更冗长。
在 C# 中有什么优雅的方法可以做到这一点吗?
c# - 重构保护子句
人们采取什么方法(如果有的话)来管理您班级中的保护条款爆炸?例如:
在我目前正在处理的项目中,有许多类在公共方法上有一组类似的保护子句。
我知道 .NET 4.0 代码合同,但目前这不是我们团队的选择。
c++ - vim + c++:在保护子句中插入 uuid
我正在尝试自动化文件注释标题。我一直在试图弄清楚如何uuidgen
使用 vim 的 autocmd 将命令的结果插入到我的标题中。
在标题内,存在占位符文本,如下所示:
_UUID_
在 .vimrc 中填充的 autocmd 行是:
问题出现在 r!uuidgen 下。 如何将 shell 命令执行的结果作为文本插入 autocmd 行?或者在 vi 替换命令中?
haskell - 模式与守卫:否则不匹配?
当给定一个空字符串时,以下两个函数的行为不同:
这是我的输出:
问题:为什么“否则”关闭不捕获空字符串?
c# - 保护条款不触发
所以我一直在尝试让保护条款与 Caliburn.Micro 和绑定的文本框一起使用。
风景:
视图模型:
出于某种原因,在我开始输入文本框后,保护子句没有触发,这是我认为应该发生的。有任何想法吗?
c# - 具有非空保护子句的自动实现属性?
我同意 Mark Seeman 的观点,即自动属性在破坏封装时有些邪恶。不过,我确实喜欢它们带来的简洁语法、可读性和便利性。
我引用:
代码片段的问题不在于它包含太多仪式。问题是它破坏了封装。实际上
“[...] getter 和 setter 没有实现封装或信息隐藏:它们是一种语言合法化的违反它们的方式。”</p>
James O. Coplien & Gertrud Bjørnvig。精益架构。威利。2010 年。134.
大多数情况下,添加非空保护子句对于属性设置器来说已经足够了,我想知道是否有比以下方法更好的方法。更好,我的意思是更简洁/更少重复的方式。
使用代码契约:
使用香草 .NET:
f# - 在 F# 中使用守卫与 if/else 构造进行模式匹配
在 ML 系列语言中,人们倾向于使用模式匹配来if/else
构建。在 F# 中,if/else
在许多情况下,在模式匹配中使用守卫可以轻松替换。
例如,一个简单的delete1
函数可以在不使用的情况下重写if/else
(参见参考资料delete2
):
另一个例子是求解二次函数:
我们应该使用带有守卫的模式匹配来忽略丑陋的if/else
构造吗?
将模式匹配与警卫一起使用是否有任何性能影响?我的印象是它似乎很慢,因为在运行时检查了模式匹配。