66 lines
1.6 KiB
Plaintext
Raw Normal View History

== Why is this an issue?
2021-04-28 16:49:39 +02:00
Expressions with arithmetic (``/, {empty}*, %, {plus}{plus}, --, -, -=, {empty}*=, /=, %=, +=, {plus}``), unary (``++-++``), or comparison operators (``++>, <, >=, <=++``) where one, or both, of the operands is a String, Boolean or Date value rely on implicit conversions. Both the maintainability and reliability levels of such a piece of code are questionable.
=== Noncompliant code example
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,javascript]
2021-04-28 16:49:39 +02:00
----
str = "80";
quarter = str / 4; // Noncompliant
if (str < 10) { // Noncompliant
// ...
}
----
=== Compliant solution
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,javascript]
2021-04-28 16:49:39 +02:00
----
str = "80";
parsedStr = parseInt(str);
quarter = parsedStr / 4;
if (parsedStr < 10) {
// ...
}
----
=== Exceptions
2021-04-28 16:49:39 +02:00
* Expressions using the binary ``{plus}`` operator with at least one ``++String++`` operand are ignored because the ``{plus}`` operator will perform a concatenation in that case.
* Comparisons where both operands are strings are ignored because a lexicographical comparison is performed in that case.
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Convert this operand into a number.
=== Highlighting
Primary: non numerical operand
'''
== Comments And Links
(visible only on this page)
=== on 18 Oct 2016, 10:59:01 Pierre-Yves Nicolas wrote:
The current title of the rule seems rather vague to me. Shouldn't it mention "arithmetic and comparison expressions"?
=== on 18 Oct 2016, 13:09:38 Ann Campbell wrote:
\[~jeanchristophe.collet], please reword title into canonical form (x should [not] y)
endif::env-github,rspecator-view[]