Operators are special symbols that perform operations on variables and values. For example,
puts 5 + 6    # Output: 11
Here, + is an operator that adds two numbers: 5 and 6.
Types of Ruby Operators
Here's a list of different types of Ruby operators that we will learn in this tutorial:
- Arithmetic Operators
 - Assignment Operators
 - Comparison Operators
 - Logical Operators
 - Bitwise Operators
 - Ternary Operator
 
Arithmetic Operators
Arithmetic operators are used to perform mathematical operations like addition, subtraction, multiplication, etc. For example,
mult = 2 * 5
puts mult    # Output: 10
Here, * is an arithmetic operator that multiplies two values 2 and 5.
Some commonly used arithmetic operators are:
| Operator | Operation | Example | Result | 
|---|---|---|---|
+ | 
Addition | 5 + 2  | 
7 | 
- | 
Subtraction | 4 - 2  | 
2 | 
* | 
Multiplication | 2 * 3  | 
6 | 
/ | 
Division | 4 / 2  | 
2 | 
% | 
Modulo | 5 % 2  | 
1 | 
** | 
Exponentiation | 4 ** 2  | 
16 | 
Example 1: Arithmetic Operators
Let's explore an example to see how various arithmetic operators work.
a = 7
b = 2
# Addition
puts a + b    # Output: 9
# Subtraction
puts a - b    # Output: 5
# Multiplication
puts a * b    # Output: 14
# Division
# Ruby performs integer division when both values are integers.
# So,it returns only the whole number part.
puts a / b    # Output: 3
# Modulo
puts a % b    # Output: 1
# Exponentiation
puts a ** b    # Output: 49
Assignment Operators
The assignment operator = is used to assign values to a variable. For example,
# Assigns 5 to num
num = 5 
puts num
Output
5
Here, we've used the = operator to assign the value 5 to the variable num.
Some commonly used assignment operators in Ruby are:
| Operator | Name | Example | 
|---|---|---|
= | 
Assignment Operator | a = 7(Value of a is 7) | 
+= | 
Addition Assignment | a += 5(Same as a = a + 5) | 
-= | 
Subtraction Assignment | a -= 2(Same as a = a - 2) | 
*= | 
Multiplication Assignment | a *= 3(Same as a = a * 3) | 
/= | 
Division Assignment | a /= 2 (Same as a = a / 2) | 
%= | 
Remainder Assignment | a %= 4(Same as a = a % 4) | 
**= | 
Exponentiation Assignment | a **= 2(Same as a = a ** 2) | 
Example 2: Assignment Operators
# Using Assignment Operator
num = 7
# Using Addition Assignment
num += 5
puts "After += 5: #{num}"  
# Using Subtraction Assignment
num -= 2
puts "After -= 2: #{num}"  
# Using Multiplication Assignment
num *= 3
puts "After *= 3: #{num}" 
# Using Division Assignment
num /= 2
puts "After /= 2: #{num}"  
# Using Remainder Assignment
num %= 4
puts "After %= 4: #{num}" 
# Using Exponentiation Assignment
num **= 2
puts "After **= 2: #{num}"  
Output
After += 5: 12 After -= 2: 10 After *= 3: 30 After /= 2: 15 After %= 4: 3 After **= 2: 9
Here, after each assignment, the value of num changes, and the new value is used in the next step.
Comparison Operators
The comparison operators compare two values and return a boolean value (true or false) based on the comparison result. For example,
a = 2
b = 5
# Checks if 'a' is less than 'b'
puts a <  b
# Output: true
Here, we've used the less than (<) comparison operator to compare the values of a and b. Since 2 is less than 5, the expression a < b evaluates to true.
Some commonly used comparison operators are:
| Operator | Name | Example | Result | 
|---|---|---|---|
== | 
Equal to | 3 == 5  | 
false | 
!= | 
Not equal to | 3 != 4 | 
true | 
> | 
Greater than | 4 > 4 | 
false | 
< | 
Less than | 3 < 3  | 
false | 
>= | 
Greater than or equal to | 4 >= 4  | 
true | 
<= | 
Less than or equal to | 3 <= 3 | 
true | 
<=> | 
Combined comparison (returns -1, 0, or 1) | 5 <=> 10 | 
-1 | 
Example 3: Comparison Operators
a = 5
b = 2
# Equal to operator
puts "#{a} == #{b} is #{a == b}"   
# Not equal to operator
puts "#{a} != #{b} is #{a != b}"   
# Greater than operator
puts "#{a} > #{b} is #{a > b}"     
# Less than operator
puts "#{a} < #{b} is #{a < b}"     
# Greater than or equal to operator
puts "#{a} >= #{b} is #{a >= b}"  
# Less than or equal to operator
puts "#{a} <= #{b} is #{a <= b}"   
# Combined comparison operator
puts "#{a} <=> #{b} is #{a <=> b}"
Output
5 == 2 is false 5 != 2 is true 5 > 2 is true 5 < 2 is false 5 >= 2 is true 5 <= 2 is false 5 <=> 2 is 1
Logical Operators
Logical operators are used to check whether an expression is true or false. They are used in decision-making. For example,
a = 3
b = 6
puts (a > 2) && (b >= 6)    # Output:  true
Here, we've used the logical AND operator (&&). Since both  a > 2 and b >= 6 are true, the result is true.
The commonly used logical operators are:
| Operator | Syntax | Description | 
|---|---|---|
&& (Logical AND) | 
a && b | 
Returns true only if both a and b are true. | 
|| (Logical OR) | 
a || b | 
Returns true if either a or b is true. | 
! (Logical NOT) | 
!a | 
Returns false if a is true and vice versa. | 
Example 4: Logical Operators
# Logical AND
has_password = true
has_username = true
can_login = has_password && has_username
puts "Can login: #{can_login}"   
# Logical OR
is_weekday = false
is_holiday = true
can_relax = is_weekday || is_holiday
puts "Can relax: #{can_relax}"  
# Logical NOT
is_busy = false
is_free = !is_busy
puts "Is free: #{is_free}"       
Output
Can login: true Can relax: true Is free: true
Here,
| Expression | Result | Reason | 
|---|---|---|
has_password && has_username | 
true | 
Both has_password and has_username are true. | 
is_weekday || is_holiday | 
true | 
is_weekday is false, but since is_holiday is true, the OR operator returns true. | 
!is_busy | 
true | 
is_busy is false, and the NOT operator inverts the false to true. | 
Bitwise Operators
Bitwise operators act on operands as if they were strings of binary digits. They operate bit by bit, hence the name.
In the table below:
Let a = 10 (0000 1010 in binary) and b = 4 (0000 0100 in binary)
| Operator | Syntax | Description | 
|---|---|---|
& (Bitwise AND) | 
a & b | 
0 (0000 0000)Copies bits set in both a and b | 
| (Bitwise OR) | 
a | b | 
14 (0000 1110)Copies bits set in either a or b | 
~ (Bitwise NOT) | 
~a | 
-11 (1111 0101)Flips all bits in a | 
^ (Bitwise XOR) | 
a ^ b | 
14 (0000 1110)Copies bits set in one but not both of a and b | 
>> (Bitwise right shift) | 
a >> 2 | 
2 (0000 0010)Shifts a right by 2 bits | 
<< (Bitwise left shift) | 
a << 2 | 
40 (0010 1000)Shifts a left by 2 bits | 
Note: Binary values are shown in 8-bit format for clarity. Ruby uses arbitrary-precision integers, so actual storage may differ.
Ternary Operator
The ternary operator in Ruby consists of three parts:
- A condition.
 - An expression to execute if the condition is 
