클린 코드란, 코드를 작성할 때 가독성있고 재사용 가능하여 유지 보수성을 높히는 코드를 말합니다.
다음은 "클린한" JS 코드는 어떤 것일까요? 다음의 조건을 충족해야 합니다.
- 읽기 쉽다
- 디버깅이 쉽다
- 효율적이고 고성능이다
// bad
const yyyymmdstr = new Date();
// good
const currentDate = new Date();
// good
const address = 'One Infinite Loop, Cupertino 95014';
const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/;
saveCityZipCode(address.match(cityZipCodeRegex)[1], address.match(cityZipCodeRegex)[2]);
// bad
const address = 'One Infinite Loop, Cupertino 95014';
const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/;
const [, city, zipCode] = address.match(cityZipCodeRegex) || [];
saveCityZipCode(city, zipCode);
// bad
products.map(p => p.id === 1)
// good
products.map(product => ... )
매개변수의 개수를 제한하는 것은 함수 테스팅을 쉽게 합니다.
매개변수가 3개 이상이라면, 테스트하는 경우의 수가 많아집니다.
(3개 이상이라면, 대부분 함수가 너무 많은 역할을 하는 것입니다.)
많은 역할을 하지 않는데 많은 인자를 사용해야 한다면, 객체를 이용할 수 있습니다.
// bad
function createMenu(title,body,buttonText,cancellable) {
//...
}
// good
function createMenu({title,body,buttonText,cacellable){
//...
}
자바스크립트뿐만 아니라 소프트웨어 엔지니어링에서 가장 중요한 규칙입니다. 함수가 1개 이상의 행동을 하면 작성,테스트,이해 모두 어려워집니다.
닌자와 같이 이름이 알려지지 않았지만, 아는 사람들만 아는 무림의 고수가 사용하던 코드다.
그 코드의 특징을 알아보는 글이다.
i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
let ua = userAgent;
let lst = list;
let brsr = browser;
하나의 기능을 담지 말아야 합니다. 함수 이름으로 함수의 기능을 한정 짓지 말자는 의미입니다. 예를 들어, validateEmail(email)와 같은 함수에 이메일 주소인지 아닌지를 판별하는 기능 외에도, 에러 메시지를 보여주는 기능도 추가하고, 메일 주소를 다시 입력하라는 기능도 추가하는 것입니다.
이렇게 만들면 코드 재사용도 방지할 수 있고, 그로 인해서 질문할 수 있는 사람도 없다는 장점이 생긴다.