Ada , Pascal и многие другие языки поддерживают диапазоны, способ подтипов целых чисел.
Диапазон - это целочисленное значение со знаком, которое варьируется от значения (первое) до другого (последнее).
Легко реализовать класс, который делает то же самое в ООП, но я думаю, что встроенная поддержка этой функции может позволить компилятору выполнять дополнительные статические проверки.
Я знаю, что статически невозможно проверить, что переменная, определенная в диапазоне, не будет «переполнена» во время выполнения, т. Е. Из-за неправильного ввода, но я думаю, что что-то можно сделать.
Я думаю о подходе Design by Contract (Eiffel) и Spec # ( C # Contracts ), которые дают более общее решение.
Есть ли более простое решение, которое проверяет, по крайней мере, статическое внешнее присваивание во время компиляции в C ++, C # и Java? Какой-то static-assert ?
edit : Я понимаю, что «диапазоны» могут использоваться для разных целей:
- итераторы
- счетчикам
- целочисленный подтип
Я бы сосредоточился на последнем, потому что формирователи легко сопоставимы на языке C *.
Я имею в виду закрытый набор значений, что-то вроде громкости музыки, то есть диапазон, который варьируется от 1 до 100. Я хотел бы увеличить или уменьшить его на значение. Я хотел бы иметь ошибку компиляции в случае статического переполнения, что-то вроде:
volume=rangeInt(0,100);
volume=101; // compile error!
volume=getIntFromInput(); // possible runtime exception
Спасибо.