
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
60 lines
1.1 KiB
Plaintext
60 lines
1.1 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Nested ``++when++`` structures are difficult to understand because you can easily confuse the cases of an inner ``++when++`` as belonging to an outer statement. Therefore nested ``++when++`` statements should be avoided.
|
|
|
|
|
|
Specifically, you should structure your code to avoid the need for nested ``++when++`` statements, but if you cannot, then consider moving the inner ``++when++`` to another function.
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,kotlin]
|
|
----
|
|
fun foo(n: Int, m: Int) {
|
|
when (n) {
|
|
0 ->
|
|
when (m) { // Noncompliant; nested when
|
|
// ...
|
|
}
|
|
1 -> print("1")
|
|
else -> print("2")
|
|
}
|
|
}
|
|
----
|
|
|
|
=== Compliant solution
|
|
|
|
[source,kotlin]
|
|
----
|
|
fun foo(n: Int, m: Int) {
|
|
when (n) {
|
|
0 -> bar(m)
|
|
1 -> print("1")
|
|
else -> print("2")
|
|
}
|
|
}
|
|
|
|
fun bar(m: Int){
|
|
when(m) {
|
|
// ...
|
|
}
|
|
}
|
|
----
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Refactor the code to eliminate this nested "when".
|
|
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::../comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|