include::../description-common.adoc[]

=== Code examples

==== Noncompliant code example

[source,python,diff-id=1,diff-type=noncompliant]
----
def f(b):
    a = True
    if a:  # Noncompliant
        do_something()

    if a and b:  # Noncompliant; "a" is always "True"
        do_something_else()
----

==== Compliant solution

[source,python,diff-id=1,diff-type=compliant]
----
def f(b):
    do_something()

    if b:
        do_something_else()
----

==== Noncompliant code example

[source,python,diff-id=2,diff-type=compliant]
----
def f(a, b):
    if a is None and b is None:
        do_something()
    elif a is not None or b is not None: # Noncompliant
        do_something_else()
----

==== Compliant solution

[source,python,diff-id=2,diff-type=noncompliant]
----
def f(a, b):
    if a is None and b is None:
        do_something()
    else:
        do_something_else()
----

=== How does this work?

In the first example, the gratuitous condition `a` is simply `True`.
Hence, the first `if`-statement can be removed, as `do_something()` is always
executed.
Additionally, the second `if`-statement can be simplified since the execution
of `do_something_else()` actually only depends on `b`.

In the second example, the condition on the `elif`-branch is gratuitous because
it is a logical consequence of a condition that already has been confirmed to
hold:
The condition of the `elif`-branch is only evaluated if the condition on the
`if`-branch evaluates to `False`.
If that condition is `False`, then as a consequence, at least one of `a` or `b`
is not `None`.
This is exactly the circumstance that is formalized by the second condition.
Thus it always evaluates to `True` when checked.
Therefore, the `elif`-branch can be simplified to an `else`-branch without a
condition.

include::../see.adoc[]

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::../message.adoc[]

include::../highlighting.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]

endif::env-github,rspecator-view[]
