변수와 가독성
더스틴 보즈웰, 트레버 파우커
느낌표 ! (인상 깊은 문장 | 문맥)
중간 결과 삭제하기
var removeOne = function (array, valueToRemove) {
var indexToRemove = null;
for (var i = 0 ; i < array.length; i += 1) {
if (array[i] === valueToRemove) {
indexToRemove = i;
break;
}
}
if (indexToRemove !== null) {
array.splice(indexToRemove, 1);
}
}
변수 indexToRemove 는 단지 중간 결과를 저장할 뿐이다. 이러한 변수는 결과를 얻자마자 곧바로 처리하는 방식으로 제거할 수 있다.
p.135
var removeOne = function (array, valueToRemove) {
for (var i = 0 ; i < array.length ; i += 1) {
if (array[i] === valueToRemove) {
array.splice(i, 1);
return;
}
}
}
이게 답을 보면 눈에 확연히 들어오는데 처음 예제를 보면 어떠한 기능인지는 파악이 되나 딱 리펙토링이 눈에 들어오지는 않았다. 그렇지만 마치 넌센스 퀴즈의 답을 듣고나면 허무하듯 개선된 코드를 보니 너무나 당연한 것이라 허무하다. 한편으로는 왜 이러한 스킬이 없나 싶기는 하지만 다른 한편으로는 그래도 이걸 깨달았다는 것이 기분 좋기도 하다.
자바스크립트에서 프라이빗 변수 만들기
submitted = false;
var submitForm = function (formName) {
if (submitted) {
return;
}
...
submitted = true;
}
submitted 와 같은 전역 변수는 코드를 읽는 사람에게 고민을 안겨 줄 것이다. submitForm 만이 submitted 를 사용하는 유일한 함수처럼 보이지만, 확실히 알 수는 없다.
…
submitted 변수를 클로저 내부에 집어넣어 이러한 문제를 해결 할 수 있다.
p.140
var submitForm = (function () {
var submitted = false;
return function (formName) {
if (submitted) {
return;
}
...
submitted = true;
};
})()
이 코딍 에제를 보고는 closure 를 사용할 생각을 하지 못 했다. 그렇지만 closure 를 사용하여 변수를 숨기는 것 매우 좋은 기법 같다. 캡슐화를 해서 데이터의 정교함을 더욱 높일 수 있겠다는 생각이 든다. 코딩을 할 때 closure 를 적용할 수 있는 것인지 의식하며 살펴봐야겠다.
파이썬과 자바스크립트에는 없는 중첩된 범위
example_value = None
if request:
for value in request.values
if value > 0:
example_value = value
break
if example_value:
for logger in debug.loggers:
logger.log("Example:", example_value)
이 예제에서 example_value 를 완전히 제거할 수도 있다. example_value 는 ‘중간 결과 삭제하기’에서 보았던 것처럼 단지 중간 결과값을 저장할 뿐이다. 이러한 변수는 ‘작업을 최대한 일찍 끝마치는’ 방법으로 완전히 제거할 수 있다.
p.143
def LogExample(value):
for logger in debug.loggers:
logger.log("Example:", example_value)
if request:
for value in request.values
if value > 0:
LogExample(value)
break
생각해보면 변수가 많아도 프로그램의 복잡도는 올라가는 것 같다. 해당 변수를 사용해야할지 혹은 변수를 수정할 때 이를 참조하고 있는 곳은 또 어디인지 혹은 지금 사용하려는 변수가 최신의 데이터를 가지고있는지 등 여러 상황을 살펴봐야한다. 이 뜻은 잘못 사용할 가능성이 도사리고 있다는 뜻이기도하다. 이전 챕터에서는 설명 변수, 요약 변수로 변수로 의미를 나타내는 것을 적었다. 모든 것이 그렇듯 적절함이 중요하다. 위 코드의 예제처럼 일회용이면서 변수를 제거하는 것이 가독성을 낮추지 않는다면 오히려 변수를 줄임으로 버그를 줄일 수 있을 것 같다.
값을 한 번만 할당하는 변수를 선호하라
변수들의 값이 변한다면 프로그램을 따라가는 일은 더욱 어려워진다. 변수 값을 일일이 기억하려면 추가적인 어려움이 야기되기 때문이다. 이러한 문제를 해결하기 위해서 조금 이상하게 들릴 수 있는 제안을 하고자 한다. 값을 한 번만 할당하는 변수를 선호하라는 것이다.
p.145
하나의 변수에 계속 값을 할당하며 사용하는 것보단 여러개의 const 를 사용하는 것이 가독성을 높이는데 더 좋은 것 같다.
Chapter 9 느낌
Chapter 9 에서는 변수를 줄여야 코딩을 하며 발생할 수 있는 변수를 줄일 수 있다는 것을 알려주는 것 같다.