내 스칼라 코드에 버그가 있습니다. 변수에 여러 가지 연산을 수행하여 중간 변수를 많이 만듭니다.어떤 언어로도 범위에서 변수를 제거 할 수 있습니까?
class SomeClass(name: String) {
def doSomeThings() {
val canonicalizedName = canonicalizeName(name)
val boozbangledName = boozbangle(canonicalizedName)
val plobberedName = plobber(boozbangledName)
val flemmedName = flem(boozbangledName) // bug! should have been flem(plobberedName)
// (more code)
doAThing(flemmedName) // correct!
doAnotherThing(name) // bug! should have been doAnotherThing(flemmedName)
}
}
모든 프로그래밍 언어에서 이러한 종류의 버그를 예방할 수있는 방법이 있습니까? 범위에서 "사용되지 않는"변수를 제거 하시겠습니까? 내가 처음 버그를 방지하기 위해 var
를 사용할 수 있지만 여전히 방지하지 않는 두 번째 :
class SomeClass(name: String) {
def doSomeThings() {
var fixedName = name
fixedName = canonicalizeName(fixedName)
fixedName = boozbangle(fixedName)
fixedName = plobber(fixedName)
fixedName = flem(fixedName)
// (more code)
doAThing(fixedName) // good!
doAnotherThing(name) // bug! should have been doAnotherThing(flemmedName)
}
}
}
일부 사람들은 첫 번째 방법이 실제로 더 읽기 쉽다고 주장합니다. 그것은 메서드를 호출 할 때 순서가 중요하다는 것을 명확하게 나타냅니다. – mdnghtblue
이 중간의 모든 작업을 수행하고 flemmedName을 반환하는 별도의 메서드에이 처음 네 줄을 넣는 것은 어떻습니까? doSomeThings()에는 하나의 변수 만 있습니다. 문제 해결됨. – makingthematrix