Pytanie odnośnie metody gets (PROSTE PYTANIE)

Witam,

Kupiłem książkę Ruby on Rails. Od podstaw dr. Stevena Holznera. Fajnie wszystko wyjaśnia i szybko łapię o co chodzi (może ze względu na styczność kilkuletnią z innymi językami - dokładniej -> z próbami ich nauki).

W podrozdziale Odczytywanie tekstu z wiersza poleceń, pisze o metodzie gets i o zmiennej predefiniowanej $_ oraz o chomp w związku ze znakiem nowego wiersza.

Pisze tam o tym, że posługując się metodą gets niekoniecznie należy pracować z $. Można np. zrobić coś takiego (w związku z tym, że po przypisaniu $ do zmiennej problem znaku nowego wiersza pozostaje a to poniżej to próba rozwiązania tego problemu):

1: print "Podaj bieżącą temperaturę: "
2: temperatura = gets
3: $_ = temperatura
4: chomp
5: temperatura = $_
6: puts “Temperatura wynosi #{$_} stopni Celcjusza.”

Moja wątpliwość i pytanie w związku z tym dotyczy linii 5 i 6. Ten przykład koliduje mi z moją logiką.
Po co przypisywał w linii 5 wartość, którą zawiera $_ do zmiennej temperatura skoro w linii 6 interpolując zmienną w łańcuchu znaków ujętej w cudzysłów podaje $_ zamiast zmiennej temperatura?

Czy nie powinno być tak?:

1: print "Podaj bieżącą temperaturę: "
2: temperatura = gets
3: $_ = temperatura
4: chomp
5: temperatura = $_
6: puts “Temperatura wynosi #{temperatura} stopni Celcjusza.”

W poprawionym kodzie w 6 linii teraz ma sens usunięcie metodą chomp znaku nowego wiersza po czym przypisanie do zmiennej temperatura ponownie, żeby w końcu interpolować ją w łańcuchu znaków w linii 6.

To jakiś błąd był czy ja źle rozumuje?

Skoro pierwotnie w linii 6 było: puts “Temperatura wynosi #{$_} stopni Celcjusza.” to po kiego robić ten galimatias zamiast zrobić tak:

1: print "Podaj bieżącą temperaturę: "
2: gets
3: chomp
4: 6: puts “Temperatura wynosi #{$_} stopni Celcjusza.”

Pozdrawiam

Pisz kod jaki Tobie odpowiada (jezeli robi to samo). To tylko przyklad. “$_” i podobnych nigdy sie nie mialem okazji uzyc. OO rulez!

Pawle mi chodziło tylko o sens tego i czy tam nie jest błąd. Proszę jednak odnieść się do tego problemu, które przedstawiłem.

Pozdr.

Nie wiem kto to jest ten Holzner, ale bardziej idiotycznego kodu ostatnio nie widziałem. Po pierwsze korzystanie ze zmiennej $_ jest niemodne, brzydkie, niewskazane i tylko ktoś kto chce pokazać, że można pisać brzydko jej używa. Po drugie ten przykład w ogóle nie ma sensu (no chyba, że jest wyrwany z kontekstu i go przez to nie widać). Jedyna logiczna, poprawna i czytelna wersja, moim zdaniem wygląda tak:

temperatura = gets.chomp puts "Temperatura to #{temperatura}"
Nawet jeśli gość chciał pokazać że jest coś takiego jak $_ i jak wygląda użycie jej w praktyce to właśnie zmarnował swój, Twój i mój czas.
Jako ciekawostkę przegrepowałem ponad 100 gemów i żaden z nich nie używa tej magicznej zmiennej.

Książka do Ruby On Rails opisująca czytanie z konsoli? o_O

[quote=radarek]Nie wiem kto to jest ten Holzner, ale bardziej idiotycznego kodu ostatnio nie widziałem. Po pierwsze korzystanie ze zmiennej $_ jest niemodne, brzydkie, niewskazane i tylko ktoś kto chce pokazać, że można pisać brzydko jej używa. Po drugie ten przykład w ogóle nie ma sensu (no chyba, że jest wyrwany z kontekstu i go przez to nie widać). Jedyna logiczna, poprawna i czytelna wersja, moim zdaniem wygląda tak:

