什么是严格打字的语言?

9 programming-languages

什么是严格打字的语言?

Fra*_*rio 16

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

例如

int i = 3
string s = "4"
Run Code Online (Sandbox Code Playgroud)

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

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

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

i = 3
s = "4"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这个答案混淆了几个概念:强/弱类型与静态/动态类型;带有隐式类型转换的类型推断。coobird给出了更明确的答案。 (2认同)

coo*_*ird 7

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

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

string s;
number n;
s + n;          <-- Type error.
Run Code Online (Sandbox Code Playgroud)

该错误可能发生在静态类型语言的编译时或动态类型语言的运行时。需要注意的是,静态/动态和强/弱听起来可能是相似的概念,但它们却大不相同。

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

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

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

s + n;          <-- Allowed, where the language will cast
                    the (number) to (string)
Run Code Online (Sandbox Code Playgroud)

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


eph*_*ent 5

关于各种类型系统的强弱程度存在不同意见,但我通常听到的“严格类型编程语言”是指一种非常 强类型的编程语言。这通常描述了几种函数式语言中的静态类型系统。


has*_*sen 0

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