首先,这些单词是什么-静态-动态-强-弱类型语言?
这是对编程语言进行分类的方法:
- 静态类型与动态类型的编程语言
- 强类型与弱类型编程语言。
我们将理解这些术语的含义,因此您不必在下一次火焰战争中查找它们。
因此,让我们直接进入:
![](https://i-blog.csdnimg.cn/blog_migrate/0d7ed28630a33e162e87e642f1269587.png)
类型检查
这是验证和强制类型约束的过程。 通常由编译器或解释器在编译或运行时执行。 例如,您不能将字符串除以浮点数(如果可以,请不要这样做)。
用简单的术语来说,类型检查只是查看变量及其类型,然后说这个表达式有意义。
因此,现在我们知道什么是类型检查,理解这些术语真的很简单。
在静态类型语言中,类型检查在编译时进行。 而在动态类型语言中 ,类型检查在运行时进行。
这对您意味着什么?
类型声明
静态的:必须明确声明所有变量类型,因为在编译时需要此信息。
例如在Java中float f = 0.5;
动态:不需要显式声明,因为类型是在运行时分配给变量的。
例如在Python中f = 0.5
性能
静态的:在编译时进行更多处理,但可以提供更好的运行时性能。
动态的:效率更高的编译器/解释器,但是在运行时进行类型检查会影响性能。
灵活性和错误
静态的:不太容易发生运行时错误,但为程序员提供的灵活性较小。
动态:提供更大的灵活性,但更容易出现运行时错误。
记住它
记住静态类型和动态类型语言的一种快速技巧是用它们的全名来称呼它们
==>静态类型检查的语言。
==>动态类型检查的语言。
![](https://i-blog.csdnimg.cn/blog_migrate/0c210169c127589f86a6b66d8d431eaa.png)
语言云。 礼貌: Mayank Bhatnagar 。
但是什么是强类型和弱类型语言?
这是一个频谱*(底部免责声明)。 因此,我们将继续学习常用术语。
在强类型语言中,一旦在运行时或编译时将类型分配给变量(例如,变量),它将保留该类型,并且无法轻松地将其与其他类型的表达式混合。
例如在Python中
data = “string1” //Type assigned as str at runtime
data = 5 //Type assigned as int at runtime
data = data + “string2” //Type-error str and int can't be concatenated
而在弱类型语言中 ,一旦在运行时或编译时将类型分配给变量,例如,就可以轻松地将其与其他类型的表达式混合在一起。
例如在Javascript中
$data = “string1” //Type assigned as str at runtime
$data = 5 //Type assigned as int at runtime
$data = $data+“string2” //str and int get concatenated
结论
类型检查可确保正确的变量类型是表达式的一部分。 在静态类型检查的语言中,类型检查在编译时进行,而在动态类型检查的语言中,类型检查在运行时进行。
强类型语言具有更强的类型检查并强制执行分配的类型(在编译或运行时),而弱类型语言具有较弱的类型检查,并允许各种不同类型之间的表达式。
(好玩吗?)免责声明
如果你进入细节问题,并尝试找到正确的答案,你会回来搞乱了 (正好!)。
事实证明,整个行业都没有对这些术语的正式划分 。 这是一个频谱。
但是这些术语仍然很多。 所以,我去挖了。 Java语言规范将Java称为强类型语言。
但是C编程语言第一版没有使用这样的术语。
参考文献
- medium.com/p/magic-lies-here-statically-typed-vs-dynamicly-typed语言
- docs.oracle.com/javase/specs/jls/se8/jls8.pdf
- archive.org/details/TheCProgrammingLanguageFirstEdition/page/n7
- stackoverflow.com/a/430414/4693983
- stackoverflow.com/a/1520342/4693983
- blogs.msdn.microsoft.com/alfredth/2012/02/17/how-to-start-a-computer-science-flame-war/
- merriam-webster.com/dictionary/discombobulate
- medium.com/@haydnjmorris/page-2-dynamically-typed-vs-static-typed-languages-e507ac463496
-
在Twitter,Facebook,Linkedin,Quora,Github,Medium,Gmail @ jarpit96上找到我