Ich frage mich, wie man diese zahlreichen Null-Checks vermeiden oder zumindest verstehen, was der Punkt ist, weil es kontraproduktiv scheint.Flowtype, die ständig Null-Checks erfordert
Flowtype ist mir ein Fehler dafür geben, wenn ich die NULL-Prüfung auslassen:
var myEl = new MyElement()
if (document.body != null) { // error on next line if omitted
document.body.appendChild(myEl)
}
ich in jedem einzelnen Rückruf, der NULL-Prüfung für das Dokument Körper zu tun haben, auch, denn wer weiß, vielleicht der Körper ist hier null richtig ?! Ich denke, das ist totaler Overkill. Nicht nur das, aber was ist der Sinn eines so einfachen Null-Checks? Es wird einfach einen wichtigen Teil des Programms überspringen und unbestimmtes Verhalten an anderer Stelle zeigen und das Debuggen der App um vieles schwieriger machen. Ich würde wirklich lieber nur eine Null-Ausnahme an dieser Stelle, wenn ein Fehler jemals hier passiert, denn um wirklich sicher zu sein, dieses kleine 2-Zeilen-Code-Segment, das ich in Javascript schreiben würde wie folgt in FlowType:
Also 4 zusätzliche Codezeilen und einige Verschachtelung nur um etwas zu verfolgen, was ich kostenlos bekommen würde, wenn ich nur die App in einen Fehler laufen lassen würde. Und ich brauche diese 4 Zeilen für jeden einzelnen QuerySelector. Auf jedem einzelnen Dokument. Auf jeden einzelnen getElementByTagName. Dies allein erhöht wahrscheinlich meine gesamte Codebasis um 10%. Was ist der Zweck, dies so streng durchzusetzen?
In anderen Sprachen wäre ich auch in der Lage zu versuchen, diese Hotspots allmählich nach Bedarf zu fangen, Flow lässt mich das auch nicht tun. Es zeigt Fehler an, ob ich einen try-catch hinzufüge oder nicht.
Sie können 'if (! Document.body) werfen neue Error();', anstelle von 'if/else' und so. Am Ende des Tages macht Flow hier seine Arbeit, was 100% Laufzeitfehler vermeidet, die vom Zeitsystem abgefangen werden können. 'try/catch' dient zum Einfangen expliziter Ausnahmen, aber' Null'-Prüfungen liegen in der Verantwortung des Typsystems. Einige Sprachen erlauben es, Flow dagegen nicht. – loganfsmyth
@Blub meine Frage, was ist der Flowtype-Fehler? Das kann bei der Beantwortung hilfreich sein. Es könnte sich lohnen zu beachten, dass Flowtype als ein Maybe-Typ behandelt werden kann, so dass es nicht immer nur das JavaScript-Null ist. –
@KevinTomiyoshiYang-Datei: '[flow] Aufruf der Methode 'appendChild' (Methode kann möglicherweise nicht auf null-Wert aufgerufen werden)' – Blub