Почему у Java, C # и C ++ нет диапазонов? - PullRequest
9 голосов
/ 29 января 2009

Ada , Pascal и многие другие языки поддерживают диапазоны, способ подтипов целых чисел. Диапазон - это целочисленное значение со знаком, которое варьируется от значения (первое) до другого (последнее). Легко реализовать класс, который делает то же самое в ООП, но я думаю, что встроенная поддержка этой функции может позволить компилятору выполнять дополнительные статические проверки.

Я знаю, что статически невозможно проверить, что переменная, определенная в диапазоне, не будет «переполнена» во время выполнения, т. Е. Из-за неправильного ввода, но я думаю, что что-то можно сделать. Я думаю о подходе Design by Contract (Eiffel) и Spec # ( C # Contracts ), которые дают более общее решение.

Есть ли более простое решение, которое проверяет, по крайней мере, статическое внешнее присваивание во время компиляции в C ++, C # и Java? Какой-то static-assert ?

edit : Я понимаю, что «диапазоны» могут использоваться для разных целей:

  1. итераторы
  2. счетчикам
  3. целочисленный подтип

Я бы сосредоточился на последнем, потому что формирователи легко сопоставимы на языке C *. Я имею в виду закрытый набор значений, что-то вроде громкости музыки, то есть диапазон, который варьируется от 1 до 100. Я хотел бы увеличить или уменьшить его на значение. Я хотел бы иметь ошибку компиляции в случае статического переполнения, что-то вроде:

volume=rangeInt(0,100);
volume=101;  // compile error!
volume=getIntFromInput(); // possible runtime exception

Спасибо.

Ответы [ 11 ]

0 голосов
/ 30 января 2009

JSR-305 обеспечивает некоторую поддержку диапазонов, но я не знаю, когда это будет частью Java.

...