true. - Another expression to execute if the condition is 
false. 
The syntax of the ternary operator is:
condition ? Expression1 : Expression2
Let's see a simple example of the ternary operator.
age = 18
can_vote = age >= 18 ? "Yes, you can vote." : "No, you cannot vote."
puts can_vote 
Output
Yes, you can vote.
Here,
- Condition: 
age >= 18checks ifageis 18 or greater. - Expression1: 
"Yes, you can vote."is returned if the condition istrue. - Expression2: 
"No, you cannot vote."is returned if the condition isfalse. 
Special Operators
In Ruby, range operators are used to create a sequence of values from a start point to an endpoint. There are two types of range operators:
| Operator | Description | Example | 
|---|---|---|
Inclusive Range (..) | 
Includes the end value. | 1..5 → 1, 2, 3, 4, 5 | 
Exclusive Range (...) | 
Excludes the end value. | 1...5 → 1, 2, 3, 4 | 
The dot (.) operator is used to call methods on objects. For example,
greeting = "hello"
puts greeting.upcase   # Output: HELLO
Here, .upcase calls the upcase method on the string "hello".
The double colon (::) operator is used to access constants, classes, or modules defined inside another module or class. For example,
puts Math::PI   # Output: 3.141592653589793
The defined? operator checks if a variable, method, or constant exists. It returns a string if it's defined, or nil if not. For example,
x = 10
puts defined? x       # Output: local-variable
puts defined? puts    # Output: method
puts defined? y       # Output: nil     
In Ruby, if defined? returns nil, puts prints nothing, because there's nothing to print.