Easy Tutorial
❮ Ruby String Ruby Dir Methods ❯

Ruby Operators

Ruby supports a rich set of operators. Most operators are actually method calls. For example, a + b is interpreted as a.+(b), where the + method of the variable a is called with b as the argument.

For each operator (+ - * / % ** & | ^ << >> && ||), there is a corresponding shorthand assignment operator (+= -= etc.).

Ruby Arithmetic Operators

Assume variable a holds 10 and variable b holds 20, then:

Operator Description Example
+ Addition - Adds operands on either side a + b will give 30
- Subtraction - Subtracts right operand from the left a - b will give -10
* Multiplication - Multiplies operands on either side a * b will give 200
/ Division - Divides left operand by right operand b / a will give 2
% Modulus - Divides left operand by right operand and returns remainder b % a will give 0
** Exponent - Performs exponential calculation a**b will give 10 to the power 20

Ruby Comparison Operators

Assume variable a holds 10 and variable b holds 20, then:

Operator Description Example
== Checks if the values of two operands are equal, if yes then condition is true. (a == b) is not true.
!= Checks if the values of two operands are equal, if not then condition is true. (a != b) is true.
> Checks if the value of the left operand is greater than the value of the right operand, if yes then condition is true. (a > b) is not true.
< Checks if the value of the left operand is less than the value of the right operand, if yes then condition is true. (a < b) is true.
>= Checks if the value of the left operand is greater than or equal to the value of the right operand, if yes then condition is true. (a >= b) is not true.
<= Checks if the value of the left operand is less than or equal to the value of the right operand, if yes then condition is true. (a <= b) is true.
<=> Combined comparison operator. Returns 0 if the first operand equals the second, 1 if the first operand is greater than the second, and -1 if the first operand is less than the second. (a <=> b) returns -1.
=== Used to test equality within a when clause of a case statement. (1...10) === 5 returns true.
.eql? Returns true if the receiver and argument have both the same type and equal values. 1 == 1.0 returns true, but 1.eql?(1.0) returns false.
equal? Returns true if the receiver and argument have the same object id. If aObj is a copy of bObj, then aObj == bObj returns true, a.equal?bObj returns false, but a.equal?aObj returns true.

Ruby Assignment Operators

Assume variable a holds 10 and variable b holds 20, then:

Operator Description Example
= Simple assignment operator, assigns values from right side operands to left side operand c = a + b will assign the value of a + b to c
+= Add AND assignment operator, adds the right operand to the left operand and assigns the result to the left operand c += a is equivalent to c = c + a
-= Subtract AND assignment operator, subtracts the right operand from the left operand and assigns the result to the left operand c -= a is equivalent to c = c - a
*= Multiply AND assignment operator, multiplies the right operand with the left operand and assigns the result to the left operand c *= a is equivalent to c = c * a
/= Divide AND assignment operator, divides the left operand with the right operand and assigns the result to the left operand c /= a is equivalent to c = c / a
%= Modulus AND assignment operator, takes modulus using two operands and assigns the result to the left operand c %= a is equivalent to c = c % a
**= Exponent AND assignment operator, performs exponential calculation on operators and assigns value to the left operand c **= a is equivalent to c = c ** a

Ruby Parallel Assignment

Ruby also supports parallel assignment of variables. This allows multiple variables to be initialized with a single line of Ruby code. For example:

a = 10
b = 20
c = 30

Using parallel assignment, this can be done more quickly:

a, b, c = 10, 20, 30

Parallel assignment is also useful for swapping the values of two variables:

a, b = b, c

Ruby Bitwise Operators

Bitwise operators work on bits and perform bit-by-bit operations.

Assume if a = 60, and b = 13, now in binary format, they will be as follows:

a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a  = 1100 0011

The following table lists the bitwise operators supported by Ruby:

Operator Description Example
& Binary AND Operator copies a bit to the result if it exists in both operands. (a & b) will give 12, which is 0000 1100
| Binary OR Operator copies a bit if it exists in either operand. (a | b) will give 61, which is 0011 1101
^ Binary XOR Operator copies the bit if it is set in one operand but not both. (a ^ b) will give 49, which is 0011 0001
~ Binary Ones Complement Operator is unary and has the effect of 'flipping' bits. (~a) will give -61, which is 1100 0011 in 2's complement form due to a signed binary number.
<< Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand. a << 2 will give 240, which is 1111 0000
>> Binary Right Shift Operator. The left operands value is moved right by the number of bits specified by the right operand. a >> 2 will give 15, which is 0000 1111

Ruby Logical Operators

The following table lists the logical operators supported by Ruby:

Assume variable a holds 10 and variable b holds 20, then:

