javascript - event - github coffeescript
¿Por qué CoffeeScript utiliza %% para el módulo en lugar del operador javascript estándar% (2)
En la documentación de CoffeeScript sobre operadores, se dice que puede usar %%
para el verdadero módulo matemático, pero no hay una explicación de por qué esto es diferente del "operador de módulo" %
en JavaScript.
Más abajo dice que a %% b
en CoffeeScript es equivalente a escribir (a % b + b) % b
en JavaScript, pero esto parece producir los mismos resultados para los casos más simples.
Encontré la respuesta en otra pregunta y respuesta de y el módulo de Javascript no se comporta y quería compartirlo para las personas que, como yo, solo buscaban explicaciones relacionadas con "CoffeeScript" y, por lo tanto, tienen dificultades para encontrar la respuesta correcta.
La razón para usar a %% b
que compila a (a % b + b) % b
es que para un número negativo, como -5 % 3
, JavaScript producirá un número negativo -5 % 3 = -2
mientras que la respuesta matemática es correcta debe ser -5 % 3 = 1
.
La respuesta aceptada se refiere a un artículo sobre el error de módulo de JavaScript que lo explica bien.
No tenía sentido para mí al principio, así que creo que necesita un ejemplo.
check = (a,b) ->
c = (b*Math.floor(a/b)) + a%b
d = (b*Math.floor(a/b)) + a%%b
console.log(
[c, c == a]
[d, d == a]
)
check 78, 33 # [ 78, true ] [ 78, true ]
check -78, 33 # [ -111, false ] [ -78, true ]
###
78 mod 33 = 12
-78 mod 33 = 21
check: 78 = 33 * 2 + 12
check: -78 = 33 * -3 + 21
###
Parece que el módulo es un truco matemático para poder usar una fórmula para todos los números en lugar de uno para los negativos y el segundo para los positivos. No sé si es más que un simple truco y, sin embargo, tiene un significado intrínseco.