Null은 나쁩니다

Javascript(와 확장해서 TypeScript)는 두 가지 기본 타입을 가지고 있습니다 : nullundefined. 이 둘은 다른 것을 의미함을 의도한 것입니다:

  • 뭔가 초기화되지 않았습니다 : undefined
  • 뭔가 지금 사용 불가합니다 : null

대부분의 다른 언어는 (보통 null이라고 불리는) 한 가지만 가지고 있습니다. 기본으로 JavaScript는 초기화되지 않은 변수 / 인자 / 속성을 undefined로 처리할 것이기 때문에 (선택할 수 없습니다) 사용 불가 상태를 그것으로 사용할 것을 추천하고 null을 괴롭히지 마세요.

실제 토론

TypeScript 팀은 null을 사용하지 않습니다 : TypeScript 코딩 가이드라인과 이는 아무 문제도 발생하지 않습니다. Douglas Crockford는 null은 나쁜 아이디어라고 생각합니다. 그리고 모두 undefined를 사용해야 합니다.

null 스타일을 다루기 위한 코드 베이스

코드 베이스가 null을 주는 다른 API를 사용한다면 == undefined로 (=== 대신) 검사하세요. 잠재적인 잘못된 값 때문에 이렇게 사용하는 것이 안전합니다.

/// Image you are doing `foo == undefined` where foo can be one of:
console.log(undefined == undefined); // true
console.log(null == undefined); // true
console.log(0 == undefined); // false
console.log('' == undefined); // false
console.log(false == undefined); // false

추가 팁

undefined의 명시적인 사용 제약하기

또한 TypeScript는 값과 별개로 구조체를 문서화하는 기회를 주기 때문에 다름과 같은 것 대신:

function foo(){
  // if Something
  return {a:1,b:2};
  // else
  return {a:1,b:undefined};
}

타입 주석을 사용할 수 있습니다:

function foo():{a:number,b?:number}{
  // if Something
  return {a:1,b:2};
  // else
  return {a:1};
}

node 스타일의 콜백

노드 스타일의 콜백 함수는 (예를들어 (err,somthingElse) => { /* something */ }) 일반적으로 에러가 없다면 errnull로 설정하여 호출됩니다. 어째든 일반적으로 참거짓 확인을 사용합니다:

fs.readFile('someFile', 'utf8', (err,data) => {
  if (err) {
    // do something
  }
  // no error
});

자신의 API를 만들때 일관성을 유지하기 위해서 null을 사용하는 것은 괜찮습니다. 자신의 API에서 pomise를 사용할 경우 에러 값의 부재를 처리할 필요가 없습니다. (.then vs. .catch로 처리합니다)

유효성을 나타내는 의미로 undefined를 사용하지 마세요

예를들어 다음과 같은 끔찍한 함수:

function toInt(str:string) {
  return str ? parseInt(str) : undefined;
}

다음과 같이 작성하는 것이 더 낫습니다:

function toInt(str: string): { valid: boolean, int?: number } {
  const int = parseInt(str);
  if (isNaN(int)) {
    return { valid: false };
  }
  else {
    return { valid: true, int };
  }
}

results matching ""

    No results matching ""