If statement 我们应该使用'else return'还是'return'?

If statement 我们应该使用'else return'还是'return'?,if-statement,language-agnostic,return,If Statement,Language Agnostic,Return,当我们创建一个返回布尔值的函数时,我们是否应该在每个if/else语句中返回 例如,如果您想检查swift中是否存在一个文件,您可以这样做 func fileExists() -> Bool { if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { let path = dir.appendingPathComponent("\(

当我们创建一个返回布尔值的函数时,我们是否应该在每个if/else语句中返回

例如,如果您想检查swift中是否存在一个文件,您可以这样做

func fileExists() -> Bool
{
    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
    {
        let path = dir.appendingPathComponent("\(self.name).\(self.type)")
        if(FileManager.default.fileExists(atPath: path.path))
        {
            return true
        }
    }
    return false
}
问题是,如果满足上述条件,我们应该在函数末尾添加
return false
,还是应该在每个
if
station(如下所示)上添加
return false


对我来说,第一个例子看起来更干净,但是我不确定这是否是一个好的实践。尽管看起来更干净,但我还是想用最好/最安全的方法来代替,所以这个问题不是关于什么看起来最好的意见。

虽然这两种方法在这里都很好,但你应该使用其他方法来进行更好的练习。它比第一个更安全,并且它将增加您未来的代码范围

只有在条件满足时,两个示例才会返回“true”

if(FileManager.default.fileExists(atPath: path.path))
是的

由于这是返回“true”的唯一方法,为了简单易读,我将使用第一个示例。
“else”-块是不必要的,因为如果不满足上述条件,函数将不可避免地返回“false”。

这个问题看起来几乎像是一个纯粹基于意见的问题。但是我知道有一个通用的函数模式,它包含了你问题的答案

职能应:

  • 验证其参数
  • 然后完成任务,负责错误处理,如果无法成功,则进行救援
  • 然后计算并返回其结果
结果是一个非常线性的控制流,没有多余的嵌套。将此准则应用于代码:

func fileExists() -> Bool
{
    //If path exists, the variable dir will have a value. If not, bail out
    guard let dir = FileManager.default.urls(
        for: .documentDirectory,
        in: .userDomainMask
    ).first else {
        return false
    }

    let path = dir.appendingPathComponent("\(self.name).\(self.type)")

    // if(...) { return true; } else { return false; } pattern factored out
    return FileManager.default.fileExists(atPath: path.path)
}

这个问题是特定于语言的吗?如果是,请添加合适的语言标记。@Quentin这不是特定于语言的。我想知道其他语言,因为我也在使用java。给出的例子只是因为我当时正在做那个项目。请看一下这个具体的例子,
if(X){return true},否则{return false}
可以被
return X
替换。这是基于观点的。我的意见是,我会强烈嘲笑第二种风格的代码。使用
if
然后返回
true
false
会让我脊背发抖,喉咙发炎。它如何更安全?你所说的“它将增加你未来的范围”是什么意思?同样,通过这样做,我可以做到罗伯特·C·马丁(Robert C.Martin)在他干净的代码书中所说的。函数应该只有一个缩进级别,最多两个。这允许我将大部分代码保持在一个缩进级别。
func fileExists() -> Bool
{
    //If path exists, the variable dir will have a value. If not, bail out
    guard let dir = FileManager.default.urls(
        for: .documentDirectory,
        in: .userDomainMask
    ).first else {
        return false
    }

    let path = dir.appendingPathComponent("\(self.name).\(self.type)")

    // if(...) { return true; } else { return false; } pattern factored out
    return FileManager.default.fileExists(atPath: path.path)
}