I think the first one, 5.sqrt, looks much better than Math.sqrt(5).
Indeed, but only on the first glance.
Math.sqrt *is the sine function; which in turn has its own set of
properties/behavior among the gazillion of other functions found in
mathematics. You pass only 5 here as the parameter. So it is not really
object for objects sake. We have to bear in mind what object we want to
center our minds on. Here, in this case, the object may be the sine
behavior, and the behavior varies by changing the parameter provided.
And hey, is 5 in degrees or in radians? Maybe that should be
5.radians.sine or sine(5.radians) --just joking
kind regards -botp
ps: i do also use 5.sin though. sometimes, i feel it is not good to
stick to traditions especially when i’m teaching my kids ruby. in
programming, i do not want them to think that *it’s the *only way (we
write things)… Welcome to the brave new world of ruby.
All three take two arguments. While 3.hypot(4) might make
sense–given one leg of a right triangle, how long is the hypotenuse to
a given other leg–30.atan2( 40 ) makes little sense to me.
A few exceptions might not make a good arguments against 19 possibly
plausible cases. In my opinion, however, once you have to break the
rule it makes sense to look for a new way to handle all the cases
similarly.
And, personally, I agree with Matz - the trigonometric functions simply
look more correct (to me) as functions that take an argument, not
methods invoked upon a number. That’s purely a matter of taste, though.
All three take two arguments. While 3.hypot(4) might make
sense–given one leg of a right triangle, how long is the hypotenuse to
a given other leg–30.atan2( 40 ) makes little sense to me.
hypot and atan are vector methods, so [30, 40].atan2, [3,4].hypot
would be correct in the OO-sense, much like #max and #min are in Array
and not Math (compare to e.g. JavaScript where there is Math.max and
Math.min)
Why does everything have to be Math.(num)? Isn’t num.func more
object oriented-ish?
Having the math functions in a module means there could be an alternate
module with a different implementation.
Why another implementation of Math::sin?
Well, I notice that some folks on this thread have used the example of
sin(90), probably expecting the argument units to be degrees rather than
radians. There could be an alternate library using degrees:
MathDeg::sin(90) # ==> 1.0
Another example might be a version of Math that used something other
than libm, perhaps something with different precision, or optimized
differently.
The point is that the various math functions (or a particular
implementation of them) belong together more than they belong to
numbers.
In message “Re: Why is there a seperate Math class?”
on Tue, 9 Jan 2007 11:21:21 +0900, Daniel F. [email protected] writes:
|I have to think this is the first time I’ve ever really disagreed with
|matz and don’t really understand his logic.
Probably it’s highly influenced by the languages we speak.
Unfortunately, English is not the only language on Earth.
|If I were to ask someone for the length of the word apples, I would say
|“What is the length of apples?” In ruby, this would be “apples”.length.
I would say “apples no nagasa wa?” in Japanese (nagasa = length).
|If I were to ask someone for the sine of, say, 90, I would say “What is
|the sine of 90?” In ruby, this would be Math.sin(90) even though the
|structure of the sentence is the same as for “apples” above.
I would say “sin(90) wa?”. See? It’s different.
Besides that, and far more importantly, Ruby honors UNIX math library
(libm). All functions in Math module are found in libm.
I tend to agree. Length can be interpreted as part of, or an attribute
of the object (string) apples. Sin is an action in a class of
mathematical
operations which can operate on instances from a class of numbers.
See the similarity? However, Ruby, a programming language, doesn’t
need to emulate English.
The way it’s done now (sin(90), cos(90), etc.) makes sense because
it’s similar to the actual mathemathical notation I learned back in
grade school. I find it easier to parse than 90.sin, especially when
the argument is actually an expression rather than a constant number.
You gotta love it! A language which really does allow you to easily
modify it
to what you want it to look like and fit with houw yo want to think
about the
problem. Now nobody is right or wrong - its just a question of taste
and
individual thinking style.