본문 바로가기

언어/Javascript

[클린코드 Javascript] 임시변수 제거.

한번도 생각하지 못한 주제였다. 임시변수제거.

알고리즘 문제풀이 할때 임시변수를 못잃는 나였지만, 다시 한번 생각해보게되었다.

 

먼저 임시변수는 블록 스코프내에서 전역변수와 같이 쓰이는 변수이다. 아래 result 변수를 참고하자.

 

 

function getElements(){
    const result = {};
    
    result.title = 'cleanCode'
    result.text = 'how_to_make_cleancode'
    
    return result;
}

다음과 같은 코드는 result를 먼저 선언하고 접근자를 이용해 프로퍼티를 추가했다.

아주 정상적인 나의코드이다.

이는 굳이 선언하고 접근하는 과정을 거쳐서 좋지 못하다. 좀더 명확하게 리펙토링하는 것을 보았다.

function getElements(){
    const result = {
    title : 'cleanCode'
    text : 'how_to_make_cleancode'
    };
   
    return result;
}
function getElements(){

    return {   
    title : 'cleanCode'
    text : 'how_to_make_cleancode'
    };
}

좀 더 명확하게 함수역할이 보인다. 

 

사실 명확하고 임시변수를 줄일 수 있다는 건 알겠는데 '명령형', '선언형' 단어가 뭔가 와닿지 않아서 다른 방법들도 시도해보았따.

function add(arr) {
    let result = 0;
    for (let i = 0; i < arr.length; i++) {
        result += arr[i];
    }
    return result;
}
function add(arr) {
    return arr.reduce((prev, current) => prev + current, 0);
}

명령형은 

1. 그들이 무엇을 하는 방법을 설명하는 프로그래밍이다.

result를 0으로 세팅하고 for문으로 i를 계속해서 더하고( 그 와중에 result 계속 변함) result 반환.

2.  상태를 변경함으로써 문제를 해결한다.

result가 계속해서 arr값과 더해지면서 result상태가 변경함을 확인할 수 있다.

3. 코드 가독성이 좋지 않을 수 있다.

물론 add함수의 경우 간단하기에 보기 쉽지만 길어지면 코드가독성이 좋지 않을 수 있다고 한다.

 

선언형은

1. what에 대해 기술하고 있다
우리가 코드를 본다면 reduce가 어떻게 구현되는지 신경안씀.
2. 어떠한 상태도 변경하지 않는다
 reduce 안에 추상화되어 있다
3. 코드 가독성 높다
메서드 기능을 알게된다면

 

 

 

파이썬의 경우 파이써닉한 코드를 선언형이라고 하기 좋은 것 같기도 하다 생각이들었다.

그리고 아직은 선언형 프로그래밍의 필요성을 크게 느끼진 못해서 프로젝트를 하며 빨리 경험해보고 싶다.

 

 

요약 정리

임시변수 제거하기

이유 : 명령형으로 가득한 로직, 어디서? 어떻게 디버깅이 힘든 코드, 추가적인 코드 작성 유혹

해결책 : 함수 나누기, 바로 반환, 고차함수 map filter등 활용, 선언형 활용