From: Michael Sung Date: 2012-06-13T04:04:26+09:00 Subject: Question on If @Instance Statements I have another Chris Pine "Learning Programming" Question. I'm almost finished with the book but became confused on his use of "If" statements. QUESTION: In the below code snippet, why does he use "if @asleep" instead of just writing "passageOfTime", "puts", and then, "if @asleep = false"? This is the same question I have for other parts of the program that use "if @asleep" so I guess clarifying this will help me understand how it is being used. Thanks! def putToBed puts 'You put ' + @name + ' to bed.' @asleep = true 3.times do if @asleep passageOfTime end if @asleep puts @name + ' snores, filling the room with smoke.' end end if @asleep @asleep = false puts @name + ' wakes up slowly.' end end FULL PROGRAM FOLLOWS BELOW: class Dragon def initialize name @name = name @asleep = false @stuffInBelly = 10 # He's full. @stuffInIntestine = 0 # He doesn't need to go. puts @name + ' is born.' end def feed puts 'You feed ' + @name + '.' @stuffInBelly = 10 passageOfTime end def walk puts 'You walk ' + @name + '.' @stuffInIntestine = 0 passageOfTime end def putToBed puts 'You put ' + @name + ' to bed.' @asleep = true 3.times do if @asleep passageOfTime end if @asleep puts @name + ' snores, filling the room with smoke.' end end if @asleep @asleep = false puts @name + ' wakes up slowly.' end end def toss puts 'You toss ' + @name + ' up into the air.' puts 'He giggles, which singes your eyebrows.' passageOfTime end def rock puts 'You rock ' + @name + ' gently.' @asleep = true puts 'He briefly dozes off...' passageOfTime if @asleep @asleep = false puts '...but wakes when you stop.' end end private # "private" means that the methods defined here are # methods internal to the object. (You can feed # your dragon, but you can't ask him if he's hungry.) def hungry? # Method names can end with "?". # Usually, we only do this if the method # returns true or false, like this: @stuffInBelly <= 2 end def poopy? @stuffInIntestine >= 8 end def passageOfTime if @stuffInBelly > 0 # Move food from belly to intestine. @stuffInBelly = @stuffInBelly - 1 @stuffInIntestine = @stuffInIntestine + 1 else # Our dragon is starving! if @asleep @asleep = false puts 'He wakes up suddenly!' end puts @name + ' is starving! In desperation, he ate YOU!' exit # This quits the program. end if @stuffInIntestine >= 10 @stuffInIntestine = 0 puts 'Whoops! ' + @name + ' had an accident...' end if hungry? if @asleep @asleep = false puts 'He wakes up suddenly!' end puts @name + '\'s stomach grumbles...' end if poopy? if @asleep @asleep = false puts 'He wakes up suddenly!' end puts @name + ' does the potty dance...' end end end -- Posted via http://www.ruby-forum.com/.