什么是严格打字的语言?

时间:2009-04-30 02:43:41

标签: programming-languages

什么是严格打字的语言?

5 个答案:

答案 0 :(得分:16)

严格类型的语言强制对与之交互的所有数据进行输入。

例如

int i = 3
string s = "4"

从现在开始,无论何时使用i,您都只能以整数类型与它进行交互。这意味着您只能使用使用整数的方法。

对于字符串s,您只能以字符串类型与其进行交互。您可以将其与其他字符串连接,打印出来等等。但是,即使它包含该字符“4”,也不能在不使用某些函数将字符串转换为整数类型的情况下添加整数。

在动态类型语言中,您具有更大的灵活性:

i = 3
s = "4"

推断出类型;意味着它们是根据它们设置的数据确定的。我是一个数字类型,s是一个字符串类型,基于它们的设置方式。但是当你有i + s时;使用类型推断,根据您的环境,您可能得到结果i + s = 7;因为s被编程环境隐式转换为int。但是,此操作也可能导致字符串“34”,如果环境推断int +字符串应该等于连接操作与添加操作。

这种灵活性使得松散类型的语言非常受欢迎。但是,因为这些类型的推断有时会产生意想不到的结果;如果你不小心,它们也会导致代码中出现更多错误。在一种打字语言中,如果我执行i + s,编译器强制我首先将s更改为int,所以我知道通过将i添加到s,我将获得7因为我被迫将s转换为显式int第一。在动态语言中,它会尝试隐式地为您执行此操作,但结果可能不是您所期望的,因为任何内容都可以在i或s中;一个字符串,一个数字,甚至一个对象。在运行代码并看到会发生什么之前,您不知道。

答案 1 :(得分:3)

必须声明变量以包含特定类型数据的语言。

如果你的变量声明如下:

String myString = "Fred";

然后您的语言被严格键入,变量“myString”被显式声明为仅包含字符串数据。

如果以下工作:

x = 10;
x = "Fred";

然后它被松散地键入(同一变量和范围中的两种不同类型的数据)。

答案 2 :(得分:3)

关于 各种类型系统强弱的观点存在不同意见,但我一般都听说“严格打字的编程语言”意味着非常 {{3} }。这通常描述了几种函数式语言中的静态类型系统。

答案 3 :(得分:3)

我试图查找“严格打字”,但无法找到该术语的明确定义。也许它指的是强类型语言?

Strong typing指的是type system,其中对可以执行两个不同类型的变量的操作有限制。例如,在强类型语言中,尝试添加stringnumber可能会导致错误。

string s;
number n;
s + n;          <-- Type error.

错误可能发生在statically typed languages的编译时或dynamically typed languages的运行时。应该注意的是,静态/动态和强/弱可能听起来像是类似的概念,它们是完全不同的。

类型性较弱的语言可能允许转换变量以允许来自不同类型的变量之间的操作:

s + (string)n;  <-- Allowed, as (number) has been explicitly
                    casted to (string), so variable types match.

在弱类型语言中,不同类型的变量可能会自动转换为兼容类型。

s + n;          <-- Allowed, where the language will cast
                    the (number) to (string)

也许,“严格类型语言”指的是一种非常强类型的语言,其中对于如何对不同类型的变量执行操作存在更多严格限制。

答案 4 :(得分:0)

'1' + 3非法的语言,因为它将字符串添加到整数。