Ich bin in einem Angular-Beispiel auf dieses Konstrukt gestoßen und frage mich, warum dies gewählt wurde:
_ => console.log('Not using any parameters');
Ich verstehe, dass die Variable _ bedeutet, dass es egal ist / nicht verwendet wird, aber da es die einzige Variable ist, gibt es einen Grund, die Verwendung von _ der Verwendung von _ vorzuziehen:
() => console.log('Not using any parameters');
Sicherlich kann es sich nicht um ein Zeichen weniger handeln, das eingegeben werden muss. Die () Syntax vermittelt meiner Meinung nach die Absicht besser und ist auch typspezifischer, da ich sonst denke, dass das erste Beispiel so aussehen sollte:
(_: any) => console.log('Not using any parameters');
Falls es darauf ankommt, war dies der Kontext, in dem es verwendet wurde:
submit(query: string): void {
this.router.navigate(['search'], { queryParams: { query: query } })
.then(_ => this.search());
}
Antworten:
Der Grund, warum dieser Stil verwendet werden kann (und möglicherweise warum er hier verwendet wurde), ist, dass
_
ein Zeichen kürzer als ist()
.Optionale Klammern fallen in das gleiche Stilproblem wie optionale geschweifte Klammern . Dies ist größtenteils eine Frage des Geschmacks und des Codestils, aber die Ausführlichkeit wird hier aufgrund der Konsistenz bevorzugt.
Während Pfeilfunktionen einen einzelnen Parameter ohne Klammern zulassen, ist er nicht mit null, einer einzelnen destrukturierten, einer einzelnen Pause und mehreren Parametern vereinbar:
Obwohl
is declared but never used
Fehler in TypeScript 2.0 ein für unterstrichene Parameter behoben wurde ,_
kann dies auch eineunused variable/parameter
Warnung von einem Linter oder einer IDE auslösen . Dies ist ein erhebliches Argument dagegen._
kann herkömmlicherweise für ignorierte Parameter verwendet werden (wie die andere Antwort bereits erklärt hat). Während dies als akzeptabel angesehen werden kann, kann diese Gewohnheit zu einem Konflikt mit führen_
Unterstrich / Lodash-Namespace führen. Sie sieht auch verwirrend aus, wenn mehrere Parameter ignoriert werden. Aus diesem Grund ist es vorteilhaft, unterstrichene Parameter richtig benannt zu haben (unterstützt in TS 2.0), spart auch Zeit beim Herausfinden der Funktionssignatur und warum die Parameter als ignoriert markiert werden (dies widerspricht dem Zweck des_
Parameters als Verknüpfung):Aus den oben genannten Gründen würde ich den Codestil persönlich als
_ => { ... }
einen schlechten Ton betrachten, der vermieden werden sollte.quelle
(
normalerweise mit einem Zeichen verbunden ist)
. Ich persönlich bevorzuge die Verwendungp
von Parametern. Ich frage mich auch, ob es Leistungsprobleme gibtNicht genau.
()
sagt, dass die Funktion keine Argumente erwartet, keine Parameter deklariert. Die Funktionen.length
ist 0.Wenn Sie verwenden
_
, wird explizit angegeben, dass der Funktion ein Argument übergeben wird, dass Sie sich jedoch nicht darum kümmern. Die Funktionen.length
1, was in einigen Frameworks von Bedeutung sein kann.Aus Sicht des Typs ist es möglicherweise genauer, dies zu tun (insbesondere, wenn Sie es nicht mit tippen,
any
aber beispielsweise_: Event
). Und wie Sie sagten, ist es ein Zeichen weniger zu tippen, was auch auf einigen Tastaturen leichter zu erreichen ist.quelle
_
verwendeten()
Ich denke, es
_ =>
wird nur über verwendet,() =>
weil_
es in anderen Sprachen üblich ist, wo es nicht erlaubt ist, nur Parameter wie in JS wegzulassen._
ist in Go beliebt und wird auch in Dart verwendet, um anzuzeigen, dass ein Parameter ignoriert wird und wahrscheinlich andere, die ich nicht kenne.quelle
_
wurde vermutlich aus funktionalen Sprachen wie ML und Haskell entlehnt, wo sie lange vor der Erfindung von Python (geschweige denn Go, Dart oder TypeScript) lag.Es ist möglich, zwischen den beiden Verwendungen zu unterscheiden, und einige Frameworks verwenden dies, um verschiedene Arten von Rückrufen darzustellen. Ich denke zum Beispiel, dass Nodes Express Framework dies verwendet, um zwischen Middleware-Typen zu unterscheiden. Beispielsweise verwenden Fehlerbehandler drei Argumente, während das Routing zwei verwendet.
Eine solche Unterscheidung kann wie im folgenden Beispiel aussehen:
quelle
Als ich den Beitrag schrieb, hatte ich den Eindruck, dass dies
_
die einzige Möglichkeit war, Pfeilfunktionen ohne zu erstellen()
, was mich zu der Annahme führte, dass die Verwendung_
einige geringfügige Vorteile haben könnte, aber ich habe mich geirrt. @Halt hat in den Kommentaren bestätigt, dass es sich wie andere Variablen verhält, es ist kein spezielles Sprachkonstrukt.Ich möchte noch etwas erwähnen, das ich über diese Unterstrichpfeilfunktionen beim Testen selbst festgestellt habe, das ich nirgendwo erwähnt habe. Sie können den Unterstrich in der Funktion als Parameter verwenden , obwohl dies wahrscheinlich nicht beabsichtigt ist, da er einen nicht verwendeten Parameter darstellen soll. Aus Gründen der Klarheit würde ich es nicht wirklich empfehlen, es so zu verwenden.
Aber es kann nützlich sein, Dinge wie Codegolf zu kennen , Herausforderungen, bei denen Sie den kürzesten Code schreiben(es stellt sich heraus, dass Sie einfach jedes Zeichen ohne verwenden können()
). Ich könnte mir einige reale Anwendungsfälle vorstellen, in denen Bibliotheken dies verwenden und Sie es verwenden müssen, auch wenn sie diese Funktionalität nicht beabsichtigt haben.Beispiel:
Getestet mit der Chrome-Konsole, Version 76.0.3809.132 (Official Build) (64-Bit)
quelle
()
bevor ich diesen Beitrag verfasst habe. Ich dachte, dies wäre_
der einzige Weg, weshalb ich mich entschied, darauf hinzuweisen. In diesem Sinne stellt sich heraus, dass es auch für das Golfen nichts Besonderes ist, da man einfach einen normalen Charakter verwenden kann. Besser einfach zum Befolgen von Konventionen verwendet, wie Sie sagten.