是否有能力击败打字变量的目的?

时间:2008-10-07 22:37:25

标签: language-agnostic programming-languages strong-typing

所以,我假设我们输入了类型语言,因为我们犯了很多错误......所以输入是编译器为我们做了很多检查并帮助我们的一种方法(如果我的假设不正确,请告诉我。

但是,如果我们将类型转换为类型化语言,那么我们不会重新介绍我们在无法输入变量时遇到的大部分问题吗?

我也知道我的假设并不是我们输入变量的唯一原因。请分享我们输入语言的其他一些原因。

8 个答案:

答案 0 :(得分:13)

最重要的是,强类型可让编译器为您检查强制转换可让您在必要时覆盖强类型。

答案 1 :(得分:3)

我会说“大多数没有。”

如果你必须进行显式转换,你仍然可以避免动态类型引入的大多数问题。您的方法仍然需要存在于新类中。对象仍然需要彼此具有一些层次关系。

能够将XmlTextReader强制转换为TextReader并且能够在运行时决定读者有一个名为“read”的成员并且可能是一个布尔值或者可能是一个方法之间存在着天壤之别。

答案 2 :(得分:2)

  

因此打字是一种方法   编译器为我们做了很多检查   帮助我们一点

  

然而,如果我们介绍铸造到   键入的语言,我们不重新介绍   我们遇到的大多数问题都没有   能够输入变量吗?

你应该尽可能地避免它,但有时你仍然需要做肮脏的工作。

当然,有很多语言不会强制执行严格的输入,而且有很多人喜欢这些语言并且完成了有用的工作。

答案 3 :(得分:1)

是的,强类型允许编译器为您做很多检查。

不,允许施法不会阻止它有用。关键是,在你需要进行演员表演的罕见场合,它是明确的。程序员必须决定进行演员表并且可以小心。 Casting是一个很有用的工具,就像许多强大的工具一样,它应该小心使用。

答案 4 :(得分:1)

至少在Java中,不是真的。您只能投射到您期望的班级的孩子。因此,如果您的类返回RuntimeException,则无法将其强制转换为String,并且您不需要将其强制转换为Exception(它是父级)。

你只需要说它你知道这实际上是RuntimeException的子/实现,你需要访问孩子知道RuntimeException不知道的东西。

也就是说,过多的铸造是一种糟糕的OO气味。您应该几乎完全通过父母公开的方法访问孩子的唯一代码 - 如果您发现自己投了很多,也许您忘记了这条规则。

答案 5 :(得分:0)

当你施放时,你明确地要求编译器放松其强大的输入。这允许您在99%的情况下进行编译时检查,但在绝对必要时仍然会混合类型。

无论如何,编译器有可能在编译时找到“坏”转换 - 那些没有机会成功的转换。

所以说启用投射否定强类型的好处是错误的。这可以说是过度使用,但

答案 6 :(得分:0)

键入还允许Visual Studios Intellisense等工具工作,这对提高工作效率非常有帮助。

但除此之外,Mike B是对的。有时你只需要做一些脏事,比如将接口扩展到类,或者长到int。

答案 7 :(得分:0)

  

但是,如果我们将类型转换为类型化语言,那么我们不会重新介绍我们在无法输入变量时遇到的大部分问题吗?

我没有看到指定的语言,但应该指出在铸造方面存在不同程度。

例如,C ++有一个dynamic_cast,如果一个对象无法通过其继承关系派生到另一个对象,它将返回NULL。

const_cast将抛弃对象的常量。这对于将const对象传递给未声明为const的方法非常有用,但您知道不会更改该对象。