# 우아한 자바스크립트 코드 ### 클린코드가 뭐냐? 변경을 위한 코딩(UI는 좀 더 심하다) 읽기 좋은 코드 - 성능은? 가독성 먼져 챙기고 필요할 때 ### 클린코드 전에 클린 설계 - 사용하는 쪽 코드를 먼저 구현하기 ```javascript= const modal = new Modal(); const slider = new Slider(); //이 부분을 먼저 구현 const service = new Service(); service.addPlugin(modal, slider); service.on({}); //그다음 service 구현 ``` ### 함수 수준 설계 - 이름을 잘 짓기 - 파라미터와 반환에 집중 - 이름이랑 함수 일하는게 다르다면 회고... (더 나누던가, 이름을 바꾸던가) ### 변수에 구체적인 의미를 부여 ```javascript= time => currentTime splitted => itemList ``` ### 함수는 '무엇'을 '하다' ```javascript= calculate => calulateNextValue ``` ### getter 길어야 2~3줄로 구성하여 딱 이름을 보고 예상하는 동작만 하게 끔 ### 매개변수가 많으면 object literal 전달 ```javascript= function execSomething({width, height}){ console.log(width, height); } execSomething({ width: 20, height: 400, maxNumber: 300, minNumber: 100 }); ``` ### 긍정 우선 코드 ```javascript= function bad(){ if(!value) return; doSomething(); } function good(){ if(value) doSomething(); } ``` 부정 우선 코드는 말로 설명하다 보면 이상하게 되는 경우가 많음 ### 상수값, 인덱스 값등 의미를 주기 ```javascript= doSomething(obj.methodA()[2], obj.methodB[3]); ``` 의미를 딱 봐서 알수가 없음 이런것 지양 ### 얼마나 분리해야 할까? > 적절한 분리 > 지나친 분리 > 분리 안하기 ### 함수는 같은 입력엔 같은 출력이 나오게 테스트가 쉬워지고(의존성이 없기때문) 신뢰하여 많은 곳에서 재사용할 수 있음 ### 인간 사고흐름과 비슷하면 좋다. ```javascript= pipe(splited, map(trim), map(removeBracket))(str); ``` ### ES6+ - default parameter로 || 대체 - 고차함수는 arrow function으로 간단하게 표현 ### 리팩토링은 중복을 없애는 것 부터 크기만 줄여도 꽤 좋다. 짧은 주기의 리팩토링 ### 전역변수 제거 매개변수를 잘 이용해서 없애기 네임스페이스 객체 사용하기