Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion rules/S126/scala/rule.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ The requirement for a final ``++else++`` statement is defensive programming.

The ``++else++`` statement should either take appropriate action or contain a suitable comment as to why no action is taken. This is consistent with the requirement to have a final ``++case _++`` clause in a ``++match++``.

In Scala, this rule also applies when an ``++if++`` statement without an ``++else++`` clause appears on the right-hand side of an assignment. Since Scala treats ``++if++`` as an expression that returns a value, omitting the ``++else++`` clause results in the assignment receiving ``++Unit++`` (represented as ``++()++``) when the condition is false, which is typically unintended and can lead to type errors or unexpected behavior.

=== Noncompliant code example

[source,scala]
Expand All @@ -15,7 +17,13 @@ if (x == 0) {
doSomething
} else if (x == 1) {
doSomethingElse
}
}
----
[source,scala]
----
val result = if (x == 0) {
"zero"
}
----

=== Compliant solution
Expand All @@ -31,6 +39,15 @@ if (x == 0) {
}
----

[source,scala]
----
val result = if (x == 0) {
"zero"
} else {
"not zero"
}
----

=== Exceptions

When all branches of an ``++if++``-``++else if++`` end with ``++return++``, ``++break++`` or ``++throw++``, the code that comes after the ``++if++`` implicitly behaves as if it was in an ``++else++`` clause. This rule will therefore ignore that case.
Expand Down
Loading