强类型语言VS弱类型语言
在谈健壮性之前,先谈谈什么是强类型语言和弱类型语言。
首先,在大学接触的第一门语言就是C语言,毫无疑问,是一种强类型的语言。例如C++,JAVA,Go这些都是强类型的语言。而前端er的JavaScript是一门弱类型的语言。
那我们该怎么去做区分?
我最近也看了几篇相关的文章,简单的总结了一下。
以我新学的go语言为例:
package main
var b string = "runoob.com"
var c bool
func main(){
println(a, b, c)
}
我们在声明变量的同时还需要去注明变量的数据类型。
JS则不需要这么苦恼
let a = "我是chris"
let b = 123456
关于隐式转换
Go:
package main
var b string = "hellow"
var c string = "chirs"
var c = b + c
println(c) // hellowchirs
func main() {
var b string = "123"
var a int = 123
var c = a + b
fmt.Printf(c) //报错 mismatched types int and string
}
JS:
let a = 123
let b = "chris"
let c= a + b
console.log(c) //123chris
由于弱类型的存在,包含着一些动态变化,这样在大型项目中就会出现问题,主要是无法保证每个变量的数据类型都是预期的,所有有些人说的健壮性就从这点方面去说,例如JS的超集TyptScript,间接的把JS变成了强类型的语言,我定义什么数据类型,就返回什么数据类型,不符合预期就会报错。
关于健壮性的理解
类型安全性
上面的例子已经可以到,强类型语言每次赋值都要进行一次类型检测,严格要求数据类型,而弱类型的语言则并不需要去进行类型验证,可随意进行类型转换。
内存泄漏
前端er看到这个名词肯定第一个会想起来闭包这个名词,闭包内的变量不会被浏览器中被垃圾回收,主要原因是在内部不会被销毁,就一直存在内存中,会使程序崩溃,但是主要是IE问题。但强类型的语言自带有自动收集垃圾功能,防止了内存分配的错误。
错误处理
强类型语言会在类型错误的时候抛出一个错误,让我们进行错误排查更容易一些,只要类型出错就会有相应的错误抛出,但是弱类型并不能提供这种错误处理机制,也是弱类型程序员比较头疼的问题。
关于错误处理机制
try {
do someting
}catch{
do someting
}finally{
do someting
}
为了程序的健壮性,尽量使用一些错误处理机制来排查错误,之前并没有重视错误排查这个问题,自从学习TypeScript之后发现,越大的项目,需要进行的排查事项就越多。这也是很多公司都拥抱TS的原因吧。 虽然没有用上TS,但先理解一下大家用这些语言的场景对我来说也是受益匪浅的。
网友评论