Mein Kollege ist neu in C # und kannte den Koaleszenzoperator nicht. Also sah ich, wie er eine Codezeile schrieb:
%Vor%Die Idee ist, dass, wenn str null ist, dieser Ausdruck eine leere Zeichenkette zurückgeben würde. Natürlich könnte das wie folgt umgeschrieben werden:
%Vor%Und ich denke, das wäre besser lesbar. Aber ist das wirklich so ein Deal? Sind die Lesbarkeitsvorteile ausreichend, um darauf hinzuweisen, dass diese Zeilen wie die zweite aussehen? Oder ist das eines dieser Dinge, die ich lernen sollte loszulassen (vorausgesetzt, dass mein Kollege über den besten Weg informiert wird, dies in Zukunft zu tun)?
BEARBEITEN : Nur eine Anmerkung, ich schätze die Effizienzkommentare, aber dies wird nicht wirklich in Situationen verwendet, in denen diese Leistung kritisch wäre. Während diese Information interessant ist, ist es nicht unbedingt wichtig, was ich für wichtig halte.
IMO, es ist viel besser, eine solche Logik eindeutig zu definieren, d. h. keine String-Verkettung verwenden, um Null-String zu vermeiden und Bedingungsanweisung zu verwenden oder ?? Betreiber.
Zu anderen Kommentaren:
gibt es auch einen Leistungsvorteil zu mit dem Null-Koaleszenz-Operator, da keine Verkettung stattfinden muss (und daher keine zusätzliche Zeichenfolge Instanz wird erstellt unnötig)
Nicht wahr. Der C # -Compiler kompiliert "" + string2 zum 100% selben Code wie string1 ?? "". Außerdem übersetzt der C # -Compiler den Operator +, um die string.Concat-Methode aufzurufen, die wiederum Argumente mit der Funktion string.IsNullOrEmpty überprüft und in diesem Fall keine neue Zeichenfolge zuweist.
Ich würde auch die Verwendung von empfehlen String.Empty über "" wie es ist a konstant und erfordert nicht die Erstellen einer neuen Zeichenfolge
.NET Framework unterstützt String-Interning , damit "" und String.Empty auf denselben Speicherbereich zeigen
Ich glaube nicht, dass einer lesbarer ist als der andere persönlich. Ich bevorzuge das:
%Vor%einfach weil ich das wirklich mag ?? Betreiber.
Wenn Sie ein Neuling sind, denke ich, dass dies ein bisschen einfacher zu verstehen wäre:
%Vor%oder
%Vor%Allerdings müssen Sie sich fragen: "Wie einfach wollen Sie wirklich werden?"
Obwohl ich die zweite Zeile aus der technischen Perspektive bevorzuge, ist die erste Zeile für mich eigentlich besser lesbar ...
Ich würde Ihr zweites Beispiel dem ersten vorziehen, da es proaktiver gegen str
ist, das null ist und ausdrucksstärker ist. Außerdem würde ich die Verwendung von String.Empty
über ""
empfehlen, da es eine Konstante ist und nicht die Erstellung eines neuen String
erfordert (und ja, das ist ein extremer Nitpick, aber wichtig zu beachten).
Ich würde den Coalesce-Operator oder foo = str == null ? "" : str;
aus zwei Gründen verwenden:
Das erste Beispiel hat nicht das gleiche Verhalten in anderen geschweiften Klammern (insbesondere Java und JavaScript), bei dem das Anhängen eines Nullverweises an eine leere Zeichenfolge zu einer Zeichenfolge führt, die den Text null
enthält. Folglich erfordert das erste Beispiel viel mehr mentale Anstrengung, um sicherzustellen, dass es in der Sprache, die verfasst wird, zum richtigen Verhalten führt. Selbst wenn andere Hinweise vorhanden sind, ist es C # (wie der Kleinbuchstabe string
), alles, was den Entwickler verlangsamt und denkt, "was die Absicht dieses Codes ist" führt zu Produktivitätsverlust. Es könnte auch Fehler beim Wechsel von Sprache zu Sprache verursachen.
Das zweite Beispiel drückt die Absicht des Codes klarer aus, die wie in der ursprünglichen Frage beschrieben ist:
when str is null set foo to an empty string
Im Gegensatz zum ersten Beispiel, das wie folgt gelesen werden kann:
set foo to an empty string with str appended (which may have the side effect of setting foo to an empty string when str is null)
Als Programmierer sollten wir wahrscheinlich versuchen, die Absicht unseres Codes auszudrücken, anstatt uns auf die Nebenwirkungen anderer Operationen zu verlassen, um uns die gewünschten Ergebnisse zu liefern.
Tags und Links string c# concatenation coalesce