美文网首页
对程序健壮性的简单理解

对程序健壮性的简单理解

作者: Chris__Liu | 来源:发表于2019-01-31 15:15 被阅读0次

    强类型语言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,但先理解一下大家用这些语言的场景对我来说也是受益匪浅的。

    相关文章

      网友评论

          本文标题:对程序健壮性的简单理解

          本文链接:https://www.haomeiwen.com/subject/wjeqsqtx.html