A Nil Check is a type check. Failures of Nil Check violate the "tell, don't ask" principle. Additionally to that, type checks often mask bigger problems in your source code like not using OOP and / or polymorphism when you should.
The Nil Check code smell is a case of Simulated Polymorphism.
Given
class Klass
def nil_checker(argument)
if argument.nil?
puts "argument is nil!"
end
end
end
Reek would emit the following warning:
test.rb -- 1 warning:
[3]:Klass#nil_checker performs a nil-check. (NilCheck)
Nil Check reports use of
.nil?
method==
and===
operators when checking vs.nil
- case statements that use syntax like
when nil
- use of the safe navigation operator like
foo&.bar
Nil Check offers the Basic Smell Options.