Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Pusty ciąg w Ruby nie jest false. Programiści lubią porównywać ten szczegół z Perlem, ponieważ w Perlu pusty ciąg jest false.
Trzeba zapamiętać, że w Ruby wartości false to tylko nil i false.
W Ruby wyrażenia warunkowe są obliczane na podstawie logicznej prawdziwości (truthiness) lub fałszywości (falsiness) wartości. Spośród wszystkich możliwych wartości w Ruby tylko dwie są fałszywe: nil i false. Wszystkie inne wartości, w tym pusty ciąg (""), są uważane za prawdziwe (true).
Oznacza to, że przy użyciu pustego ciągu w wyrażeniu warunkowym zawsze będzie on traktowany jako true. Aby sprawdzić, czy ciąg jest pusty, można użyć kilku podejść:
Metoda empty?
str = "" puts "Pusty ciąg" if str.empty? Pusty ciąg => nil
Widzimy, że str.empty? zwróciło true i wydrukowało odpowiedź. Następnie widzimy nil, ale dlaczego - przeczytaj więcej w tym wpisie.
Ruby ma wbudowane metody, które pozwalają pokazać, czy ciąg jest pusty. I to właśnie te metody należy używać w wyrażeniach warunkowych, aby kod był maksymalnie zrozumiały.
Porównanie z pustym ciągiem
str = ""puts "Pusty ciąg" if str == ""Pusty ciąg=> nil
Ruby to fajny język i pozwala robić te same rzeczy na różne sposoby. Więc jeśli chcesz, możesz używać porównania z pustym ciągiem w wyrażeniach warunkowych.
Sprawdzamy długość ciągu (string)
str = "" puts "Pusty ciąg" if str.size == 0 # lub puts "Pusty ciąg" if str.length == 0
Jak już pisałem - ruby pozwala robić te same rzeczy na różne sposoby (zwróć uwagę na metody size i length).
Dlaczego pusty ciąg zwraca true?
Może to wydawać się nielogiczne, ponieważ '' to coś, co bardziej przypomina nic / pustkę. Ale przyjrzyjmy się temu trochę bliżej.
W Ruby łatwiej jest traktować wszystkie obiekty, z wyjątkiem nil i false, jako prawdziwe. To zmniejsza liczbę specyficznych przypadków, które programista musi zapamiętać. Ruby opiera się na zasadzie, że wszystko jest obiektem. Oznacza to, że każda wartość, w tym pusty ciąg, musi być obiektem i mieć określone zachowanie. Ponieważ pusty ciąg jest obiektem klasy String, jest traktowany jako prawdziwy. Uznając pusty ciąg za prawdziwy, Ruby upraszcza wyrażenia warunkowe i sprawia, że kod jest bardziej przewidywalny. Na przykład, w wyrażeniach warunkowych można zawsze polegać na tym, że tylko nil i false będą traktowane jako fałszywe.
str = "" if str puts "Ciąg nie jest nil ani false" else puts "Ciąg jest nil lub false" end
Przy okazji, udowodnijmy, że obiekt klasy String (a konkretnie pusty ciąg) nie jest immediate value. Pusty ciąg (jak każdy obiekt klasy String) nie jest immediate value, a reprezentuje się jako obiekt w pamięci. W Ruby tylko nil i false są false w wyrażeniach warunkowych. Wszystkie inne wartości, w tym pusty ciąg, są uważane za prawdziwe (truthy).
str1 = "" str2 = "" puts str1.object_id == str2.object_id => false # To znaczy, że każdy ciąg ma swój object_id str1.object_id => 46820 str2.object_id => 46800
To znaczy, że mamy dwa różne obiekty String z pustą zawartością. I obiekt zwraca true w wyrażeniach warunkowych.
Ten post nie ma jeszcze żadnych dodatków od autora.