编程语言静态/动态类型,强/弱定义分类以及七种程序错误类型

本文探讨了编程语言的静态与动态类型、强弱定义,以及七种常见的程序错误类型,包括语法错误、逻辑错误、编译错误、运行时错误、算法错误、资源错误和界面错误。理解这些概念有助于提升编程效率和代码质量。

Dikstra说过:如果debugging是移除bug的过程,那打代码一定是把bug们放进去的过程。

 

编程语言如果按照类型检查分类可以分为两种static typing静态类型 和 dynamic typing动态类型

其中Java,C/C++,C#,Golang等为静态。动态类型有Python,Ruby,PHP,JavaScript,VBScript等

 

按照强弱定义(Explicit type conversion/Implicit type conversion)分类的话,强定义类型是C/C++,Java,C#,Python,.弱定义有PHP,ASP,Ruby,ABAP,SQL,JaaScript,Unix Shell

 

 

动态类型语言就是运行时才做数据类型检查,永远不用给任何变量制定数据类型。该语言会在第一次赋值给变量时,在内部将数据类型记下。

静态类型语言就是在编译期就做检查数据类型的语言。要在写程序的时候生命所有的数据变量,是固定的。

程序都有需要进行对错误的检查。

 

强弱定义即是否类型安全。强定义类型定义语言是强制数据类型定义的语言。一旦一个变量被指定了某个数据类型,如果不经过强制转换,那它永远都是这个数据类型。

弱定义类型定义语言则是数据类型可以被忽视。

 

静态类型在编译时期时,就能可靠地发现类型错误。因此通常能增进最终程序的可靠性。静态类型通常可以编译出速度较快的代码。当编译器清楚知道所要使用的资料类型,就可以产生最优化过后的机器代码。

 

静态类型允许构造函数库,它们的用户不太可能意外的误用。这可作为传达库开发者意图的额外机制。

 

动态类型允许编译器和解译器更快速的运作。因为源代码在动态类型语言中,变更为减少进行检查,并减少解析代码。这也可减少编辑-编译-测试-调试的周期。

 

动态类型允许建构一些静态类型系统所做不出来的东西。例如,eval函数,它使得运行任意资料作为代码成为可能(不过其代码的类型仍是静态的)。此外,动态类型容纳过渡代码和原型设计,如允许使用字符串代替数据结构。静态类型语言最近的增强(如Haskell 一般化代数资料类型)允许eval函数以类型安全的方式撰写。

 

动态类型使元编程更为强大,且更易于使用。例如C++模板的写法,比起等价的RubyPython写法要来的麻烦。更高度的运行时期构成物,如元类别(metaclass)和内观(Introspection),对静态类型语言而言通常更为困难。

 

 

七种主要的程序错误有:

1.语法错误 (syntax Errors)

这是机器无法忽视的错误.比如说print(‘Hello World’),你用逗号代替分号。这样会使程序停止运行。大多数文本编译器和IDE都可以在编写的时候提醒你。

2.逻辑错误(Logic Errors)

也许是最难追踪的,一切看着都正常,只是你写了一个错误的程序不是你想要的那个。

一个例子就是1999年,美国宇航局的一次航天失败,只是因为英制美制的单位不同。

这是为什么我们需要编写测试,展示测试,已确认编写的逻辑是正确的。

3.编译错误(Compliation Errors)

有些程序需要编译,(C/C++都是编译性语言,Java,C#属于解释型语言),当便一起不知道如何将代码转换为计算机可以理解的低级语言时,就会产生编译错误。

4.运行时错误(Runtime Errors)

用户在执行程序时发生的错误。也许在自己的机子上可以运行,放到web服务器就不行。可能是因为不同配置或者以一种导致运行时错误的方式进行交互。

所以确保有良好的错误报告,来捕获任何运行时的错误。从每个错误报告中学习来防范这种类型的错误。

使用框架和社区维护的代码可以最小化这些类型错误。

5.算法错误(Arithmetic Errors)

这是一种涉及数学的逻辑错误。如同你不能用5/0一样。

所以函数测试时总是包括0或者负数这种边缘情况是一种好方法。

6.资源错误(Resource Errors)

程序所在的计算机会给其分配固定数量的资源,如果代码中某些内容迫使它尝试分配更多资源时,就会导致资源错误。比如一个无法退出的循环。

所以负载测试也是很重要的。

7.界面错误(User Interface Error)

当程序使用的意图和实际使用方式不同是,可能会发生接口错误。比如API要求设置特定的参数,但你么有设置。

所以需要有清晰的文档并捕获这些错误。

 

ps:Errors Are Inevitable! 错误不可避免!

 

软件工程是困难的,需求是模糊的,代码是变化的。有错误不要beat  ourselves!

我们不是完美的,尽早发现编程错误!

 

Reference:

1.https://textexpander.com/blog/the-7-most-common-types-of-errors-in-programming-and-how-to-avoid-them/

2.https://www.jianshu.com/p/336f19772046

3.https://www.coursera.org/lecture/programming-languages-part-b/what-is-static-checking-H25ra

4.https://zh.wikipedia.org/wiki/%E9%A1%9E%E5%9E%8B%E7%B3%BB%E7%B5%B1#%E5%AF%A6%E8%B8%90%E4%B8%AD%E7%9A%84%E9%9D%9C%E6%85%8B%E5%92%8C%E5%8B%95%E6%85%8B%E5%9E%8B%E5%88%A5%E6%AA%A2%E6%9F%A5

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值