Divisão por Zero
Como o KankeiScript usa o engine do JScript da Microsoft (que é o mesmo processador de JavaScript do Internet Explorer), ele compartilha as mesmas características do JavaScript em relação à divisão por zero.
Executar uma instrução que efetue uma divisão por zero não causa erro de execução. Ao invés disso, você poderá receber um valor não numérico como resultado da divisão (como um NaN ou um Infinity).
Basicamente, a divisão de zero por zero irá resultar em um NaN (Not a Number) e a divisão de qualquer outro número por zero irá resultar em um Infinity. Para determinar se um valor é um NaN ou Infinity, existem as funções isNaN e isFinite.
Considere por exemplo o seguinte módulo tipo template:
<%
WriteLine('10/2');
var a = 10/2;
WriteLine('Representação: ' + a);
WriteLine('isNaN........: ' + isNaN(a));
WriteLine('isFinite.....: ' + isFinite(a));
WriteLine();
WriteLine('0/0 => Indeterminado');
a = 0/0;
WriteLine('Representação: ' + a);
WriteLine('isNaN........: ' + isNaN(a));
WriteLine('isFinite.....: ' + isFinite(a));
WriteLine();
WriteLine('5/0 => +Infinito');
a = 5/0;
WriteLine('Representação: ' + a);
WriteLine('isNaN........: ' + isNaN(a));
WriteLine('isFinite.....: ' + isFinite(a));
WriteLine();
WriteLine('-5/0 => -Infinito');
a = -5/0;
WriteLine('Representação: ' + a);
WriteLine('isNaN........: ' + isNaN(a));
WriteLine('isFinite.....: ' + isFinite(a));
WriteLine();
%>
Que, ao ser executado, irá resultar nisto:
10/2 Representação: 5 isNaN........: false isFinite.....: true 0/0 => Indeterminado Representação: NaN isNaN........: true isFinite.....: false 5/0 => +Infinito Representação: Infinity isNaN........: false isFinite.....: false -5/0 => -Infinito Representação: -Infinity isNaN........: false isFinite.....: false
O ideal é sempre testar se o denominador é zero antes de fazer qualquer tipo de divisão, pois NaN e Infinity causam problemas ao serem passados para qualquer função do KankeiScript ou objeto do Kankei. O seguinte código, por exemplo, vai gerar um erro de execução com a mensagem "Overflow":
var a = 5/0;
WriteLine(ToLong(a)); // ToLong() é uma função do KankeiScript
// Passar pra ela um valor NaN ou Infinity resulta
// em um erro de "Overflow"
