Ruby Strings

A string object in ruby can be created by using either double quotes, “Hello World”, or single quotes, ‘Hello World’. Both are objects which is a sequence of 8-bit bytes in memory belonging to the class String. Since this sequence of memory is used to represent characters of a spoken language: it is referred to as a string literal (the string literal is – Hello World and does not include the quotes).

string1

What’s the difference between ‘….’ and “….” ?

Single quotes allow for the simplest form string literal. It does not support substitution. It only supports two escape sequences ( \’ and \\ ). Double quotes on the other hand not only support substitution but also many escape sequences. Although this is not obvious from the string literal example above, if we try to create a string literal such as ‘My name is Suchitra and I’m learning ruby’ we can run into these limitations depending on how we implement it.

If we try to implement it just as above we can do so by escaping \’ in I’m and it works fine.

string2

However, if we want to insert the name as a variable, single quotes don’t support substitution but double quotes do.

string3

Additionally double quotes also support other escape sequences such as \” – Double quote, \\ – single backslash, \a – bell/alert, \b – backspace, \r – carriage return, \n – newline, \s – space, \t – tab.

With ruby strings, it is possible to perform certain string operations using what are usually arithmetic operators.

  1. Adding two strings (string concatenation) can be performed by using the + operator: puts ‘Sam, ‘ + ‘I am.’ Note however that, only a string can be added to another string. So if we try:  puts‘19’ + 75 we are told a number cannot be added to a string.
  2. The multiplication operator can be used where an object is required to be used repeatedly such as puts ‘etc.’*3 which would mean output the string etc. three times or output three sets of the string etc. But don’t expect 3*’etc.’ to work because we are asking for ‘etc.’ sets of 3 which is senseless.

string4

 

Numbers in Ruby

Like all things in ruby, numbers too are objects. They are instances of the Numeric class. If the number is an integer it will belong either to the Fixnum or Bignum class. If it is a float it belongs to the Float class. So how do we find out? Let’s call our friend irb and see,

num1

As seen from above, we enter an integer number (in this case 7). In ruby this number is now an object. In order to find out what class this object belongs to we enter 7.class and as can be seen, irb evaluates it to be Fixnum. Similarly, if we enter a floating point number, we see that it belongs to class Float. If we assign 7 to a variable “a”, then “a” points to an object of type Fixnum and if we re-assign 7.0 to it, it then points to an object of type Float.

An object is an instance of a class. That is, the class is the generic (in this case number) and an object (7) is a specific (just like class: human, object: Suchitra). So an object inherits various traits from its class such as methods and we are able to perform various computations. For example, we can add two integers and get an integer answer; we can add two floating numbers and get a floating number answer and so on.

num2

Like all of us have ancestors, ruby classes too have ancestor classes from which they inherit properties. If you want to check what the ancestor classes are of the Fixnum class, you can do so by typing,

num3

Now we can see the entire list of parent classes of Fixnum, going all the way back to BasicObject (BasicObject is the parent class of all classes in ruby).

Experimenting with number objects: Since number objects are armed with various methods, we can do all kinds of manipulations in ruby. We can add, subtract, square, divide etc. etc. etc……………

However there are a few things that I have come across so far, that are done differently in ruby when dealing with numbers which would be good to keep in mind. For example,

1. When dividing two numbers, the division operator depends on the class of the operands. If both values are integers then truncating-integer division is performed. If either value is a Float then floating-point division is performed.

num4

2. With integer division, -a/b = a/-b but may not equal –(a/b)

num5

As can be seen -2/1 = 2/-1 = -(2/1) = -2, however, -5/2 = 5/-2 = -3 and –(5/2) = -2.  In ruby with integer division truncation is towards negative infinity where as with languages like C/C++  truncates towards zero.  In this example, the floating point result of -5/2 = 5/-2 = -2.5 which is truncated to -3. However with –(5/2), it first performs the floating point division of  5/2 = 2.5. Then truncates it to 2 and gives the negative integer which is -2.