Operator Description Example
and Called Logical AND operator. If both the operands are true, then the condition is true. (a and b) is true.
or Called Logical OR Operator. If any of the two operands are non-zero, then the condition is true. (a or b) is true.
&& Called Logical AND operator. If both the operands are non-zero, then the condition is true. (a && b) is true.
|| Called Logical OR Operator. If any of the two operands are non-zero, then the condition is true. (a || b) is true.
! Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true, then Logical NOT operator will make it false. !(a && b) is false.
not Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true, then Logical NOT operator will make it false. not(a && b) is false.

Ruby Ternary Operator

There is one more operator called the ternary operator. The first evaluates an expression for a true or false value and then executes one of the two given statements depending upon the result of the evaluation. The syntax is as follows:

Operator Description Example
? : Conditional Expression If the condition is true ? then X : otherwise Y

Ruby Range Operators

In Ruby, sequence ranges are used to create a range of successive values - consisting of a start value, an end value (optionally), and values in between.

In Ruby, these sequences are created using the ".." and "..." range operators. The two-dot form creates an inclusive range, while the three-dot form creates a range that excludes the high value.

Operator Description Example
.. Creates a range from the start point to the end point (inclusive) 1..10 creates a range from 1 to 10
... Creates a range from the start point to the end point (exclusive) 1...10 creates a range from 1 to 9

Ruby defined? Operator

defined? is a special operator that takes the form of a method call to determine whether the passed expression is defined. It returns a description string of the expression, or nil if the expression is not defined.

Here are the various uses of the defined? operator:

Usage 1

defined? variable # True if the variable is initialized

For example:

foo = 42
defined? foo    # => "local-variable"
defined? $_     # => "global-variable"
defined? bar    # => nil (undefined)

Usage 2

defined? method_call # True if the method is defined

For example:

defined? puts        # => "method"
defined? puts(bar)   # => nil (bar is undefined here)
defined? unpack      # => nil (undefined here)

Usage 3

# True if a method callable by super user is present
defined? super

For example:

defined? super     # => "super" (if callable)
defined? super     # => nil (if not callable)

Usage 4

defined? yield   # True if a block is passed

For example:

defined? yield    # => "yield" (if a block is passed)
defined? yield    # => nil (if no block is passed)

Ruby Dot Operator "." and Double Colon Operator "::"

You can call methods in a class or module by prefixing the method name with the class or module name and a dot .. You can reference constants using the class or module name and two colons ::.

:: is a unary operator that allows constants, instance methods, and class methods to be accessed from anywhere outside the class or module.

Remember: In Ruby, classes and methods can also be treated as constants.

You just need to prefix the constant name with :: to return the appropriate class or module object.

If the expression before :: is a class or module name, it returns the corresponding constant value within that class or module; if there is no prefix expression, it returns the corresponding constant value from the main Object class.

Here are two examples:

MR_COUNT = 0        # Defined on main Object class
module Foo
  MR_COUNT = 0
  ::MR_COUNT = 1    # Set global count to 1
  MR_COUNT = 2      # Set local count to 2
end
puts MR_COUNT       # This is the global constant
puts Foo::MR_COUNT  # This is the local "Foo" constant

Second example:

CONST = ' out there'
class Inside_one
   CONST = proc {' in there'}
   def where_is_my_CONST
      ::CONST + ' inside one'
   end
end
class Inside_two
   CONST = ' inside two'
   def where_is_my_CONST
      CONST
   end
end
puts Inside_one.new.where_is_my_CONST
puts Inside_two.new.where_is_my_CONST
puts Object::CONST + Inside_two::CONST
puts Inside_two::CONST + CONST
puts Inside_one::CONST
puts Inside_one::CONST.call + Inside_two::CONST

Ruby Operator Precedence

The table below lists all the operators in order of precedence from highest to lowest.

Method Operator Description
Yes :: Constant resolution operator
Yes [ ] [ ]= Element reference, element set
Yes ** Exponentiation
Yes ! ~ + - Not, complement, unary plus, unary minus (the last two methods are named +@ and -@)
Yes * / % Multiplication, division, modulus
Yes + - Addition and subtraction
Yes >> << Bitwise shift right, bitwise shift left
Yes & Bitwise AND
Yes ^ | Bitwise XOR, bitwise OR
Yes <= < > >= Comparison operators
Yes <=> == === != =~ !~ Equality and pattern matching operators ( != and !~ cannot be defined as methods)
&& Logical AND
Logical OR
.. ... Range (inclusive, exclusive)
? : Ternary if-then-else
= %= { /= -= += = &= >>= <<= *= &&= = **= Assignment
defined? Check if the specified symbol is defined
not Logical negation
or and Logical composition

Note: Operators marked as Yes in the method column are actually methods and can therefore be overloaded.

❮ Ruby String Ruby Dir Methods ❯