Por que Java, C # e C ++ não têm intervalos?
Ada, Pascal e muitos outros idiomas suportam intervalos, uma maneira de subtipos números inteiros. Um intervalo é um valor inteiro assinado que varia de um valor (primeiro) a outro (último). É fácil implementar uma classe que faz o mesmo no OOP, mas acho que o suporte nativo ao recurso pode permitir que o compilador faça verificações estáticas adicionais.
Eu sei que é impossível verificar estaticamente que um variabile definido em um intervalo não vai "exceder" o tempo de execução, ou seja, devido a entrada incorreta, mas acho que algo poderia ser feito. Eu penso noDesign por contrato abordagem (Eiffel) e o Spec # (Contratos em C # ), que fornecem uma solução mais geral.
Existe uma solução mais simples que verifique pelo menos a atribuição estática fora dos limites em tempo de compilação em C ++, C # e Java? Um tipo destatic-assert?
editar: Entendo que "intervalos" podem ser usados para diferentes fins:
iteradoresenumeradoressubtipo inteiroEu focaria no último, porque os formadores são facilmente mapeáveis na linguagem C *. Penso em um conjunto fechado de valores, algo como o volume da música, ou seja, um intervalo que varia de 1 a 100. Gostaria de incrementá-lo ou diminuí-lo por um valor. Eu gostaria de ter um erro de compilação em caso de estouro de estática, algo como:
volume=rangeInt(0,100);
volume=101; // compile error!
volume=getIntFromInput(); // possible runtime exception
Obrigado.