From: RichardOnRails Date: 2009-07-29T07:00:34+09:00 Subject: Re: What is the power function On Jul 28, 5:52 pm, RichardOnRails wrote: > On Jul 28, 3:34 pm, "Michael W. Ryder" <_mwry...@worldnet.att.net> > wrote: > > > > > RichardOnRails wrote: > > > On Jul 27, 12:36 pm, Prateek Agarwal wrote: > > >> I am new to Ruby and am still learning some of the basic stuff. > > >> What's the method name for the Power operation(as in 'a' to the power > > >> 'b')? > > >> -- > > >> Posted viahttp://www.ruby-forum.com/. > > > > Whoops.  I forgot to paste in the program (sorry),  which follows: > > > > =begin        # Note this comments out all lines until the =end > > > def power(a,b) > > > result=a**b   # "a" should be "a.chomp.to_1"; ditto "b"; > > >               # the "chomp" removes the newline which the user presses > > >               # "result" is unnecessary > > > result.to_i   # does nothing > > > return result # unnecessary: > > >               # Since we've eliminated everything else, the method > > >               # has only one statement, i.e. the expression > > >               # a ** b with the replacements suggested above > > >               # Ruby returns the last statement's value > > > end > > > > puts "a="     # use printf rather than puts (which appends a newline) > > > a=gets > > > a.to_i        # does nothing; "a" does not get change, and the > > > result > > >               # is discarded > > > puts "b="     # same as "a" > > > b=gets > > > b.to_i           # ditto as for "a" > > > c=power(a,b)  # numeric result assigned to c, probably an integer but > > >               # not necessarily > > > puts "c=#{c}" # These final two lines might be more elegantly > > >               # written in Ruby as suggested below > > > =end > > > > # The result of all these changes are the following 8 lines > > > # (plus blank lines); save them, say, as:       Test.rb > > > # and run them as:                              ruby Test.rb > > > > def power(a,b) > > >   a.chomp.to_i**b.chomp.to_i > > > end > > > > printf "a=" > > > a = gets > > > print "b=" > > > b = gets > > > puts "%d**%d = %d" % [a, b, power(a,b)] > > > As an "improvement" to your code I would take the chomp and to_i out of > > the power function to make it more generic and add them after the gets. > > Hi Michael, > > Your point is well taken. > > I did that for a newbie to point the stuff that's needs to be done to > get things working as he intends.  He's not likely to look up "to_i" > to learn all its machinations. > > In fact, there's one more that I would have thrown in, had I > remembered it: strip. > > I do that in string-handlers I write: > 1. in part, to remind myself what to_i would do for me automatically > 2. in part, to guarantee that that stuff gets done even if new > versions of Ruby eliminate some helpful feature. > 3. in part, because I might decide to extend a program using the input > string as though it contained only the digits that to_i revealed, > forgetting that a lot of "baggage" had been removed. > > Perhaps having taught Computer Technology at AU in DC for a decade > gives me a different perspective than production program with a lean- > and-mean code perspective. > > Do I make any sense? > > Best wishes, > Richard Hey Michael, After posting my reply to you, I re-read you post and realized I misinterpreted it. I favor putting all that baggage in the OP's "power" routine rather than having to remember that stuff when writing each invocation of "power". Does that make any sense? Best wishes, Richard