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
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
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
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.