If statement 我们应该使用'else return'还是'return'?
当我们创建一个返回布尔值的函数时,我们是否应该在每个if/else语句中返回 例如,如果您想检查swift中是否存在一个文件,您可以这样做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("\(
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)
}