Conversion issues

Well, having to explicitly convert between strings and integers in most
cases is a concious design decision. I do still forget about it sometimes
but luckily, the exceptions make the error easy to find.

Look at it another way:

In perl, you can do this:

"200" + 1 -> 201 (+ = addition operator, forces numerical context)
"200" . 1 -> 2001 (. = string append operator, forces string context)

but in ruby you only have the + operator, so in principle the result of

"200" + 1

and

200 + "1"

could be either 201 or 2001. And I'd sort of expect both cases to give
the same result. In any case, this stuff can lead to really confusing
results.

Personally, I think the way Perl handles this sort of thing is easier
for straight forward text manipulation, BUT since Perl depends on the
operator to determine the type of conversion the number of operators
is fairly large, and it becomes seriously unwieldy if you introduce
more types than simple strings and numbers. See for example the perl
table of operators for perl 6 (still under development):
http://www.ozonehouse.com/mark/blog/code/PeriodicTable.html

Joost.

···

On Fri, May 12, 2006 at 11:27:29AM +0900, corey konrad wrote:

how about this cin>> = num, lol i dont know ruby seems like a trade off
to me so far. i am just trying to understand all this hype about it. I
mean every book i am reading says its the best most awesome easiest to
use, just like using natural language, its elegant and beautiful and it
will make you cry because its so easy to use, etc etc. I am having a
hard time understanding that. If its true i would like to see it at some
point.

Are you smoking crack? The last thing I need is two copies of the ruby-forum in my mailbox.

···

On May 11, 2006, at 9:10 PM, Mike Harris wrote:

Is there a way we can get the ruby-forum gateway to send each message twice?

--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

you're trying to add a string and an integer. it's like writing:

3 + " dogs"

you should write

3.to_s + " dogs"

···

On May 12, 2006, at 4:05 PM, corey konrad wrote:

It printed out "5" just fine. Is that the problem you were referring to?

actually this one, i have to use + full_name.to_s + to avoid the error i
just found that strange. i mean i am using a string method the to_s
should be implicit shouldnt it? i dont know.

irb(main):030:0> def name_length
irb(main):031:1> p "what is your first name?"
irb(main):032:1> first = gets.chomp
irb(main):033:1> p "what is your last name?"
irb(main):034:1> last = gets.chomp
irb(main):035:1> full_length = first.length + last.length
irb(main):036:1> p "your full name has: " + full_length + "characters"
irb(main):037:1> end
=> nil
irb(main):038:0> name_length
"what is your first name?"
corey
"what is your last name?"
konrad
TypeError: can't convert Fixnum into String
  from (irb):36:in `+'
  from (irb):36:in `name_length'
  from (irb):38
  from :0

--
Posted via http://www.ruby-forum.com/\.

-- Elliot Temple

Try this:

p "Your full name has #{full_length} characters."

The #{} evaluates everything inside it and then turns the result into
a string. It's meant just for this sort of thing.

···

On 5/12/06, corey konrad <0011@hush.com> wrote:

> It printed out "5" just fine. Is that the problem you were referring to?
>

actually this one, i have to use + full_name.to_s + to avoid the error i
just found that strange. i mean i am using a string method the to_s
should be implicit shouldnt it? i dont know.

--
Bira

http://sinfoniaferida.blogspot.com

Ok, puts <anything> works for anything.

str + <anything> does NOT work for anything.

str.length -> gives you a number

a number + number -> gives you a number

str + number -> gives you an error, before puts even get's around to seeing anything

I would suggest almost _always_ using interpolation. It will give you what you expect, pretty much everytime. To rewrite what you have above with string interpolation:
p "your full name has: #{name_length} characters"

···

On May 12, 2006, at 7:05 PM, corey konrad wrote:

It printed out "5" just fine. Is that the problem you were referring to?

actually this one, i have to use + full_name.to_s + to avoid the error i
just found that strange. i mean i am using a string method the to_s
should be implicit shouldnt it? i dont know.

