Haben Sie von einem Kurzschluss gehört (Kurzschlussauswertung)?
[Logischer Operator] wie "<< Linke Seite >> << Logischer Operator >> << Rechte Seite >>" (https://ja.wikipedia.org/wiki/%E8%AB%96%E7%90%86%E6 % BC% 94% E7% AE% 97% E5% AD% 90) Angenommen, es gibt einen Ausdruck (logischer Operatorausdruck). Die Kurzschlussbewertung dient dazu, die rechte Seite (zweites Argument) nur dann zu bewerten, wenn der Wert des gesamten Ausdrucks im Stadium der Bewertung der linken Seite (erstes Argument) nicht bestimmt wird. Kurze Evaluierungs-Wikipedia
Javas Kurzschlussoperator ist||
Wann&&
Anwendbar.
Ein logischer Operator, der "und" oder "oder" bedeutet, wenn logische Operationen ausgeführt werden.
Lassen Sie uns im Detail erklären, was das bedeutet.
Die Methode isEmpty überprüft das Argument vom Typ String und gibt den booleschen Wert als Prüfergebnis zurück.
Die zu überprüfende Bedingung ist "entweder null oder ein leeres Zeichen", aber der logische Operator, der "oder" bedeutet, ist der Kurzschlussoperator.||
ist.
private static boolean isEmpty(String str) {
if (str == null || str.isEmpty()) {
return true;
}
return false;
}
Wenn das an isEmpty übergebene Argument str null ist, ist das Bewertungsergebnis der linken Seite "str == null" "true". Da das Bewertungsergebnis auf der linken Seite "wahr" ist, ändert sich das Bewertungsergebnis der if-Anweisung nicht, unabhängig davon, ob das Bewertungsergebnis auf der rechten Seite "str.isEmpty ()" wahr "oder" falsch "ist. Daher ist die Auswertung auf der rechten Seite nicht erforderlich und die Auswertung selbst wird nicht ausgeführt. Der Bewertungsprozess wird übersprungen. Wenn das Argument str beispielsweise nicht null ist, muss die rechte Seite ausgewertet und "str.isEmpty ()" ausgeführt werden.
Wenn die Bewertungsergebnisse beider Seiten durch die Bewertungsergebnisse der linken Seite bestätigt werden, führt ** Kurzschluss (Kurzschlussbewertung) ** keine unnötige Bewertung der rechten Seite durch.
||
Wertet für Operatoren aus, ob entweder die linke oder die rechte Seite wahr ist.
Wenn die linke Seite wahr ist, wird die rechte Seite nicht bewertet, da das Bewertungsergebnis abhängig von der rechten Seite nichts anderes als wahr sein kann.
Wenn die linke Seite falsch ist, ist das Bewertungsergebnis wahr, wenn die rechte Seite wahr ist, und wenn falsch, ist das Bewertungsergebnis falsch, daher muss auch die rechte Seite bewertet werden.
Der Operator "&&" bewertet, ob sowohl die linke als auch die rechte Seite wahr sind. Wenn die linke Seite falsch ist, wird die rechte Seite nicht ausgewertet, da das Bewertungsergebnis je nach rechter Seite nichts anderes als falsch ist. Wenn die linke Seite wahr ist, ist das Bewertungsergebnis wahr, wenn die rechte Seite wahr ist, und wenn es falsch ist, ist das Bewertungsergebnis falsch, daher muss auch die rechte Seite bewertet werden.
Der logische Operator berechnet das Bewertungsergebnis, indem er die Bewertungen sowohl der rechten als auch der linken Seite kombiniert. Durch Verwendung des Kurzschlussoperators ist es jedoch möglich, nur einen von ihnen auszuwerten, dh die Verarbeitung zur Laufzeit zu vereinfachen.
Wenn das im Beispielcode an isEmpty übergebene Argument str null ist, wird die rechte Seite "str.isEmpty ()" nicht ausgeführt. Das heißt, während der Auswertung der if-Anweisung tritt keine NullPointerException auf.
Aber was ist, wenn Sie die linke und rechte Seite tauschen?
private static boolean isEmpty(String str) {
if (str.isEmpty() || str == null) {
return true;
}
return false;
}
Eine NullPointerException tritt auf, wenn die linke Seite "str.isEmpty ()" ausgewertet wird. Bei der Codierung kann es erforderlich sein, die Auswertungsreihenfolge der linken und rechten Seite auf diese Weise zu berücksichtigen.
Logischer Operator||
Wann&&
がショートサーキットである意識がない場合、左辺の評価によって右辺の評価自体が行われないこWannも意識できません。
Logische Java-Operatoren||
Wann&&
はショートサーキットであるこWannを意識してのコーディングが必要です。
Grundsätzlich als logischer Operator in Java||
Wann&&
を使用するWann思いますが、ショートサーキットではない、左辺Wann右辺を必ず評価する論理演算子も存在します。|
Wann&
ist.
Dies wird als vollständiger Auswertungsoperator bezeichnet. Es wird auch als vollständige boolesche Auswertung oder vollständige logische Auswertung bezeichnet.
Ich habe Java seit einigen Jahren geschrieben, aber ich habe es nie benutzt. Es ist immer eine Kurzschlussvoraussetzung.
Dies ist jedoch auf Sprachen beschränkt, die Kurzschlussoperatoren haben, und umgekehrt haben einige Sprachen keine Kurzschlussoperatoren. Das ist richtig für VBA. Bewerten Sie immer beide Seiten.
Das Folgende ist eine Beispielimplementierung der isEmpty-Methode in VBA ohne den Kurzschlussoperator. Sie müssen jedoch die Verschachtelung vertiefen, um Ausnahmen zu vermeiden.
Wenn Sie in einer solchen Sprache nicht wie im folgenden Beispiel mit vorzeitiger Rückkehr zurückkehren und darauf achten, die Methode nicht zu verlassen, wird die Verschachtelung tiefer und die Lesbarkeit nimmt ab ...
Übrigens gibt es in VBA keine Null im String-String-Typ (Len (vbNullString)
result ist 0
, vbNullString =" "
result is True
, Null
und Empty
sind nur für den Variantentyp. ), Sammlungsart.
Function IsEmpty(ByVal list As Collection) As Boolean
IsEmpty = True
If list Is Nothing Then
' null(Zustand)Im Falle von
Exit Function
End If
If list.Count = 0 Then
'Wenn die Anzahl der Elemente 0 ist
Exit Function
End If
IsEmpty = False
End Function
Recommended Posts