2012-07-11 88 views
5

我正在学习电梯。当我读到有关模板,我明白,他们有很多的事情不是在编译时typechecked:电梯和类型安全

  • 模板可能包含
  • SiteMaps的可能是指
  • 不存在的页面不存在的片段引用
  • 片段调度方法采取字符串参数,我们可以很容易地发现错字

是否有替代品,使这个问题不太严重,即外部代码检查或选择在图书馆,这将允许做相同的,但在类型安全的方式?或者可能存在另一个更严格的网络框架(可能是其他语言)。

+0

我相信对于大多数这样的情况,编写基于正则表达式的验证器可能很容易。但是,虽然没有这样的事情,你可以尝试测试你的代码 - 正确的测试应该能够捕获所有这些错误。 – Rogach 2012-07-11 14:37:19

回答

1

类型检查是强类型语言(如Scala或Java)的编译时功能,允许验证签名和类型之间的关系。当期望一个类型为Meat的参数或者将一个String赋值给一个Int类型的变量时,这些检查将阻止您传递一个类型为Banana的参数。通常,在动态语言(如Ruby或Javascript)中,这是不可能的

你在找什么不是一个类型检查器。你不想验证你的程序在语法上是正确的,而是说它的行为是正确的,并且解决方案称为自动化测试。

你完全可以写代码在语法上是正确的,但行为错误:

public boolean isTrue(boolean value){ 
     return !value; 
} 

如果你认为它周围的其他方式,你会如何测试一个编译时模板的正确性,其需要填写一些数据?

<!-- importing a snippet depending on the value of a variable --> 
<import src="${snippetName}.xml"/> 

你不能,因为编译时你所有的变量都没有任何价值。这就是为什么自动化测试非常重要,编写测试用例为您的应用程序不能被编译时检查替代。

+2

对我来说,类型检查是关于在编译时发现错误的。理论上可以检查许多未经升降检查的东西。 – 2012-07-11 14:31:32

+0

Typechecking在这里描述:http://en.wikipedia.org/wiki/Type_system。您所指的是静态代码分析,正如您所说的那样,它可能会将某些运行时错误转化为编译时错误。然而,编写一个静态代码分析器并不难,尝试一下... – Edmondo1984 2012-07-11 14:36:45

+2

类型检查是一种轻量级的静态分析形式。康斯坦丁想要的是非常可行的。 – 2012-07-11 22:53:55