source

ES6/Typescript에서 화살표 함수와 함께 _(밑줄) 변수 사용

manycodes 2023. 4. 6. 21:48
반응형

ES6/Typescript에서 화살표 함수와 함께 _(밑줄) 변수 사용

Angular의 예에서 이 구성을 발견했는데, 왜 이것이 선택되었는지 궁금합니다.

_ => console.log('Not using any parameters');

그 변수는 이해한다._don't care/not used(상관없음/사용되지 않음)를 의미하지만 변수가 하나뿐이므로 사용을 선호할 이유가 있습니다._오버:

() => console.log('Not using any parameters');

확실히 타이핑해야 할 문자가 하나 적으면 안 됩니다.()구문은 내 생각에 의도를 더 잘 전달하고 유형도 더 구체적입니다. 그렇지 않으면 첫 번째 예는 다음과 같이 생겼어야 한다고 생각하기 때문입니다.

(_: any) => console.log('Not using any parameters');

만약의 경우, 이것이 사용된 컨텍스트입니다.

submit(query: string): void {
    this.router.navigate(['search'], { queryParams: { query: query } })
      .then(_ => this.search());
}

이 스타일을 사용할 수 있는 이유(그리고 여기에 사용된 이유일 수도 있음)는 다음과 같습니다._보다1글자 짧다().

옵션 괄호는 옵션인 컬리 괄호와 같은 스타일입니다.이것은 대부분 취향과 코드 스타일의 문제이지만, 여기서는 일관성이 있기 때문에 장황함이 선호된다.

화살표 기능은 괄호 없이 단일 매개 변수를 사용할 수 있지만 제로, 단일 구조화, 단일 정지 및 다중 매개 변수와 일치하지 않습니다.

let zeroParamFn = () => { ... };
let oneParamFn = param1 => { ... };
let oneParamDestructuredArrFn = ([param1]) => { ... };
let oneParamDestructuredObjFn = ({ param1 }) => { ... };
let twoParamsFn = (param1, param2) => { ... };
let restParamsFn = (...params) => { ... };

비록 ~일지라도is declared but never usedTypeScript 2.0에서 밑줄 친 파라미터에 대한 오류가 수정되었습니다._트리거할 수도 있습니다.unused variable/parameter라인터 또는 IDE로부터의 경고.이것은 이것을 하는 것에 대한 상당한 반대 의견이다.

_는 (다른 답변에서 설명한 바와 같이) 일반적으로 무시된 파라미터에 사용할 수 있습니다.이것은 받아들일 수 있는 것으로 간주될 수 있지만, 이 습관은 다음과 같은 상충을 일으킬 수 있습니다._언더스코어/Lodash 네임스페이스는 여러 개의 무시된 파라미터가 있는 경우에도 혼란스러워 보입니다.따라서 (TS 2.0에서 지원됨) 파라미터에 적절한 이름을 붙이는 것이 좋습니다.또한 함수 시그니처와 파라미터가 ignored로 마킹된 이유를 파악하는 데 걸리는 시간을 절약합니다(이는 다음 목적에 반함)._숏컷으로서의 파라미터:

let fn = (param1, _unusedParam2, param3) => { ... };

상기의 이유로, 개인적으로 검토하겠습니다._ => { ... }코드 스타일은 피해야 할 나쁜 톤입니다.

()구문은 imho의 의도를 더 잘 전달하고 또한 더 구체적인 유형입니다.

꼭 그렇진 않아요 ()이 함수는 인수를 요구하지 않으며 파라미터를 선언하지 않음을 나타냅니다.함수의.length0이 .

「 」를 사용하고 _함수는 하나의 인수로 전달되지만 사용자는 상관하지 않는다고 명시되어 있습니다.는 ★★★★★.length1면이다.이는 일부 프레임워크에서는 문제가 될 수 있습니다.

타이핑의 더요.any예를 들면, '아까', '아까', '아까',_: Event말씀하신 대로 입력하기 쉬운 문자가1글자 적습니다.키보드도 있어요

, 아, 아, 맞다._ =>요.() =>_JS와 같이 매개 변수를 생략할 수 없는 다른 언어에서는 일반적입니다.

_바둑에서 인기가 있고 Dart에서도 파라미터가 무시되고 다른 파라미터가 있을 수 있음을 나타내는 데 사용됩니다.

두 가지 사용법을 구별할 수 있으며 일부 프레임워크에서는 이를 사용하여 다른 유형의 콜백을 나타냅니다.예를 들어 노드 express 프레임워크는 미들웨어 유형을 구별하기 위해 이를 사용하는 것으로 생각합니다.예를 들어 오류 핸들러는 3개의 인수를 사용하고 라우팅은 2개의 인수를 사용합니다.

이러한 차이는 다음과 같습니다.

const f1 = () => { } // A function taking no arguments
const f2 = _ => { }  // A function with one argument that doesn't use it

function h(ff) { 
  if (ff.length === 0) {
    console.log("No argument function - calling directly");
    ff();
  } else if (ff.length === 1) {
    console.log("Single argument function - calling with 1");
    ff(1);
  }
}

h(f1);
h(f2);

이것은 Bergi의 대답에 근거하고 있습니다만, 저는 예를 추가하는 것이 다른 사람에게의 투고보다 조금 더 편집이라고 생각했습니다.

언급URL : https://stackoverflow.com/questions/41085189/using-underscore-variable-with-arrow-functions-in-es6-typescript

반응형