ZetCode

Ruby nil Keyword

last modified April 27, 2025

This tutorial explains how to use Ruby's nil keyword. It represents the absence of a value and is Ruby's way to express "nothing".

The nil keyword is a special value indicating no value or undefined. It is the only instance of the NilClass class. Unlike other languages, nil is an object in Ruby.

Understanding nil is crucial for proper Ruby programming. Many methods return nil to indicate failure or absence. Proper nil handling prevents common errors.

Basic nil Example

This simple example demonstrates how nil behaves in basic operations. It shows nil's object nature and common interactions.

basic_nil.rb
value = nil
puts value.inspect
puts value.class
puts value.nil?
puts value.to_s

The code shows nil's inspect output, class, nil-check, and string conversion. All Ruby objects respond to these methods, including nil.

Method Return Values

Many Ruby methods return nil to indicate absence or failure. This example shows common cases where methods return nil.

method_returns.rb
array = [1, 2, 3]
hash = { a: 1, b: 2 }
puts array[10] # Out of bounds
puts hash[:c] # Missing key
puts /abc/.match('xyz') # No match
puts "".slice(1) # Out of range

Each operation returns nil when the requested value doesn't exist. This pattern is consistent across Ruby's core library methods.

Conditionals with nil

In conditionals, nil acts as false. This example demonstrates nil's boolean behavior and how to properly check for nil.

conditionals.rb
value = nil
if value
 puts "This won't print"
else
 puts "nil is falsey"
end
puts "Value exists" unless value.nil?
puts "Value is nil" if value.nil?

The first conditional shows nil's falsey nature. The explicit nil checks are preferred for clarity and to avoid subtle bugs.

Safe Navigation Operator

Ruby's safe navigation operator (&.) prevents NoMethodError when calling methods on nil. This example demonstrates its usage.

safe_navigation.rb
user = nil
# Without safe navigation
name = user ? user.name : "Guest"
# With safe navigation
name = user&.name || "Guest"
puts name

The safe navigation operator makes code more concise. It returns nil if the receiver is nil instead of raising an exception.

nil Coalescing

Ruby uses the || operator for nil coalescing. This example shows how to provide default values when dealing with nil.

coalescing.rb
config = nil
timeout = config || 30
puts timeout
# More complex example
user_input = nil
processed = user_input || gets.chomp || "default"
puts processed

The || operator returns its right operand when the left is nil. This pattern is commonly used for configuration defaults.

nil in Collections

nil can be stored in collections but may cause issues. This example shows handling nil in arrays and hashes.

collections.rb
array = [1, nil, 3, nil]
hash = { a: 1, b: nil }
# Compact removes nils
puts array.compact.inspect
# Filter nil values
puts hash.reject { |k, v| v.nil? }.inspect
# Map with nil handling
result = array.map { |x| x&.to_s || "nil" }
puts result.inspect

The compact method removes nil values from arrays. Similar techniques work for hashes and other collections.

Custom nil Handling

This example demonstrates advanced nil handling patterns including custom methods and the Null Object pattern.

custom_handling.rb
class User
 attr_accessor :name
 
 def initialize(name)
 @name = name
 end
 
 def display_name
 name || "Anonymous"
 end
end
# Null Object pattern
class NullUser
 def name
 "Guest"
 end
end
user1 = User.new(nil)
user2 = nil
puts user1.display_name
puts (user2 || NullUser.new).name

The example shows two approaches: method-level nil handling and the Null Object pattern. Both provide cleaner code than scattered nil checks.

Source

Ruby NilClass Documentation

This tutorial covered Ruby's nil value with practical examples showing its behavior, common patterns, and best practices for handling nil.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Ruby tutorials.

AltStyle によって変換されたページ (->オリジナル) /