Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Warum ist eine leere Zeichenkette (string) in Ruby nicht false?

Beitrags-Cover: Warum ist eine leere Zeichenkette (string) in Ruby nicht false?
InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
Ein leerer String in Ruby ist nicht false. Programmierer vergleichen diesen Aspekt gerne mit Perl, da ein leerer String in Perl false ist.
Man muss sich merken, dass in Ruby die falschen Werte nur nil und false sind.
In Ruby werden bedingte Ausdrücke basierend auf der logischen Wahrhaftigkeit (truthiness) oder Falschheit (falsiness) von Werten ausgewertet. Von allen möglichen Werten in Ruby sind nur zwei falsch: nil und false. Alle anderen Werte, einschließlich des leeren Strings (""), gelten als wahr (true).
Das bedeutet, dass bei der Verwendung eines leeren Strings in einem bedingten Ausdruck dieser immer als true interpretiert wird. Um zu überprüfen, ob ein String leer ist, kann man mehrere Ansätze verwenden:

Methode empty?

str = ""
puts "Leerer String" if str.empty?

Leerer String
=> nil
Wir sehen, dass str.empty? true zurückgegeben hat und die Antwort ausgedruckt wurde. Danach sehen wir nil, aber warum - lesen Sie mehr darüber in diesem Beitrag.
Ruby hat eingebaute Methoden, die zeigen, ob ein String leer ist. Und genau diese Methoden sollten in bedingten Ausdrücken verwendet werden, um den Code maximal verständlich zu machen.

Vergleich mit leerem String

str = ""
puts "Leerer String" if str == ""
Leerer String
=> nil
Ruby ist eine coole Sprache und erlaubt es, die gleichen Dinge auf verschiedene Arten zu tun. Daher kann man, wenn man möchte, den Vergleich mit einem leeren String in bedingten Ausdrücken verwenden.
Überprüfen der Länge des Strings
str = ""
puts "Leerer String" if str.size == 0
# oder 
puts "Leerer String" if str.length == 0
Wie ich bereits schrieb - Ruby erlaubt es, die gleichen Dinge auf verschiedene Arten zu tun (beachten Sie die Methoden size und length).

Warum gibt ein leerer String true zurück?

Vielleicht erscheint es unlogisch, denn '' ist etwas, das eher wie nichts / Leere aussieht. Aber lassen Sie uns das ein wenig aufschlüsseln.
In Ruby ist es einfacher, alle Objekte außer nil und false als wahr zu betrachten. Das reduziert die Anzahl der speziellen Fälle, die sich ein Programmierer merken muss. Ruby basiert auf dem Prinzip, dass alles ein Objekt ist. Das bedeutet, dass jeder Wert, einschließlich des leeren Strings, ein Objekt sein und ein bestimmtes Verhalten haben muss. Da der leere String ein Objekt der Klasse String ist, wird er als wahr betrachtet. Indem Ruby den leeren String als wahr betrachtet, vereinfacht es bedingte Ausdrücke und macht den Code vorhersehbarer. Zum Beispiel kann man in bedingten Ausdrücken immer darauf zählen, dass nur nil und false als falsch betrachtet werden.
str = ""
if str
  puts "String ist nicht nil oder false"
else
  puts "String ist nil oder false"
end
Übrigens, lassen Sie uns beweisen, dass ein Objekt der Klasse String (nämlich der leere String) kein immediate value ist. Ein leerer String (wie jedes Objekt der Klasse String) ist kein immediate value, sondern wird als Objekt im Speicher dargestellt. In Ruby sind nur nil und false in bedingten Ausdrücken false. Alle anderen Werte, einschließlich des leeren Strings, gelten als wahr (truthy).
str1 = ""
str2 = ""
puts str1.object_id == str2.object_id

=> false # Das bedeutet, dass jeder String seine eigene object_id hat 

str1.object_id
=> 46820

str2.object_id
=> 46800
Das bedeutet, dass wir zwei verschiedene String-Objekte mit leerem Inhalt haben. Und das Objekt gibt in bedingten Ausdrücken true zurück.

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

Wofür wird die CVE-Datenbank (Common Vulnerabilities and Exposures) benötigt?
29. Mai, 08:05 Uhr

Wofür wird die CVE-Datenbank (Common Vulnerabilities and Exposures) benötigt?

meme code
meme code@memecode
29. Mai, 09:09 Uhr

Welche Betriebssysteme unterstützen Ruby?

meme code
meme code@memecode
Erstellt Ruby eine neue Kopie des Objekts, wenn eine Variable einer anderen Variable zugewiesen wird?
29. Mai, 09:30 Uhr

Erstellt Ruby eine neue Kopie des Objekts, wenn eine Variable einer anderen Variable zugewiesen wird?

meme code
meme code@memecode
Was ist der Unterschied zwischen immediate value und reference in Ruby?
29. Mai, 12:00 Uhr

Was ist der Unterschied zwischen immediate value und reference in Ruby?

meme code
meme code@memecode
Warum gibt der Ruby-Code nil zurück, nachdem puts ausgeführt wurde?
29. Mai, 20:30 Uhr

Warum gibt der Ruby-Code nil zurück, nachdem puts ausgeführt wurde?

meme code
meme code@memecode
Was ist der Unterschied zwischen nil und false in Ruby?
29. Mai, 20:59 Uhr

Was ist der Unterschied zwischen nil und false in Ruby?

meme code
meme code@memecode
Sichtbarkeit des lokalen Variablenbereichs in Ruby
03. Jun, 16:46 Uhr

Sichtbarkeit des lokalen Variablenbereichs in Ruby

meme code
meme code@memecode
Was ist der Unterschied zwischen int und bigint in Ruby? Minimale und maximale Werte.
13. Jun, 06:37 Uhr

Was ist der Unterschied zwischen int und bigint in Ruby? Minimale und maximale Werte.

meme code
meme code@memecode
Was bedeutet der Fehler 'is out of range' in Ruby on Rails? Bereichsfehler - Ganzzahl mit einer Begrenzung von 4 Bytes
13. Jun, 07:18 Uhr

Was bedeutet der Fehler 'is out of range' in Ruby on Rails? Bereichsfehler - Ganzzahl mit einer Begrenzung von 4 Bytes

meme code
meme code@memecode
Was sind Immutabilität und Mutabilität?
19. Jun, 07:48 Uhr

Was sind Immutabilität und Mutabilität?

meme code
meme code@memecode
[Ruby] Was ergibt die Addition von 10,5 und 10?
23. Jun, 13:23 Uhr

[Ruby] Was ergibt die Addition von 10,5 und 10?

meme code
meme code@memecode
[Ruby] Was unterscheidet Variablen, die mit @, @@ und $ beginnen?
23. Jun, 14:00 Uhr

[Ruby] Was unterscheidet Variablen, die mit @, @@ und $ beginnen?

meme code
meme code@memecode