개요
반복문 속 루프 변수, 수집 변수 같이 값을 여러 번 대입할 수 밖에 없는 경우를 제외하고, 변수는 단 한 번만 값을 대입해야 한다.
대입이 두 번 이상 이뤄진다면 여러 가지 역할을 수행한다는 신호다.
예시
function distanceTravelled(scenario, time){ let result; let acc = scenario.primaryForce / scenario.mass;//가속도=힘/질량 let primaryTime = Math.min(time, scenario.delay); result = 0.5 * acc * primaryTime * primaryTime; // 전파된 거리 let secondaryTime = time - scenario.delay; if(secondaryTime > 0){ let primaryVelocity = acc * scenario.delay; acc = (scenario.primaryForce + scenario.secondaryForce) /scenario.mass; result += primaryVelocity * secondaryTime + 0.5 * acc * secondaryTime *secondaryTime; } return result; } |
acc 변수가 두 가지 역할을 하고 있다. 하나는 첫 번째 힘이 유발한 초기 가속도 저장 다른 하나는 두 번째 힘까지 반영된 가속도 저장 |
function distanceTravelled(scenario, time){ let result; //불변으로 정의 const primaryAcceleration = scenario.primaryForce / scenario.mass; let primaryTime = Math.min(time, scenario.delay); result = 0.5 * primaryAcceleration * primaryTime * primaryTime; let secondaryTime = time - scenario.delay; if(secondaryTime > 0){ let primaryVelocity = primaryAcceleration * scenario.delay; //별도 변수 let acc = (scenario.primaryForce + scenario.secondaryForce) /scenario.mass; result += primaryVelocity * secondaryTime + 0.5 * acc * secondaryTime *secondaryTime; } return result; } |
function distanceTravelled(scenario, time){ let result; const primaryAcceleration = scenario.primaryForce / scenario.mass; let primaryTime = Math.min(time, scenario.delay); result = 0.5 * primaryAcceleration * primaryTime * primaryTime; let secondaryTime = time - scenario.delay; if(secondaryTime > 0){ let primaryVelocity = primaryAcceleration * scenario.delay; //불변으로 정의 const secondaryAcceleration = (scenario.primaryForce + scenario.secondaryForce) /scenario.mass; result += primaryVelocity * secondaryTime + 0.5 * secondaryAcceleration * secondaryTime *secondaryTime; } return result; } |
예시: 입력 매개변수의 값을 수정할 때
function discount(inputValue, quantity){ if(inputValue > 50) inputValue = inputValue - 2; if(quantity > 100) inputValue = inputValue - 1; return inputValue; } |
function discount(originalInputValue, quantity){ //call by value 로 가정, 값을 복사해서 쓴다. let inputValue = originalInputValue; if(inputValue > 50) inputValue = inputValue - 2; if(quantity > 100) inputValue = inputValue - 1; return inputValue; } |
function discount(inputValue, quantity){ //적절한 이름으로 변경 let result = inputValue; if(inputValue > 50) result = result - 2; if(quantity > 100) result = result - 1; return result; } |
'IT책, 강의 > 리팩터링' 카테고리의 다른 글
09 - 데이터 조직화 - 파생 변수를 질의 함수로 바꾸기 (0) | 2023.08.24 |
---|---|
09 - 데이터 조직화 - 필드 이름 바꾸기 (0) | 2023.08.19 |
08 - 기능이동 - 죽은 코드 제거하기 (0) | 2023.08.13 |
08 - 기능이동 - 반복문 쪼개기 (0) | 2023.08.10 |
08 - 기능이동 - 문장 슬라이드하기 (0) | 2023.08.08 |