60 lines
1.1 KiB
Plaintext
60 lines
1.1 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Nested ``++case++`` structures are difficult to understand because you can easily confuse the cases of an inner ``++case++`` as belonging to an outer statement. Therefore nested ``++case++`` statements should be avoided.
|
|
|
|
|
|
Specifically, you should structure your code to avoid the need for nested ``++case++`` statements, but if you cannot, then consider moving the inner ``++case++`` to another function.
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,ruby]
|
|
----
|
|
def foo(n, m)
|
|
case n
|
|
when 0
|
|
case m # Noncompliant; nested case
|
|
when 0 then puts "0"
|
|
# ...
|
|
end
|
|
when 1 then puts "1"
|
|
else puts "2"
|
|
end
|
|
end
|
|
----
|
|
|
|
=== Compliant solution
|
|
|
|
[source,ruby]
|
|
----
|
|
def foo(n, m)
|
|
case n
|
|
when 0
|
|
bar(m)
|
|
when 1 then puts "1"
|
|
else puts "2"
|
|
end
|
|
end
|
|
|
|
def bar(m)
|
|
case m
|
|
when 0 then puts "0"
|
|
# ...
|
|
end
|
|
end
|
|
----
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::../message.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::../comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|