TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

Ruby Nil Value Examples: NoMethodError

This Ruby article tests against nil. It shows errors a nil object can cause and how to avoid those errors.

Nil is a special value.

It indicates a value that is not present. Methods often return nil when they attempt to locate an element that does not exist.

Checks. We must check for nil in many locations in our code. Uninitialized fields in classes are nil too. Nil is everywhere: without nothing, there cannot be something.

This example shows how nil is used with the Array class. We create an array with three integer elements. We then call the index method on the array.

And: We try to locate a value that is not present. And the index method returns nil.

Array

Caution: We must test for nil before calling methods on an object. This is shown in the example after this one.

Based on:

Ruby 2

Ruby program that uses nil

# An array of three elements.
values = Array[10, 30, 50]

# Try to find an element that does not exist.
if values.index(70) == nil
    # This is reached.
    puts "Result is nil"
end

Output

Result is nil

NoMethodError. We cannot call methods on the nil object. This will cause a NoMethodError. And at this point, program execution ceases. We must first test references to see if they are nil.

Not found: In this example, we access an element in a Hash that is not found. The Hash lookup returns a nil object.

Hash

Then: We try to use that object as though it were a string. But calling length() on nil is not possible.

String

Tip: Try changing the hash["b"] lookup to use instead the key "a". The program will proceed without an error. The key exists.

Ruby program that causes NoMethodError

# An example hash.
hash = Hash["a" => "dog"]

# Get an element that does not exist.
v = hash["b"]

# We cannot use length on it.
puts v.length()

Output

...undefined method 'length' for nil:NilClass (NoMethodError)

Uninitialized fields. A field in a class is automatically set to nil before it is assigned a value. So we can check for nil to see if a field has been initialized yet.

Class

Note: Any variable can be assigned nil manually, as with assignment. So nil is not just for uninitialized variables.

Ruby program that shows nil field

class Box
    def size
	@value
    end
end

# Create a new class instance.
x = Box.new

# A field on a class is nil until initialized.
if x.size == nil
    puts "NIL"
end

Output

NIL

Return nil. Methods return nil if no other return value is specified. Often, nil is returned when no value can be found. Here, analyze() returns nil unless "n" equals 2.

Methods, Return

Ruby program that has method, returns nil

def analyze(n)
    # This method returns nil unless n equals 2.
    if n == 2
	return n * 2
    end
end

puts "Result is nil" if analyze(3) == nil

Output

Result is nil

A nil review. Any class in Ruby can be nil. If our program logic can possibly result in a nil object, we must first test for nil.

If

This avoids errors, such as NoMethodError, that cause havoc in programs. Many statements must be written with nil in mind. Arrays, hashes and methods all involve nil values.


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf