Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Dlaczego kod Ruby zwraca nil po wykonaniu puts?

Okładka posta: Dlaczego kod Ruby zwraca nil po wykonaniu puts?
Ta treść została automatycznie przetłumaczona z ukraińskiego.
W Ruby metoda puts zawsze zwraca nil po wyświetleniu łańcucha na ekranie. Jest to standardowe zachowanie dla puts, ponieważ jej głównym celem jest wyświetlenie tekstu, a nie zwrócenie jakiejś wartości. Innymi słowy, puts jest metodą przeznaczoną do wyjścia, a jej efekt uboczny (wyświetlenie tekstu) jest ważniejszy niż zwracana wartość.
result = puts "Cześć, świecie!"
Cześć, świecie!
=> nil
Kiedy wykonujesz kod "puts 'Cześć, świecie!'", irb wyświetli "Cześć, świecie!" na ekranie i zwróci nil. W ten sposób zmienna result będzie miała wartość nil.
result
=> nil
Dlaczego tak się dzieje?
Metoda puts jest przeznaczona do wyjścia danych do standardowego strumienia wyjścia (zwykle jest to konsola). Zwracanie wartości nie jest jej główną funkcją. Dlatego dla wygody i spójności puts zawsze zwraca nil. To po prostu trzeba zapamiętać.
Wiele metod w Ruby, które mają efekty uboczne (na przykład, wyjście na ekran lub modyfikacja obiektu), zwraca nil lub sam obiekt, na którym są wywoływane. To sprawia, że ich zachowanie jest przewidywalne i pozwala łatwo zrozumieć, że główna akcja metody miała miejsce jako efekt uboczny, a nie przez zwróconą wartość.
Przykład z metodą:
def say_hello
  puts "Cześć!"
end

result = say_hello

result
=> nil
To samo zasada dotyczy wyrażeń warunkowych. W Ruby każde wyrażenie zwraca wartość. Kiedy wykonujesz kod zawierający operatory warunkowe lub metody, Ruby zawsze zwraca wynik ostatniego wykonanego wyrażenia. W następnym przykładzie otrzymujesz => nil, ponieważ ostatnim wyrażeniem w kodzie jest operator warunkowy if, który zwraca wartość ostatniego wykonanego bloku.
value = false
if value
  puts "Ten kod nie zostanie wykonany"
else
  puts "Zmienna value jest false"
end

Wynik:
Zmienna value jest false
=> nil
Przeanalizujmy to dokładniej.
value = false
if value
  puts "Ten kod nie zostanie wykonany"
else
  puts "Zmienna value jest false"
end
W tym kodzie zmienna value ma wartość false. Operator if sprawdza wartość value. Ponieważ value jest false, Ruby wykonuje blok kodu wewnątrz else.
puts "Zmienna value jest false"
Metoda puts wyświetla łańcuch "Zmienna value jest false" i zwraca nil, ponieważ puts zawsze zwraca nil po wyświetleniu łańcucha na ekranie. W ten sposób wynik wykonania bloku else jest nil.
W rezultacie, kiedy operator warunkowy if kończy wykonanie, zwraca wartość ostatniego wykonanego wyrażenia, którym jest wynik puts, czyli nil.
Dlatego widzisz:
Zmienna value jest false
=> nil
Mam nadzieję, że z tym pytaniem się uporaliśmy ^_^

Ten post nie ma jeszcze żadnych dodatków od autora.

Co oznacza "Nattywny"?
22 maj 07:01

Co oznacza "Nattywny"?

meme code
meme code@memecode
Jak działa 'rails console --sandbox'?
23 maj 19:39

Jak działa 'rails console --sandbox'?

meme code
meme code@memecode
Do czego potrzebna jest baza danych CVE (Wspólne Luki i Ekspozycje)?
29 maj 08:05

Do czego potrzebna jest baza danych CVE (Wspólne Luki i Ekspozycje)?

meme code
meme code@memecode
29 maj 09:09

Jakie systemy operacyjne wspierają Ruby?

meme code
meme code@memecode
Czy Ruby tworzy nową kopię obiektu podczas przypisywania zmiennej do zmiennej?
29 maj 09:30

Czy Ruby tworzy nową kopię obiektu podczas przypisywania zmiennej do zmiennej?

meme code
meme code@memecode
Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?
29 maj 12:00

Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?

meme code
meme code@memecode
Jaka jest różnica między nil a false w Ruby?
29 maj 20:59

Jaka jest różnica między nil a false w Ruby?

meme code
meme code@memecode
Dlaczego pusty ciąg (string) w Ruby nie jest fałszem?
31 maj 14:39

Dlaczego pusty ciąg (string) w Ruby nie jest fałszem?

meme code
meme code@memecode
Zakres widoczności zmiennej lokalnej w Ruby
3 cze 16:46

Zakres widoczności zmiennej lokalnej w Ruby

meme code
meme code@memecode
Czym różni się int od bigint w Ruby? Minimalne i maksymalne wartości.
13 cze 06:37

Czym różni się int od bigint w Ruby? Minimalne i maksymalne wartości.

meme code
meme code@memecode
Co oznacza błąd 'is out of range' w Ruby on Rails? Błąd zakresu - Liczba całkowita z limitem 4 bajtów
13 cze 07:18

Co oznacza błąd 'is out of range' w Ruby on Rails? Błąd zakresu - Liczba całkowita z limitem 4 bajtów

meme code
meme code@memecode
Czym jest niemutowalność i mutowalność?
19 cze 07:48

Czym jest niemutowalność i mutowalność?

meme code
meme code@memecode