C# 最佳实践:验证方法调用的条件?
我猜在几乎每一个程序中,有时方法不需要一直被调用,只需要在特定的条件下。 检查是否必须调用方法非常容易。一个简单的if语句就可以做到这一点C# 最佳实践:验证方法调用的条件?,c#,c++,C#,C++,我猜在几乎每一个程序中,有时方法不需要一直被调用,只需要在特定的条件下。 检查是否必须调用方法非常容易。一个简单的if语句就可以做到这一点 if (value == true) { DoSomething(); } 但是如果你有很多条件,验证就会变得复杂,代码也会越来越长。 所以我用每次调用的方法编写代码 方法本身将检查并验证她的代码是否需要执行 DoSomething(value); 。。。然后 public void DoSomething(bool value) { i
if (value == true)
{
DoSomething();
}
但是如果你有很多条件,验证就会变得复杂,代码也会越来越长。
所以我用每次调用的方法编写代码
方法本身将检查并验证她的代码是否需要执行
DoSomething(value);
。。。然后
public void DoSomething(bool value)
{
if (value == true)
{
// Do Something here ...
}
}
现在我有两种做事的方法。我不确定哪条路是正确的。
或者可能还有另一个选项?< /P> < P>检查C(不知道为什么需要C++:)/p>< P>如果方法可以抛出一个参数/AgUnTrimeNoUT异常,那么在调用方法之前应该验证它。另外,Microsofts会告诉您,对于任何使用契约的代码(基本上是静态分析的断言),在调用方法之前是否需要验证输入 一般规则是,验证输入的次数不超过必要的次数。如果某个内容无效,则应抛出异常(C#),或返回错误(C++)。由于输入无效而不执行代码,并且不说明原因,使得下一个开发人员几乎不可能找出问题所在 但是如果你有很多条件,验证就会变得复杂,代码也会越来越长 如果验证很复杂,则表示下面的逻辑很复杂。期望你的代码和你的逻辑一样复杂-它必须在某个地方,对吗?想一想如何用干净的方式写清洁的道路并不总是最短的道路。
我推荐这种变体:
if (value == true)
{
DoSomething();
}
为什么??因为:
- 调用
的代码将更加清晰(*),因为它明确显示了何时应该执行DoSomething
的逻辑,何时不执行DoSomething
本身所依赖的参数较少(这使得它更通用和可重用)DoSomething
*)是的,“更清晰”在这里实际上意味着“更长”,但它也意味着“明确”和“自我记录”。较短的变体实际上试图隐藏一些逻辑,这使得代码不那么清晰。我建议使用第二种方法,但我有一些意见:
if(value==true)
,只需检查if(value)
if(!value){Return;}
此外,使用
value==true
计算布尔值是多余和不必要的。该值本身表示布尔状态(true
/false
),不需要再次与true
进行比较也就是说,最佳实践是使用if(value)
而不是if(value==true)
(或if((value==true)==true
;这似乎很愚蠢,但与if(value==true)
的方法没有太大区别.我发现这个问题的答案相当明显——除非我遗漏了什么。适应每种情况。
被调用的函数应该做它想做的事情。如果它想处理一些参数集,那么一定要在函数内部进行检查。
如果您计划有条件地调用函数,请在外部执行检查。
我认为,将检查移到内部以便保存一些额外的验证不是一个好主意,因为其他人可能想调用您的函数,但不知道它是否在给定参数的情况下实际工作。我说,除非必须进行内部检查,否则将检查留在外部
编辑:
我只是重读了你的问题。。。
你基本上有:
void foo(bool actuallyExecuteFoo)
{
////
}
真的吗?真的吗?第二种方法会花费更多的执行时间,尽管代码看起来会更好。为什么不使用宏呢
#define DOSOMETHING(value) if (value) {DoSomething();}
全部替换
if (value == true) {DoSomething(); }
使用宏DOSOMETHING(值)
你的目的会得到解决,代码看起来会更好在第二种情况下,它实际上就像是
MayDoSomething
而不是DoSomething
,你不能一次性验证,然后处理或处理一组项目。第一种情况明确说明何时执行请扩展你的答案,包括原因。为什么我第二种方法是正确的吗?另外-第1点。只是一种无害的语法冗余,第2点。imho可以被认为是一种偏好。有一些老派程序员建议,为了清晰起见,所有块都应该有一个单一的入口和出口。@Kos:我改为推荐。这只是我的意见。