Ruby Basic Data Types are fundamental building blocks that store different kinds of information. Ruby is dynamically typed, meaning variables don't need explicit type declarations, and everything in Ruby is an object with built-in methods.
1. Numbers: Ruby handles integers and floating-point numbers seamlessly:
# Integers
age = 25
big_number = 1_000_000 # Underscores for readability
puts age.class # Integer
# Floats
height = 5.9
pi = 3.14159
puts height.class # Float
# Number operations
puts 10 + 5 # 15
puts 10.0 / 3 # 3.3333333333333335
puts 10 / 3 # 3 (integer division)
puts 2 ** 8 # 256 (exponentiation)
2. Strings: Strings are sequences of characters with powerful manipulation methods:
name = "Alice"
greeting = 'Hello' # Single or double quotes
message = "Hello, #{name}!" # String interpolation
puts name.length # 5
puts name.upcase # ALICE
puts name.downcase # alice
puts greeting * 3 # HelloHelloHello
puts message.include?("Alice") # true
# Multi-line strings
poem = <<-EOF
Roses are red,
Violets are blue
EOF
3. Symbols: Symbols are immutable identifiers, more memory-efficient than strings for labels:
status = :active
role = :admin
puts status.class # Symbol
puts :active.object_id == :active.object_id # true (same object)
puts "active".object_id == "active".object_id # false (different objects)
4. Booleans: Ruby has true and false values with logical operations:
is_student = true
is_working = false
puts is_student.class # TrueClass
# Logical operations
puts true && false # false
puts true || false # true
puts !true # false
# Truthiness: only nil and false are falsy
puts !!0 # true (0 is truthy)
puts !!"hello" # true
puts !!nil # false
5. Nil: Represents absence of value, similar to null in other languages:
empty_value = nil
puts empty_value.class # NilClass
puts empty_value.nil? # true
# Safe navigation operator (Ruby 2.3+)
user = nil
puts user&.name # nil (doesn't raise error)
6. Arrays: Ordered collections that can hold mixed data types:
numbers = [1, 2, 3, 4, 5]
mixed = ["hello", 42, true, nil]
puts numbers[0] # 1 (first element)
puts numbers[-1] # 5 (last element)
numbers << 6 # Add element
puts numbers.length # 6
7. Hashes: Key-value pairs for structured data:
person = { "name" => "Bob", "age" => 30 }
modern_hash = { name: "Carol", age: 25 } # Symbol keys
puts person["name"] # Bob
puts modern_hash[:name] # Carol
Ruby's flexible type system and rich method libraries make data manipulation intuitive and powerful for developers.