Methods 从布尔方法返回的公认实践是什么
好的,这是一个简单的问题,但我想就正确的做法提出一些建议。我不是为了性能考虑,因为CPU的功能非常强大,除非在没有数千次迭代的循环构造的情况下调用,否则不会产生任何明显的差异。我只是想了解一下什么是公认的标准 我有一个方法,基本上只是做一个检查,返回一个布尔值。然而,有许多方法可以实现这一点Methods 从布尔方法返回的公认实践是什么,methods,boolean,Methods,Boolean,好的,这是一个简单的问题,但我想就正确的做法提出一些建议。我不是为了性能考虑,因为CPU的功能非常强大,除非在没有数千次迭代的循环构造的情况下调用,否则不会产生任何明显的差异。我只是想了解一下什么是公认的标准 我有一个方法,基本上只是做一个检查,返回一个布尔值。然而,有许多方法可以实现这一点 public bool CanUndo() { if (_nCurrentUndoIndex > 0) return true;
public bool CanUndo()
{
if (_nCurrentUndoIndex > 0)
return true;
else
return false;
}
以下是我通常如何实现这一点
public bool CanUndo()
{
if (_nCurrentUndoIndex > 0)
return true;
else
return false;
}
然而,从方法的中间返回通常是不受欢迎的。我通常唯一一次这样做是在对这样的表单提交执行检查时
if (String.IsNullOrEmpty(firstName.Text))
{
MessageBox.Show("Please enter a first name", "Incomplete");
return;
}
<>我认为是可以接受的。
回到撤销问题,编写代码的另一种方法是这样
public bool CanUndo()
{
bool returnVal;
if (_nCurrentUndoIndex > 0)
returnVal = true;
else
returnVal = false;
return returnVal;
}
然而,这不必要地分配了一个变量,而且代码更加冗长。另一个选择是
public bool CanUndo()
{
bool returnVal = false;
if (_nCurrentUndoIndex > 0)
returnVal = true;
return returnVal;
}
这是更精简,因为它摆脱了其他。但是,如果该值为true,则通过将其初始化为false来进行不必要的赋值
public bool CanUndo () {
return _nCurrentUndoIndex > 0;
}
就我个人而言,从一个方法中间返回并没有问题。但在RAII的帮助下,争论消失了
我宁愿在合适的时候尽快离开,否则你会
if (x) {
if (y) {
if (z) {
complete
}
}
}
而不是
if (!x)
return
if (!y)
return
if (!z)
return
complete
这样可以避免嵌套、宽行(水平屏幕空间很昂贵,垂直空间很便宜),并且您始终知道,如果您仍在函数中,那么您就不会处于错误路径中。适用于此设计的代码也适用于例外情况,这一点非常重要
public bool CanUndo()
{
return (_nCurrentUndoIndex > 0);
}
就我个人而言,从一个方法中间返回并没有问题。但在RAII的帮助下,争论消失了
我宁愿在合适的时候尽快离开,否则你会
if (x) {
if (y) {
if (z) {
complete
}
}
}
而不是
if (!x)
return
if (!y)
return
if (!z)
return
complete
这样可以避免嵌套、宽行(水平屏幕空间很昂贵,垂直空间很便宜),并且您始终知道,如果您仍在函数中,那么您就不会处于错误路径中。适用于这种设计的代码也适用于例外情况,这一点非常重要。您应该始终将布尔值返回压缩为其逻辑等价值,因为这对开发人员来说更容易阅读,为您编写的速度更快,并且无论如何都会被编译器压缩
public bool CanUndo()
{
return (_nCurrentUndoIndex > 0);
}
考虑扩展的或:
if (a == 1)
return true;
else if (a == 2)
return true;
else if (a == 3)
return true;
else
return false;
当您将其与合同版本进行比较时,原因应该显而易见
return (a == 1) || (a == 2) || (a == 3)
您应该始终将布尔返回压缩为它们的逻辑等价物,因为这对开发人员来说更容易阅读,为您编写的速度更快,而且编译器也会对其进行压缩
考虑扩展的或:
if (a == 1)
return true;
else if (a == 2)
return true;
else if (a == 3)
return true;
else
return false;
当您将其与合同版本进行比较时,原因应该显而易见
return (a == 1) || (a == 2) || (a == 3)
是的,我忘记了,我们可以把它实现为一个内联函数,在头文件中实现,回到我的C++天。也许我选择了一个简单的场景。如果条件比simply>比较更复杂,并且不能在一行中实现它并保持可读性,您会选择三个选项中的哪一个。如果不需要添加清理代码,我会选择多返回路线。如果您必须为额外的分支复制清理代码,那么这将成为一个品味问题。对于小函数来说,对于大的函数并不重要,将它们重构成较小的函数。是的,我忘记了在基线时,在C++文件中实现的替代函数,基本上,我们将实现为内联函数。也许我选择了太简单的场景。如果条件比simply>比较更复杂,并且不能在一行中实现它并保持可读性,您会选择三个选项中的哪一个。如果不需要添加清理代码,我会选择多返回路线。如果您必须为额外的分支复制清理代码,那么这将成为一个品味问题。对于小功能来说这并不重要,对于大功能来说,把它们重构成小功能。你担心的是一个无关紧要的细节。编译器可能会优化掉大部分差异,即使没有,你也不会注意到差异,除非你谈论的是上亿次(而不是数千次)的循环。你担心的是一个无关紧要的细节。编译器可能会优化掉大部分差异,即使没有,也不太可能注意到差异,除非您正在谈论的是100万(而不是数千)的循环。