irb(main):030:0> def name_length
irb(main):031:1> p "what is your first name?"
irb(main):032:1> first = gets.chomp
irb(main):033:1> p "what is your last name?"
irb(main):034:1> last = gets.chomp
irb(main):035:1> full_length = first.length + last.length
irb(main):036:1> p "your full name has: " + full_length + "characters"
irb(main):037:1> end
=> nil
irb(main):038:0> name_length
"what is your first name?"
corey
"what is your last name?"
konrad
TypeError: can't convert Fixnum into String
  from (irb):36:in `+'
  from (irb):36:in `name_length'
  from (irb):38
  from :0

--
Posted via http://www.ruby-forum.com/\.

The goal of ruby is to make programming easier and more enjoyable right?
So isnt it important that a language with that as its goal can express
simple programs in a simple and intuitive way? I am a begining
programmer and i find ruby counter intuitive so far and that worries me
and makes me wonder if i am wasting my time with. I want to learn how to
write software. Thats the bigger picture i am in right now. Its not
personal, I am just trying to get my feet wet here and make sense of
all this stuff.

···

Yes, I am too currently looking for a language worthy of my "what is
your favorite number" program. I guess ruby is just 260,000 lines of
hype.

def favorite_number
   print "what is your favorite number? "
   puts "#{gets().to_i + 1} is better"
end

-- Daniel

--
Posted via http://www.ruby-forum.com/\.

I agree completely. Java is much better for the my favorite number program:

% cat favorite_number.java
import java.io.*;

class FavoriteNumber {
   public static void main(String args) throws Exception {
     BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
     String num;
     System.out.print("What's your favorite number? ");
     num = in.readLine( );
     String better_num = (new Integer(Integer.parseInt(num) + 1)).toString();

     System.out.println(better_num + " is better.");
   }
}

See?

And it's so intuitive!

···

On May 11, 2006, at 10:43 PM, Daniel Harple wrote:

On May 12, 2006, at 4:27 AM, corey konrad wrote:

how about this cin>> = num, lol i dont know ruby seems like a trade off
to me so far. i am just trying to understand all this hype about it. I
mean every book i am reading says its the best most awesome easiest to
use, just like using natural language, its elegant and beautiful and it
will make you cry because its so easy to use, etc etc. I am having a
hard time understanding that. If its true i would like to see it at some
point.

Yes, I am too currently looking for a language worthy of my "what is your favorite number" program. I guess ruby is just 260,000 lines of hype.

def favorite_number
  print "what is your favorite number? "
  puts "#{gets().to_i + 1} is better"
end

-- Daniel

oh ok thanks i guess i should read this entire book on the laguage first
before getting snooty and thinking i have everything all figured out,
lol. I tend to do things like that all the time.

Thanks.

Bira wrote:

···

On 5/12/06, corey konrad <0011@hush.com> wrote:

> It printed out "5" just fine. Is that the problem you were referring to?
>

actually this one, i have to use + full_name.to_s + to avoid the error i
just found that strange. i mean i am using a string method the to_s
should be implicit shouldnt it? i dont know.

Try this:

p "Your full name has #{full_length} characters."

The #{} evaluates everything inside it and then turns the result into
a string. It's meant just for this sort of thing.

--
Posted via http://www.ruby-forum.com/\.

i dont know there is always someone who takes something personal in
these chat forums, more so with perl than ruby i just dont understand
the romantic zealotry surrounding computer programming languages i
guess.

···

Yes, I am too currently looking for a language worthy of my "what is
your favorite number" program. I guess ruby is just 260,000 lines of
hype.

def favorite_number
   print "what is your favorite number? "
   puts "#{gets().to_i + 1} is better"
end

-- Daniel

--
Posted via http://www.ruby-forum.com/\.

