Zadanie rozwiązane, ale czy można to zrobić ładniej?

Witam,

Więc dzięki Tomash-owi położyłem rękę na książce Learn to Program by Chirs Pine.

Jest tam jedno zadanie, które wygląda mniej więcej tak:

Jest sobie babcia i wnuczek.
Trzeba napisać program, w którym wnuczek zadaje pytanie babci.
Jeśli pytanie jest zadane bez CAPS LOCKA to babcie ma odpowiadać: “HUH SONNY? SPEAK UP!!!” - czyli babcia jest po prostu głucha, i trzeba do niej krzyczeć.

Jeśli zaś wykrzyczysz pytanie to babci wydaje się, że je usłyszała poprawnie i ma odpowiedzieć: “NO, NOT SINCE /pewna data/”
Pewna data z kolei ma być wyborem losowym w przedziale 1930-1950.

Generalnie trochę mi to zajęło, ale zrobiłem to sam na podstawie tego, co się nauczyłem z tej książki :slight_smile:

Proszę, o rzucenie okiem na ten kod. Powiedzcie mi, czy narobiłem bałaganu w kodzie i da się to zrobić ładniej, lepiej, czyściej?
Po prostu nie chcę nabrać złych nawyków.
Z góry dziękuję !!!

[code]input1 = 'Gramma asnwered: ’
task1 = ‘Ask gramma a question’
year = 1930 + rand(21)
grY = input1 + ‘HUH SONNY? SPEAK UP !!!’
grA = input1 + 'NO, NOT SINCE ’ + year.to_s + ‘!!!’

puts task1

question = gets.chomp

repQ = ‘Your question is: ’ + question + ’ gramma’ + ‘?’

while question != question.upcase
puts repQ
puts grY
puts task1	

question = gets.chomp
repQ = ‘Your question is: ’ + question + ’ gramma’ + ‘?’

end
puts repQ
puts grA[/code]

Może być chodź nazwy zmiennych powinnieneś nazywać stosując konwecje z rubiego czyli nazwa_zmiennej a nie nazwaZmiennej.
Lepiej też starać się unikać skrótów bo ciężko się je czyta :slight_smile:

Konstrukcje typu:
‘Your question is: ’ + question + ’ gramma’ + ‘?’

możesz zapisać również jako:
“Your question is: #{question} gramma?”

Moja wersja:

[code]class Grandma

def ask(question)
print "#{question}: "
gets.strip
end

def upcase?(text)
text.eql?(text.upcase)
end

def start_asking
while not upcase?(ask “Zadaj pytanie babci”)
puts “MÓW PROSZĘ GŁOŚNIEJ!!!”
end
puts “NIE, OD ROKU #{1930 + rand(21)}”
end

end

Grandma.new.start_asking[/code]

Mała uwaga – w 1.9 po ustawieniu kodowania pewnie jest ok, ale w 1.8 oczywiście:

>> "ZAŻÓŁĆ GĘŚLĄ JAŹŃ" == "zażółć gęślą jaźń".upcase => false

@rav: String#upcase w 1.9 pomija znaki nie-ASCII niezależnie od ustawionego kodowania. Co z tym zrobić? Mogą pomóc gemy: unicode, unicode_utils lub activesupport.

http://github.com/apohllo/string_pl - PL upcase dla UTF-8, ISO-8859-2 oraz CP1250 z pomocą Hosiawaka.

[quote=Grzegorz Derebecki]Może być chodź nazwy zmiennych powinnieneś nazywać stosując konwecje z rubiego czyli nazwa_zmiennej a nie nazwaZmiennej.
Lepiej też starać się unikać skrótów bo ciężko się je czyta :slight_smile:

Konstrukcje typu:
‘Your question is: ’ + question + ’ gramma’ + ‘?’

możesz zapisać również jako:
“Your question is: #{question} gramma?”

Moja wersja:

[code]class Grandma

def ask(question)
print "#{question}: "
gets.strip
end

def upcase?(text)
text.eql?(text.upcase)
end

def start_asking
while not upcase?(ask “Zadaj pytanie babci”)
puts “MÓW PROSZĘ GŁOŚNIEJ!!!”
end
puts “NIE, OD ROKU #{1930 + rand(21)}”
end

end

Grandma.new.start_asking[/code]
[/quote]
Hah, dzięki. Klasy i wiele opcji jeszcze przede mną, ale już widzę, że można to zrobić ładniej.
Dzięki za poświęcony czas i wkład.