Coalesce vs leere Zeichenfolge Verkettung

8

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.

    
Jason Baker 06.01.2009, 13:18
quelle

7 Antworten

10

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

    
aku 06.01.2009, 13:24
quelle
3

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?"

    
wcm 06.01.2009 13:27
quelle
2

Obwohl ich die zweite Zeile aus der technischen Perspektive bevorzuge, ist die erste Zeile für mich eigentlich besser lesbar ...

    
Brian Knoblauch 06.01.2009 13:31
quelle
1

Die zweite Zeile sieht für mich besser lesbar aus und verdeutlicht die Absicht des Ausdrucks auf der rechten Seite.

    
Raminder 06.01.2009 13:25
quelle
1

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).

    
Andrew Hare 06.01.2009 13:25
quelle
1

Ich würde den Coalesce-Operator oder foo = str == null ? "" : str; aus zwei Gründen verwenden:

  1. 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.

  2. 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.

    
Grant Wagner 06.01.2009 20:34
quelle
0

Hier ist ein Artikel über string.empty vs ""

Ссылка

    
Mike_G 06.01.2009 14:08
quelle

Tags und Links