„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Vermeidung der Fallstricke ungenauer boolescher Auswertungen in JS/TS

Vermeidung der Fallstricke ungenauer boolescher Auswertungen in JS/TS

Veröffentlicht am 01.08.2024
Durchsuche:158

Éviter les pièges des évaluations booléennes imprécises en JS/TS

In der Welt der Webentwicklung stehen wir oft vor Herausforderungen, die auf den ersten Blick einfach erscheinen, sich aber schnell in komplexe Rätsel verwandeln können. Kürzlich hatte ich während eines Angular-Projekts ein interessantes Erlebnis, das mich daran erinnerte, wie wichtig Präzision bei der Auswertung boolescher Bedingungen in TypeScript ist. Ich möchte diese Lektion mit Ihnen teilen und hoffe, dass sie Ihnen hilft, dieselben Fallstricke zu vermeiden.

Der Kontext des Problems

Die Ausgangssituation

In meinem Angular-Projekt wurde ich mit einer Bedingung konfrontiert, die vier boolesche Variablen betraf. Von diesen vier waren zwei auf asynchrone Daten angewiesen, die über Observables vom Backend kamen. Das Ziel war einfach: Die Bedingung sollte nur dann wahr sein, wenn diese beiden spezifischen Variablen falsch waren.

Der anfängliche Ansatz und seine Grenzen

Ich habe mich zunächst für einen Ansatz entschieden, der mir logisch und prägnant erschien:

if (terrainPret && arbitreArrive && 
    !equipeLocaleAbsente && !equipeVisiteuseAbsente) {
  // Commencer le match
}

Dieser Ansatz schien elegant: Die Verwendung des Ausrufezeichens (!) sollte sicherstellen, dass asynchrone Variablen falsch waren. Allerdings stellte ich schnell fest, dass diese Methode eine subtile Falle verbarg.

Die boolesche Auswertungsfalle

Die Offenbarung

Das Problem trat auf, als mir klar wurde, dass sich mein Code nicht wie erwartet verhielt. Nach weiteren Nachforschungen wurde mir klar, dass ich einen entscheidenden Aspekt der booleschen Auswertung in TypeScript übersehen hatte.

Die technische Erklärung

In TypeScript gelten mehrere Werte als „falsch“, das heißt, sie werden in einem booleschen Kontext als falsch ausgewertet. Zu diesen Werten gehören:

  • FALSCH
  • 0
  • "" (leerer String)
  • Null
  • nicht definiert
  • Nein

In meinem Fall könnten asynchrone Variablen undefiniert sein, bevor sie einen Wert vom Backend erhalten. Folglich war die Bedingung !equipeLocaleAbsente beispielsweise nicht nur wahr, wenn die Variable falsch war, sondern auch, wenn sie undefiniert war.

Die Lösung: Seien Sie explizit

Der korrigierte Ansatz

Um dieses Problem zu lösen, musste ich meine Bedingung deutlicher formulieren:

if (terrainPret && arbitreArrive && 
    equipeLocaleAbsente === false && equipeVisiteuseAbsente === false) {
  // Commencer le match
}

Dieser Ansatz stellt sicher, dass asynchrone Variablen speziell falsch sind und nicht einfach nur ein „falscher“ Wert.

Die Vorteile der Präzision

Diese Lösung hat mehrere Vorteile:

  1. Es beseitigt Unklarheiten bei der Bewertung von Bedingungen.
  2. Es macht den Code lesbarer und seine Absichten werden deutlicher.
  3. Es verhindert unerwartetes Verhalten im Zusammenhang mit der Auswertung „falscher“ Werte.

Abschluss

Diese Erfahrung hat mich daran erinnert, wie wichtig Präzision und Klarheit im Code sind, insbesondere bei der Arbeit mit asynchronen Operationen und booleschen Auswertungen. Es unterstreicht auch die Notwendigkeit, die Nuancen der von uns verwendeten Sprache zu verstehen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/bassaoudev/eviter-les-pieges-des-evaluations-booleennes-imprecises-en-jsts-19hg?1 Bei Verstößen wenden Sie sich bitte an [email protected] um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3