强弱类型

强类型(strong type)

强类型的编程语言在编译期间会有更严格的类型限制,即编译器会在编译期间发现变量赋值,返回值,和函数调用时的类型错误。

弱类型(weak type)

弱类型的编程语言在出现类型错误时可能会在运行时进行隐式的类型转换,可能会造成运行错误。

强类型 Java C# Go
弱类型 JS Ruby PHP
  1. 强弱类型的的定义并不严格,作为一种抽象的定义,更多时候是为了方便沟通和分类。比如类型转换是显式还是隐式,编译器能否推断变量类型。

静态类型与动态类型

静态类型检查

基于源代码的分析来确定运行程序类型安全的过程。代码能够通过此种检查,则当前程序在一定程度上能够保障类型安全的要求,而且可以减少程序在运行时的类型检查,可以看做是一种代码优化的方式。

它能够帮助开发者在编译期间发现程序中出现的类型错误,一些动态编程语言社区提供工具为其加入静态类型检查。在重构时有助于节省大量时间并避免遗漏。

动态类型检查

是在运行时确定程序安全的过程,需要编程语言在编译时为所有对象加上类型标签等信息,运行时可以通过这些存储的类型信息实现动态分发,向下转型,反射,以及其他特性。能够为工程师提供更多的操作空间,能够在运行时获得一些类型相关的上下文,并根据对象的类型完成一些动态操作。

编程语言如:JS,Ruby,PHP,虽然这些语言使用上非常灵活,但也提高了对工程师的要求。

两种检查方式并不是完全对立的,很多编程语言同时使用两种方式。