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++模板的写法,比起等价的Ruby或Python写法要来的麻烦。更高度的运行时期构成物,如元类别(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

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

  1. 复杂、繁杂、庞杂:图解七种代码耦合类型

    欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析.实际应用.架构思维.职场分享.产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习 1 复杂.繁杂.庞杂 ...

  2. 开发语言的静态/动态,强类型/弱类型之分

    目录 概念定义 静态类型语言 优势 劣势 动态类型语言 优势 劣势 强类型语言 弱类型语言 如何选择 语言类型图 之前同事每次跟我提起他学习了某个语言,并介绍这个语言很棒时,开头都会跟我说这个语言是什 ...

  3. 语言有很多类型,你知道吗?【静态/动态编译语言、弱/强类型语言】

    静态/动态编译语言 C++:我天生就是静态的,int就是int,double就是double Python:int long string 统统都是一样的存 弱/强类型语言 C++:我非常温柔,int ...

  4. 计算机硬盘接口分类,硬盘接口几种常规的类型

    原标题:硬盘接口几种常规的类型 1.并行接口与串行接口. (1)并行接口. 指并行传输的接口,如有0~90个数字,使用10条传输线,每条线只需传输1位数字即可完成. 理论上,并行传输效率高,但由于线路 ...

  5. java程序错误类型及异常处理

    本文转载至:http://www.cnblogs.com/liaoliao/ 一.程序的错误类型 在程序设计中,无论规模是大是小,错误总是难免的.程序的设计很少有能够一次完成,没有错误的(不是指Hel ...

  6. html dom节点类型,浅谈Javascript中的12种DOM节点类型

    前言 DOM的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容).浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组 ...

  7. 「译文」你必须掌握的 7 种 JavaScript 错误类型

    能够快速地错误定位,解决问题,是我们开发中非常重要的一种能力. 从浏览器控制台到运行Node.js的计算机终端,我们到处都会看到错误. 这篇文章重点介绍了在JS开发过程中可能遇到的 7 种错误类型. ...

  8. 【程序设计】程序错误类型

    程序错误 如果程序在测试运行时遇到问题,我们必须调试,也就是说必须定位并排除错误,难度取决于错误的类型和程序员的调试技巧. 程序可能出现的两类基本错误类型是语法错误和逻辑错误. 语法错误 语法错误是指 ...

  9. C++七种序列容器类型

    七种序列容器 1,vector-向量 2,deque-双端队列 3,list-双向链表 4,forward_list-单链表(C++11) 5,queue-队列(适配器) ,6,priority_qu ...

最新文章

  1. 新人工智能算法速度无极限
  2. Oracle优化02-锁和阻塞
  3. jQuery判断checkbox是否选中的3种方法
  4. 循环——批量处理数据
  5. swift3 0 流控制
  6. LetCode-MSSQL从不订购的客户
  7. 【JVM】javap命令行分析(a++ + ++a)的虚拟机指令
  8. python能够处理图像的第三方库_基于图像预处理的几个库
  9. hzwap u.php_『THINKPHP』U 函数
  10. Github上托管项目
  11. VS2017 CUDA编程学习10:纹理内存
  12. android 参数签名 存放,SignatureView 一个在Android上的电子签名板,能保存所签名的图片...
  13. 27亿美元的NASA「毅力号」成功登陆火星!还带了一架1%大气密度也能飞的无人机...
  14. 双人贪吃蛇c语言,关于C 双人贪吃蛇显示的问题
  15. 玄幻:我!收徒就变强!(三)
  16. 实验报告怎么写之书写规范
  17. Android-悬浮窗功能的实现(附Java、KT实现源码,自学Android
  18. 什么是NVMe硬盘?
  19. 计算机配置xp系统,教你WinXP系统如何设置一台电脑两个显示器
  20. # 互动媒体期末作业——P5.js“画板”

热门文章

  1. JavaScript初级玩法(3)—兔子问题(斐波那契数列)
  2. 关于android架构的英文资料,第十五期:英语流利说 Android 架构演进
  3. 多模分频器原理及simulink建模仿真
  4. 梅西的命运才是真正的人生
  5. win10下idea的ctrl+shit+f和F8快捷键失效解决办法
  6. 软件开发公司的提成制度【修订中】
  7. 为什么亚马逊比淘宝火?淘宝转战亚马逊如何做到月销售额20万美金?
  8. 基于PHP的连锁酒店管理系统
  9. 前端小游戏页面性能优化
  10. encode decode