有一个问题我现在真的很想问。 查看Swift中的以下代码
import UIKit
var str = "Hello, playground"
var flag = true
func checkA() -> Bool{
if str == "Hello, playground" && flag == true {
return true
}
return false
}
func checkB() -> Bool{
return str == "Hello, playground" && flag == true
}
checkA()
checkB()
可以看到' checkA()'和' checkB()'基本上是相同的功能,因为它每次都返回相同的值。在我看来(我从不擅长编程),我更喜欢&checka()'因为它比checkB()
更具可读性。任何人都可以阅读' checkA()'并且只知道它的意思但人们(或许只是我)需要考虑checkB()
中发生的事情。
使用checkB()
代替checkA()
是否有任何性能优势,或者这只是偏好?
答案 0 :(得分:1)
我认为这些内容没有任何性能变化,checkB()
代码较少且更清晰,但checkA()
更具可读性。由您决定使用的是什么。
答案 1 :(得分:1)
在相同的优化设置下,这两个人应该(理论上)最终都是一样的。
我决定让Xcode告诉我,这更快(也是使用measure
中的XCTest
块的借口)
答案是checkB()
FTW!
这里需要注意的是,我刚刚创建了一个全新的Xcode项目并输入了此代码 - 没有使用优化设置或其他任何内容
import XCTest
@testable import BoolTest
class BoolTestTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
var str = "Hello, playground"
var flag = true
func checkA() -> Bool{
if str == "Hello, playground" && flag == true {
return true
}
return false
}
func checkB() -> Bool{
return str == "Hello, playground" && flag == true
}
func testA() {
self.measure {
for _ in 1...1000000 {
let _ = self.checkA()
}
}
}
func testB() {
self.measure {
for _ in 1...1000000 {
let _ = self.checkB()
}
}
}
}