Ada、Pascal和许多其他语言支持范围,这是一种对整数进行子类型化的方法。范围是一个有符号整数值,范围从一个值(第一个)到另一个值(最后一个)。在 OOP 中实现相同功能的类很容易,但我认为原生支持该功能可以让编译器进行额外的静态检查。
我知道不可能静态验证范围内定义的变量不会“溢出”运行时,即由于输入错误,但我认为可以做些什么。我考虑了按合同设计的方法 (Eiffel) 和 Spec# ( C# Contracts ),它们提供了更通用的解决方案。
是否有一个更简单的解决方案,至少在 C++、C# 和 Java 的编译时检查静态越界赋值?某种静态断言?
编辑:我知道“范围”可以用于不同的目的:
- 迭代器
- 枚举器
- 整数子类型
我会关注后者,因为前者很容易映射到 C* 语言上。我考虑一组封闭的值,比如音乐音量,即从 1 到 100 的范围。我想增加或减少一个值。我想在静态溢出的情况下出现编译错误,例如:
volume=rangeInt(0,100);
volume=101; // compile error!
volume=getIntFromInput(); // possible runtime exception
谢谢。