Die Frage nach Standardwerten im Allgemeinen - Standardwerte für Rückgabefunktionen, Standardparameterwerte, Standardlogik für den Fall, dass etwas fehlt, Standardlogik für die Behandlung von Ausnahmen, Standardlogik für die Behandlung der Randbedingungen usw.
Für eine lange Zeit hielt ich Standardwerte für eine "reine böse" Sache, etwas, das "die Katastrophe verhüllt" und dazu führt, dass es sehr schwer ist, Fehler zu finden. Aber in letzter Zeit habe ich angefangen, mir Standardwerte als eine Art technische Schulden vorzustellen. Das ist keine schlechte Sache, sondern eine Art "kurzfristige Finanzierung", die uns dazu bringt, das Projekt zu überleben (wie viele von uns könnten es sich leisten) ein Haus kaufen, ohne die Hypothek aufzunehmen?).
Wenn ich "kurzfristig" sage, meine ich damit nicht, "mache zuerst etwas schnelles und überarbeite es später, bevor es in die Produktion kommt". Nein, ich spreche davon, mich auf fest codierte Standardwerte in einer Produktionssoftware zu verlassen. Zugegeben - es könnte einige Probleme verursachen, aber was ist, wenn es nur ein einziges Problem in einem ganzen Jahr verursachen würde?
Wiederum - ich spreche hier von der "durchschnittlichen" Mainstream-Software (keine Software für ein Kernkraftwerk) - der durchschnittlichen Website oder einer UI-Anwendung für die Buchhaltungssoftware, was bedeutet, dass Menschenleben nicht auf dem Spiel stehen, noch Millionen von Dollar .
Aus meiner Erfahrung heraus würden Geschäftsanwender lieber mit der Software leben, die "irgendwie funktioniert", als auf eine perfekte zu warten. Die Verwendung von Standardwerten ist sehr hilfreich, wenn Sie eine Software im RAD-Stil entwickeln. Aber wieder - die längsten Debugsitzungen, die ich je verbracht habe, waren wegen der Fehler, die durch einen Standardwert verursacht wurden, der entweder aufgehört hat, "ein Standard" zu sein, oder weil ein kleines Subsystem kürzlich aktualisiert wurde und als Ergebnis dieses Upgrades nicht aktualisiert wurde Behandeln Sie die Standardeinstellung korrekt (z. B. leere Liste gegen Null oder leere Zeichenfolge gegen leere Zeichenfolge).
Also meine Frage ist - sind die Standardwerte gut oder böse. Und wenn es sich um eine technische Verschuldung handelt - wie hoch ist der Betrag, den Sie leihen können, um sich die Rückzahlungen leisten zu können?
Würde mich über jeden Input wirklich freuen.
Prost.
BEARBEITEN:
Wenn ich die Standardwerte verwende, um die Ecken während der Entwicklung zu kürzen, und wenn das Schneiden der Ecken zu Fehlern und Problemen führt, wie kann ich diese Probleme beheben?
Foo()
und einen Anruf gibt,Foo("bar")
fällt dieser eine Anruf eher auf und ist daher besser sichtbar.new FtpService()
derjenige auffallen, der einen alternativen Port festlegt (service.SetPort(12345)
).Nehmen Sie zum Beispiel eine Bibliothek, die das FTP-Protokoll implementiert. Standardmäßig wird erwartet, dass FTP auf Port 21 ausgeführt wird. Jetzt wäre ich sehr irritiert, wenn ich festlegen müsste, dass Port 21 jedes Mal verwendet wird, wenn ich ein Objekt einer zufälligen FTP-Klasse konstruiere. Wenn ich einen anderen Port benötige, lass es mich spezifizieren.
Standardeinstellungen sind vollkommen in Ordnung, wenn es sich um vernünftige Standardeinstellungen handelt.
quelle
http://programmers.stackexchange.com:80/questions/?sort=newest&pagesize=50
in eine Adressleiste getippt ?Sie verwenden wahrscheinlich ein Standardtastaturlayout mit Standardtastenzuordnungen, Standardtastenzuordnungen für die Maus, den Standardbrowser, die Eingabe der Systemstandardsprache, das Booten vom Standardbetriebssystem im Bootloader, standardmäßig positionierte Menüs, das Standardfarbschema und die Standardschrift Breite / Höhe / Gesicht / Stil, Standardzeichensatz, Standardmonitorauflösung, Standard ... Sie bekommen die Idee.
Aber im Ernst, ich denke, die Sorge, die Sie haben, ist nicht mit Standardwerten, sondern mit etwas anderem. Durch das Standardverhalten werden Fehler nicht automatisch maskiert. In den meisten Fällen wird Ihr Code ohnehin unter normalen Bedingungen ausgeführt, unabhängig davon, ob Sie Standardeinstellungen festgelegt haben oder nicht. Unbearbeitete Randfälle sind Dinge, die Sie unbedingt vermeiden sollten (vermutlich durch angemessene und ordnungsgemäße Tests), wenn die Standardeinstellungen geändert werden oder ein ungewöhnliches Szenario eintritt.
Die Behandlung von "Catch-All" -Ausnahmen ist wahrscheinlich eher ein Konstruktionsfehler als alles, was man als "Standard" bezeichnen könnte.
quelle
TODO: or TEMP:
in der Aufgabenliste beginnen. Wenn ich jemals der Entwicklung zuliebe eine Ecke abschneide, versuche ich äußerst vorsichtig zu sein, um sicherzustellen, dass ich ein TODO dort ablege. Hin und wieder mache ich dann ein "Alles finden", um zurückzugehen und mich zu vergewissern nichts davon kommt in irgendwelche wichtigen Builds.Die Standardeinstellungen sollten verwendet werden, wenn der Benutzer oder Entwickler keine sich wiederholenden Aufgaben ausführen muss. Sie sollten niemals verwendet werden, um Fehler oder Ausnahmen zu maskieren. Es ist keine schlechte Praxis, sie zu verwenden, um Fehler zu verhindern, sondern nur, solange die Prävention nichts Schlechtes verdeckt. Standardwerte sind wie alles andere ein Werkzeug. Bei sachgemäßer Anwendung sparen Sie viel Kopfschmerzen und Zeit. Bei unsachgemäßer Anwendung können sie das ganze Haus zum Einsturz bringen.
quelle
Die Hauptursache für die von Ihnen genannten Probleme sind nicht die Standardwerte an sich, sondern Integrationsprobleme aufgrund sich ändernder Schnittstellenverträge, Interpretationsmissverständnissen und / oder ungültigen Annahmen. Grundsätzlich scheinen alle diese (spezifischen Beispiele) das Ergebnis einer unsachgemäßen Kommunikation zu sein - zwischen Client und Entwickler oder zwischen verschiedenen Entwicklern / Teams. Diese Probleme können sich als ungültige Standardwerte, aber auch in unzähligen anderen Formen manifestieren.
Behandeln Sie die Grundursache, nicht das Symptom.
Beachten Sie auch, dass - wie andere mit hervorragenden Beispielen hervorgehoben haben - Standardwerte das Leben der Benutzer erheblich erleichtern können, wenn sie mit Bedacht verwendet werden. Und das ist letztendlich unser Ziel, nicht wahr?
quelle
Standardwerte, die nicht Teil des Kommunikationsprotokolls / der Kommunikationskonvention sind, sind böse. Mit "kein Teil" meine ich, sie sind nicht dokumentiert, wo das Protokoll streng ist, oder sie werden einfach nicht erwartet, wo das Protokoll lose ist.
Wenn der Standardwert dokumentiert / erwartet wird, kann er immer noch böse sein, aber auch Leben retten. Es kommt auf den Domainbereich an. Es ist sehr häufig, wenn sie sehr gefährlich sein können (z. B. Standardmedikamentendosis, Standardaufzugsebene, Standardbewegungsrichtung des Autos), und manchmal kann es gefährlich sein, sie nicht zu haben (z. B. Standardbewegungsrichtung des Autos, Standardbesprechungszeit).
quelle