temperatura = gets.chomp puts "Temperatura to #{temperatura}"
Nawet jeśli gość chciał pokazać że jest coś takiego jak $_ i jak wygląda użycie jej w praktyce to właśnie zmarnował swój, Twój i mój czas.
Jako ciekawostkę przegrepowałem ponad 100 gemów i żaden z nich nie używa tej magicznej zmiennej.[/quote]
Dzięki za cenny komentarz. Jak dla mnie.

Bardzo zastanawiające i trochę przygnębiające, że kupiłem książkę za kilkadziesiąt zł (http://helion.pl/ksiazki/rubyop.htm) i dowiaduję się o takich rzeczach. OK…nawet gdy Holzner chciał wyjaśnić wszystko od absolutnych podstaw…to dał zły przykład. Nie wiem co o nim teraz myśleć, a to z tego powodu, że nie podał kodu takiego jak TY omawiając te pobieranie danych od użytkownika…:

temperatura = gets.chomp puts "Temperatura to #{temperatura}"
Właśnie! gets.chomp - tego w jego książce nie ma. A już wiem o co chodzi. No jak nie mógł tego podać? Dość uznany autor: http://helion.pl/search.cgi?qa=&wsprzed=1&wprzyg=1&szukaj=Holzner albo mi się wydaje. Dość ciekawe pozycje wydał. Z jednej z nich korzystałem o czytnikach RSS i dlatego wybrałem jego książkę w sumie innego lepszego wyboru nie znalazłem.

Może mógłbyś polecić więc książkę wg. Twoich kryteriów “normalną”? Godną…? gdzie gets.chomp uświadczę? Może ta…Agile?

Pozdrawiam

Jeśli chodzi Ci o przewodnik po Rubym, to zawsze możesz zajrzeć do mojego tutoriala. Co prawda nie piszę o gets (bo nie jest to podręcznik, tylko przewodnik), ale staram się prezentować najmocniejsze strony Rubiego - w szczególności koncentruję się na programowaniu zorientowanym obiektowo.

Above, nie kupuj książek jakichś “autorów krzaków” po prostu, tylko zapytaj tu na forum od czego najlepiej zacząć :slight_smile:

Ja zacząłem od książki z kilofem (“Programowanie w Ruby, 2. edycja”), która jest bardzo dobra, oraz “Agile Web Development with Rails” (pierwsza edycja), do której się zraziłem :wink:

$_ to jeden z “perlizmów” w rubym. W perlu bardzo przydatny do skracania kodu, np w perlgolfie :wink:
W “prawdziwym życiu” rzadko kiedy użyteczny poza jednorazowymi jednolinijkowcami.

W sumie słuszna uwaga ale …
Na stronie http://www.rubyonrails.pl/ksiazki mamy ciekawy zestaw książek tylko brakuje w nim informacji jakich wersji softu one dotyczą. Informacja taka znajduje się tylko przy pierwszej pozycji. A jest to informacja bardzo istotna. Chciałem kupić “Agile…” ale wydać 120pln i znowu męczyć się z przykładami, które u mnie nie będą działać …

Spokojnie, największy skok i wysyp niekompatybilności (a konkretnie wydzielenie części ficzerów do pluginów) nastąpił przy pojawieniu się 2.0 (2.1 już nie było tak rewolucyjne, aczkolwiek jest rewelacyjne :slight_smile: ). Tylko czekać, aż wkrótce się pojawią książki pisane według 2.0.

A “Agile” ogólny pomysł, tematykę i flow miał niezłe, tylko do pierwszej edycji “wkradło się” kilka totalnie nierailsowych kretynizmów (brak migracji i ewolucja bazy przez pliki .sql), które potem trzeba odkręcać.

Sporo ludzi chwali książkę Holznera. Dla mnie jest ona na poziomie słabego tutoriala z bloga niewiele ponad początkującego. Filozofii Rails nie nauczy, a przez takie przykłady - zrazi. Tak naprawdę, na dzień dzisiejszy, spośród znanych mi książek, jedynie Agile uczy dobrze filozofii rails. Nie pozostaje nic innego, jak czekać na edycję związaną z najnowszymi rails-ami :slight_smile:

p.s. Taki przykład oczywiście nie ma sensu :slight_smile: Dobrze, że ruby ewoluuje w stronę eliminacji perlizmów.