Matz (Ruby's creator) >
No language can be perfect for everyone. I tried to make Ruby perfect
for me, but maybe it's not perfect for you. The perfect language for
Guido van Rossum is probably Python.
http://www.artima.com/intv/rubyP.html

···

On 5/11/06, corey konrad <0011@hush.com> wrote:

The goal of ruby is to make programming easier and more enjoyable right?

Hi Corey,

Ruby wasn't necessarily written to make programming easier and more
enjoyable. It many ways it depends on who is using it. For those of us
coming from programming in languages like Java (look at the example
from Logan, ouch) it is quite refreshing. I'm not sure what your
history in programming is, but if you are new to programming or have
programmed in something much different than Ruby, I'm sure it can be
confusing at first.

Also keep in mind that programming can get very frustrating at times.
I'm sure just about every programmer reading this can remember a time
when they were pounding their keyboards and about to throw their
monitor out the window because of some stupid problem. But when that
problem is solved, or a complicated algorithm works perfectly, it is a
really great feeling. Plus it is nice to have such power of the
computer to make it do anything you want, instead of being a slave to
it and other people's programs.

The truth is, Ruby may not be right for you. That is fine. There is no
good reason for you to program in something that doesn't fit you
(well, unless you get paid a lot to do it :wink:

But seriously, if you feel that Ruby doesn't work for you, check out
Python (http://www.python.org/\) or maybe Perl (http://www.perl.org/\)
or even Java (Oracle Java Technologies | Oracle). There are a lot of programming
languages out there, and it never hurts to give some of them a try.

But for most of us here, Ruby just fits.

Regards,
Ryan

···

On 5/11/06, corey konrad <0011@hush.com> wrote:

The goal of ruby is to make programming easier and more enjoyable right?
So isnt it important that a language with that as its goal can express
simple programs in a simple and intuitive way? I am a begining
programmer and i find ruby counter intuitive so far and that worries me
and makes me wonder if i am wasting my time with. I want to learn how to
write software. Thats the bigger picture i am in right now. Its not
personal, I am just trying to get my feet wet here and make sense of
all this stuff.

Hi Corey,

The goal of ruby is to make programming easier and more enjoyable right?
So isnt it important that a language with that as its goal can express
simple programs in a simple and intuitive way? I am a begining
programmer and i find ruby counter intuitive so far and that worries me
and makes me wonder if i am wasting my time with. I want to learn how to
write software. Thats the bigger picture i am in right now. Its not
personal, I am just trying to get my feet wet here and make sense of
all this stuff.

Might it be fair to say that it's actually programming that you're
having difficulty with rather than Ruby at this stage? Chris Pine's
tutorial (which I assume you're using) isn't trying to show you how
awesome Ruby is, it's showing you how to program.

There are probably languages that are simpler for a beginner programmer
(probably QBasic if you can get your hands on it), but Chris Pine's
tutorial focusses on basic concepts a few at a time to get you up to
speed. That means leaving out a bunch of what makes Ruby cool. And once
you have mastered the material in Learning to Program, you will already
be far more productive in Ruby than you'd be after similar time on Basic.

Nothing's stopping you from learning more than one language so you can
choose between them and compare them more accurately. Indeed, hardly any
of us ruby-talkers use _only_ Ruby, and I doubt there's anyone who would
recommend it. But you might want to save your judgment at least until
you are a programmer.

Cheers,
Dave

What's probably going here is that you just aren't aware of the general suckiness of most programming languages. I have yet to see one that I think is perfect for me or completely intuitive for anybody; Ruby is my favorite though. Really, try doing this stuff in C, Java, Perl, Python, Lisp, BASIC, PHP, whatever.... Some are easier to pick up on than others, but they are all extremely difficult to start with for a complete beginner to programming in general. Just keep at it (with almost any popular language) and you will get there. For the record, I think that, despite your difficulties, Ruby is probably one of the easiest languages for you and most beginners to start programming with.

- Jake McArthur

···

On May 11, 2006, at 10:16 PM, corey konrad wrote:

isnt it important that a language with that as its goal can express
simple programs in a simple and intuitive way? I am a begining
programmer and i find ruby counter intuitive so far and that worries me
and makes me wonder if i am wasting my time with.

Yes, I am too currently looking for a language worthy of my "what is
your favorite number" program. I guess ruby is just 260,000 lines of
hype.

def favorite_number
   print "what is your favorite number? "
   puts "#{gets().to_i + 1} is better"
end

The goal of ruby is to make programming easier and more enjoyable right?
So isnt it important that a language with that as its goal can express
simple programs in a simple and intuitive way?

Intuitive to matz, yes.

I am a begining programmer and i find ruby counter intuitive so far and that worries me and makes me wonder if i am wasting my time with. I want to learn how to write software. Thats the bigger picture i am in right now. Its not personal, I am just trying to get my feet wet here and make sense of all this stuff.

You should think more about what you want and then go looking for the appropriate documentation. You should also experiment with irb.

Try:

ri Kernel#print
ri Kernel#puts
ri Kernel#gets
ri String#to_i

···

On May 11, 2006, at 8:16 PM, corey konrad wrote:

--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

Yeah that is the kind of example i was looking for thanks for that kick
in the ass. Thats what i need to get me excited about ruby. Java
definatly looks more complicated.

···

I agree completely. Java is much better for the my favorite number
program:

% cat favorite_number.java
import java.io.*;

class FavoriteNumber {
   public static void main(String args) throws Exception {
     BufferedReader in = new BufferedReader(new InputStreamReader
(System.in));
     String num;
     System.out.print("What's your favorite number? ");
     num = in.readLine( );
     String better_num = (new Integer(Integer.parseInt(num) +
1)).toString();

     System.out.println(better_num + " is better.");
   }
}

See?

And it's so intuitive!

--
Posted via http://www.ruby-forum.com/\.

But seriously, if you feel that Ruby doesn't work for you, check out
Python (http://www.python.org/\) or maybe Perl (http://www.perl.org/\)
or even Java (Oracle Java Technologies | Oracle). There are a lot of programming
languages out there, and it never hurts to give some of them a try.

Noooo. If you are a new programmer learn lisp and smalltalk first. If
somehow you decide that neither one of them are to your liking then
learn python.

You can safely skip perl and java :slight_smile:

yeah. somehow learning C or Java or maybe *most* languages can cause "fear of parentheses". learn lisp *before* that happens!

don't be afraid:

((())))((()(())))))(()()()()()((((((((((((()))))))))))(((((((()()()()()()(()()))))))))))()()()(((((((()()))))))(((()))()))))

that wasn't so bad, was it? :slight_smile:

-- Elliot Temple

···

On May 11, 2006, at 9:39 PM, Tim Uckun wrote:

But seriously, if you feel that Ruby doesn't work for you, check out
Python (http://www.python.org/\) or maybe Perl (http://www.perl.org/\)
or even Java (Oracle Java Technologies | Oracle). There are a lot of programming
languages out there, and it never hurts to give some of them a try.

Noooo. If you are a new programmer learn lisp and smalltalk first. If
somehow you decide that neither one of them are to your liking then
learn python.

You can safely skip perl and java :slight_smile:

That's a very broad statement. I truly enjoy perl. It's second only to
ruby in my book.

Charlie Bowman
http://www.recentrambles.com

···

On Fri, 2006-05-12 at 13:39 +0900, Tim Uckun wrote:

Noooo. If you are a new programmer learn lisp and smalltalk first. If
somehow you decide that neither one of them are to your liking then
learn python.

You can safely skip perl and java :slight_smile:

Elliot Temple <curi@curi.us> writes:

don't be afraid:

((())))((()(())))))(()()()()()((((((((((((()))))))))))(((((((()()()()
()()(()()))))))))))()()()(((((((()()))))))(((()))()))))

that wasn't so bad, was it? :slight_smile:

Not so bad? There are mismatched parentheses in there! That's just not
OK. The pain!

-Phil Hagelberg

No it only looks that way. He actually wrote a reader macro that transforms that into valid code, it's hard to see because it's name is "".

···

On May 12, 2006, at 3:04 PM, Phil Hagelberg wrote:

Elliot Temple <curi@curi.us> writes:

don't be afraid:

((())))((()(())))))(()()()()()((((((((((((()))))))))))(((((((()()()()
()()(()()))))))))))()()()(((((((()()))))))(((()))()))))

that wasn't so bad, was it? :slight_smile:

Not so bad? There are mismatched parentheses in there! That's just not
OK. The pain!

-Phil Hagelberg