标签: spec#

为什么Java,C#和C++没有范围?

Ada,Pascal和许多其他语言支持范围,一种子类型整数的方法.范围是有符号整数值,其范围从值(第一个)到另一个(最后一个).实现一个在OOP中执行相同操作的类很容易,但我认为本机支持该功能可以让编译器进行额外的静态检查.

我知道静态验证在一个范围内定义的变量不会"溢出"运行时,即由于输入错误,我无法进行验证,但我认为可以做一些事情.我想到了契约设计方法(Eiffel)和Spec#(C#Contracts),它们提供了更为通用的解决方案.

是否有一个更简单的解决方案,至少在编译时检查C++,C#和Java中的静态越界赋值?某种静态断言

编辑:我知道"范围"可以用于不同的目的:

  1. 迭代器
  2. 统计员
  3. 整数子类型

我会专注于后者,因为前者很容易在C*语言上映射.我考虑一组封闭的值,比如音乐音量,即从1到100的范围.我想用一个值递增或递减.我希望在静态溢出的情况下出现编译错误,例如:

volume=rangeInt(0,100);
volume=101;  // compile error!
volume=getIntFromInput(); // possible runtime exception
Run Code Online (Sandbox Code Playgroud)

谢谢.

c# c++ java typing spec#

10
推荐指数
1
解决办法
2667
查看次数

Spec#足够稳定吗?

这里有人经常使用Spec#吗?在我开始使用它之前,我想知道它是否足够稳定和强大.看起来语法正在影响c#4.0,这有望在4.0发布后更容易升级.思考?

design-by-contract spec# c#-4.0

6
推荐指数
1
解决办法
488
查看次数

不可为空的对象有什么问题?

我最近一直在看DbC和Spec#似乎支持非可空对象.不幸的是,Spec#似乎已被抛弃.

  1. Spec#似乎内置了许多不错的语言功能,为什么它被抛弃了?
  2. 默认情况下让所有对象都不可为空可能有任何问题所以你必须写int?,string?甚至MailMessage?如果你真的想要一个可以为空的对象?
  3. 我在这里看到类似的Sql类比,你可以将类属性检查为可空或不可空.您是否可以使用sql表列对属性进行约束?

我没有看到在语言中内置这样的功能的问题.有人能开导我吗?

design-by-contract spec# non-nullable

3
推荐指数
1
解决办法
471
查看次数

标签 统计

spec# ×3

design-by-contract ×2

c# ×1

c#-4.0 ×1

c++ ×1

java ×1

non-nullable ×1

typing ×1