当我们创建一个返回布尔值的函数时,我们是否应该返回每个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
,或者我们应该在每个return false
语句中添加if
(如下所示) )
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
} else {
return false
}
} else {
return false
}
}
对我来说,第一个例子看起来更干净,但我不确定这是一个好习惯。虽然它看起来更干净,但我想用最好/最安全的方式,所以这个问题并不是对什么看起来最好的看法。
答案 0 :(得分:2)
这个问题几乎看起来像纯粹的基于意见的问题。但我知道一般功能模式,包括你的问题的答案。
一个功能应该:
结果是一个非常线性的控制流程,没有必要的嵌套。将此指南应用于您的代码:
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)
}
答案 1 :(得分:0)
两个例子都会返回" true"只有条件
if(FileManager.default.fileExists(atPath: path.path))
满足。
由于这是返回" true"的唯一方法,因此为了简单和可读性,我将使用第一个示例。 " else" -blocks是不必要的,因为你的函数将不可避免地返回" false"如果不符合上述条件。
答案 2 :(得分:-3)
虽然两者在这里都可以正常工作,但你应该使用其他方式返回以获得更好的练习它比第一个更安全,它也将增加你未来的代码范围