3.  The modulo (%) operator also differs from C.

num6

With positive numbers (7%3 = 1) we get results similar to C. However -7%3 => 2. Two important points: The magnitude of the quotient differs and the sign differs (because in ruby the result is given the sign of the second operand). In our example, the floating point result of -7/3 is -2.33. Ruby rounds it down to -3 which is -9/3.  So how do you get -7/3?  To -9/3 we add 2/3. Thus, the answer is 2.

4.  If you want to produce results similar to C, ruby has the “remainder” method which can be used

num7

IRB (Interactive Ruby)

The best way to start learning how ruby works, is to play around in the Interactive Ruby Shell. So how do we get irb?

If you are on Windows visit RubyInstaller and you are able to download the latest version of Ruby. If you are a Mac user ruby-lang.org walks you through installing ruby.

If you are an absolute beginner, it is advised to download Ruby 1.9.3 installers. At the time of this post I am using ruby 1.9.3.

Once you have installed ruby on your machine, open your command prompt and type

C:\>ruby –version

If ruby is successfully installed you will get a response like the one below giving you the version details of your ruby installation.

C:\>ruby –version

ruby 1.9.3p392 (2013-02-22) [i386-mingw32]

To invoke irb, at the command prompt type irb and hit return

C:\>irb

irb(main):001:0>

Then you can start experimenting. For example, if you want to add two numbers in ruby, all you do is

C:\>irb

irb(main):001:0> 1 + 2

=> 3

As you can see the second line shows the value of the last expression evaluated by irb.  Of course you can experiment with various other methods like this

irb(main):001:0> 2*3

=> 6

irb(main):002:0> 2 – 3

=> -1

irb(main):003:0> 2%3

=> 2

irb(main):004:0> 2**2

=> 4

And to write that famous “Hello World” program in ruby, all you do is:

irb(main):001:0> puts ‘Hello World’

Hello World

=> nil

irb(main):002:0>

Very Neat!

I personally like irb because it’s such a great quick check tool. For example, I wanted to see how an array object would behave when I applied a method called “shuffle”. So I typed it in and irb showed me:

irb(main):005:0> p = [1, 2, 3, 4, 5, 6, 7]

=> [1, 2, 3, 4, 5, 6, 7]

irb(main):006:0> p.shuffle

=> [6, 5, 7, 3, 2, 1, 4]

irb(main):007:0>

The method did exactly what I was hoping it would and I was able to easily check it out in irb before I implemented it in my algorithm.

Foundation Ruby

Sometimes in order to make progress, it is important to take a few steps back and master the fundamentals. With rails, having a solid grounding in ruby is of paramount importance. Starting with the pre-course prep materials, Tealeaf gets you started on building that solid foundation.

 

First Step!

We’ve all heard of the cat and the curiosity thing! Well in my case thanks to my curiosity I am alive and rocking it out with my Ruby and Rails buddies! Ok, enough with the cheeky remarks.

Earlier this year, I decided to find out what Ruby on Rails was and started googling my way into web development. Very soon I began to feel that there were myriad things that had to be mastered before I could make anything happen. However, wonderful Google also showed me the path to wonderful Stack Overflow, the open source community and the Hartle tutorial. Shortly thereafter much to my amazement I deployed my very first web app!

Since then, I have made a fair amount of progress with the support of Women Who Code (SF) and RailsBridge. However, due to various time constraints, teaching myself, Ruby and Rails has been a little too slow to meet my objectives. The best way to speed up my progress appeared to be to join one of the popular classroom based bootcamps. The time and the financial constraints of such an undertaking however was not a feasible option for me. I realized that what I needed was an online bootcamp which would offer a good program and allow me to juggle within my constraints. So when a RailsBridge attendee mentioned Tealeaf Academy I decided to check it out and here I am one week into my program at Tealeaf, starting my own tech blog on Ruby and Rails.

In this blog, I will talk about anything that I find interesting on my journey towards becoming a full stack developer.