Difference between nil? vs. (variable != nil)...

J

Jason Vogel

Source A :

if (@product_coverages != nil && @product_coverages.length > 0)
@product_coverages = @product_coverages.each do
|product_coverage|
product_coverage.external_description =
Coverage.find(product_coverage.coverage_id).external_description # test
if (product_coverage.external_description != nil)
product_coverage.external_description.capitalize!
end
end
end

Source B :

if (@product_coverages != nil && @product_coverages.length > 0)
@product_coverages = @product_coverages.each do
|product_coverage|
product_coverage.external_description =
Coverage.find(product_coverage.coverage_id).external_description # test
return "" if product_coverage.external_description.nil?
product_coverage.external_description.capitalize!
end
end

I wanted to use Source B, but it return "" everytime. But Source A
works. I expected both of them to work.

Jason
 
M

Martin DeMello

Source A :

if (@product_coverages != nil && @product_coverages.length > 0)
@product_coverages = @product_coverages.each do
|product_coverage|
product_coverage.external_description =
Coverage.find(product_coverage.coverage_id).external_description # test
if (product_coverage.external_description != nil)
product_coverage.external_description.capitalize!
end
end
end

Source B :

if (@product_coverages != nil && @product_coverages.length > 0)
@product_coverages = @product_coverages.each do
|product_coverage|
product_coverage.external_description =
Coverage.find(product_coverage.coverage_id).external_description # test
return "" if product_coverage.external_description.nil?
product_coverage.external_description.capitalize!
end
end

I wanted to use Source B, but it return "" everytime. But Source A
works. I expected both of them to work.

Put in a test print, to see what nil? is returning. It is possible for
a class to override nil?, though it's hard to think of why one would.

martin
 
J

Jason Vogel

I found 'return "" if product_coverage.external_description.nil?' as a
source sample somewhere, and I liked the readability factor. It seemed
very "Ruby-ish" to a PowerBuilder/Java/C# developer :).

In the end, I'm trying to figure out my "best practice" for iterating
over an array of objects. I'll happily take any suggestions.

Thanks,
Jason
 
W

William James

Jason said:
Source A :

if (@product_coverages != nil && @product_coverages.length > 0)
@product_coverages = @product_coverages.each do
|product_coverage|
product_coverage.external_description =
Coverage.find(product_coverage.coverage_id).external_description # test
if (product_coverage.external_description != nil)
product_coverage.external_description.capitalize!
end
end
end

Source B :

if (@product_coverages != nil && @product_coverages.length > 0)
@product_coverages = @product_coverages.each do
|product_coverage|
product_coverage.external_description =
Coverage.find(product_coverage.coverage_id).external_description # test
return "" if product_coverage.external_description.nil?
product_coverage.external_description.capitalize!
end
end

I wanted to use Source B, but it return "" everytime. But Source A
works. I expected both of them to work.

Jason

if @product_coverages != nil
@product_coverages.each { |p_c|
p_c.external_description =
Coverage.find(p_c.coverage_id).external_description and
p_c.external_description.capitalize!
}
end

-------------

A simpler way. When a description that's nil is encountered,
replace it with "".

if @product_coverages != nil
@product_coverages.each { |p_c|
p_c.external_description =
(Coverage.find(p_c.coverage_id).external_description or "").
capitalize
}
end
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top