强类型语言的关键方面是什么?

Chr*_*ton 17 strong-typing

什么使语言强烈输入?我正在寻找强类型语言最重要的方面.

昨天我问PowerShell是否是强类型的,但是没有人能就"强类型"的定义达成一致,所以我想澄清这个定义.

随意链接到维基百科或其他来源,但不要只剪切和粘贴您的答案.

Jör*_*tag 26

"强类型"一词没有达成一致的定义.

它在火焰战中成为一个"伟大"的论点,因为每当有人被证明是错误的时候,他们就可以重新定义它以表达他们想要的意思.除此之外,该术语没有任何实际意义.

最好不要使用该术语,或者,如果您使用该术语,则首先严格定义它.如果您看到其他人使用它,请让他定义该术语.

每个人都有自己的定义.我见过的一些是:

  • 强类型=静态类型
  • strong typed =显式键入
  • 强类型=名义上键入
  • 强类型=键入
  • strong typed =没有隐式类型转换,只有显式
  • strong typed =根本没有类型转换
  • 强类型=我理解/弱类型=我不明白的东西
  • strong typed = C++/weakly typed =其他一切
  • strong typed = Java/weakly typed =其他一切
  • strong typed = .NET/weakly typed =其他一切
  • strong typed = 我的编程语言/弱类型= 您的编程语言

在类型理论中,存在一种类型系统比另一种更强的概念.特别是,如果存在一个表达式e1,使得它是由一种类型的系统接受T1,而是由一个类型系统拒绝T2,然后T2被认为是T1.这里有两件重要的事情需要注意:

  1. 这是一种比较,而不是绝对的:没有强者弱者,只有强者弱者
  2. 该术语没有隐含的价值; 更强并不意味着更好


e-s*_*tis 11

根据BC Pierce的说法,他写了"类型和编程语言以及高级类型和编程语言":

我花了几个星期的时间试图理清"强类型","静态类型","安全"等术语,并发现它非常困难......这些术语的用法是多种多样的无用.

所以难怪为什么你的同事不同意.

我会用最简单的答案:如果你可以连接一个字符串和一个int而不进行强制转换,那么它就不是强类型的.

编辑:正如评论中所述,Java就是这样:-(


Mik*_*eck 7

关键是要记住静态类型和强类型之间的区别.强类型语言只是意味着一旦被赋值,给定变量将始终表现为某种类型,直到重新分配为止.根据定义,像Java和C#这样的静态类型语言是强类型的,但许多流行的动态语言如Ruby和Python也是如此.

所以用强类型语言

x = "5"
Run Code Online (Sandbox Code Playgroud)

x将始终是一个字符串,永远不会是一个整数.

在某些弱类型语言中,你可以做类似的事情

x = "5"
y = x + 3
// y is now 8
Run Code Online (Sandbox Code Playgroud)

  • C可以说是静态的,弱类型的.这很奇怪,但可能. (4认同)

Mat*_*ttC 6

人们混淆静态输入强类型.静态类型表示"字符串是字符串是字符串".强类型意味着"一旦你将它作为一个字符串,它将被视为一个字符串,直到它被重新分配为不同的东西."

编辑:我看到其他人确实指出了这一点:)


Han*_*son 1

强类型意味着您声明某种类型的变量,如果您尝试将该变量转换为另一种类型而不进行强制转换,则编译器会发出嘶嘶声。

示例(请注意,java):

int i = 4;
char s = i; // Type mismatch: cannot convert from int to char
Run Code Online (Sandbox Code Playgroud)

  • 这是错误的。无论是否声明类型与强类型无关,这是显式类型与隐式类型的问题。此外,编译器或运行时是否捕获类型错误是静态类型与动态类型的问题,并且与强类型无关。 (3认同)