gpt4 book ai didi

theory - 强类型语言和弱类型语言的区别?

转载 作者:行者123 更新时间:2023-12-03 22:57:28 26 4
gpt4 key购买 nike

我已经阅读了几页,包括 wiki 页面 http://en.wikipedia.org/wiki/Strong_and_weak_typing处理强类型语言和弱类型语言。在大多数情况下,我想我理解其中的区别。但是,我想要一个直截了当的答案来区分两者。

据我了解,在弱类型语言中,不必显式调用数据类型。这将是一种类似于 Matlab 的语言,您可以在其中添加 4 和 2.3 而无需进行类型转换。强类型语言要求程序员为每个变量和/或值声明数据类型。例如,在 C 中,您需要执行类似 4 + (int) 2.3 或 (float)4 + 2.3 的操作(不记得这是否是有效的 C 类型转换)。

任何扩展或纠正我对这些概念的理解的信息将不胜感激。

最佳答案

区别不在于在变量上声明类型。它比这更微妙(和 Eric Lippert 的步伐,我认为这个术语的定义相当明确)。区别在于,在强类型语言中,每个表达式都有一个可以在编译时确定的类型 , 和 只允许适用于该类型的操作 .

在无类型(对批评者来说是“弱类型”,对粉丝来说是“动态类型”)语言中,情况并非如此。该语言允许对任何类型执行任何操作,但相当重要的条件是操作可能会失败。也就是说,虽然语言可能允许操作,但运行时可能不允许。

请注意,可以使用强类型语言而不需要到处进行类型声明。事实上,没有强类型语言可以。考虑一下Java:

String s = "hellO";
int l = s.getBytes().length;

编译器如何决定 .length那里合法吗?它是合法的,因为它被用于 byte[] .但是没有任何声明为 byte[]这里。相反,编译器知道 sString ,当您调用 getBytes() 时在 String , 你得到一个 byte[] .它从这些事实中推断出 s.getBytes() 的类型是 byte[] ,因此请求其 length 是合法的.

一些类型系统比 Java 更复杂的语言允许编译器推断更多。例如,在 Scala 中,您可以说:
val s = "hello"
val l = s.getBytes().length

并且编译器将推断 s 的类型和 l ,以及中间表达式。

具有强类型化但需要冗余类型声明的类型推断的人为限制的语言(如 Java)被描述为具有 list 类型,因为必须使类型 list 化,这是一种花哨的说法,即显式地存在,这是花哨的说法写下来。

关于theory - 强类型语言和弱类型语言的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com