Coding语言强弱类型的判定
2016-09-24 21:37
316 查看
Coding语言强弱类型的判定
前几天和师父(Coding大神)讨论了一下怎么判定语言的强弱类型,在这里总结一下:强类型:
强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了.比如:如果你定义了一个整形变量a,那么程序根本不可能将a当作字符串类型处理.
强类型定义语言是类型安全的语言 .
弱类型:
数据类型可以被忽略的语言。它与强类型定义语言相反,一个变量可以赋予不同数据类型的值.
看了前面的文字叙述,感觉自己都是蒙的,这时候听了大神的解释才明白过来:
while (n) { }
上面的表达式是While条件语句,在C中只要n 不等于0||false 的话都会执行,所以n不一定要等于1||true就可以满足条件,所以C为弱类型语言,依次去类推可以得到其他的语言特点,一语点醒梦中人啊。
补充: 判断强弱类型语言
先来定义一些概念
Program Errors
trapped errors。导致程序终止执行,如除0,Java中的数组越界访问。
untrapped errors。出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出,Jump到错误地址。
Forbidden Behaviours:
语言设计时,可以定义一组
forbidden behaviours。它必须包括所有
untrapped errors, 但可能包含
trapped errors。
Well behaved, ill behaved :
Well behaved: 如果程序执行不可能出现
forbidden behaviours, 则为
well behaved。
ill behaved: 否则为
ill behaved。
有了上面的概念,再讨论强,弱类型,静态,动态 类型。
强、弱类型:
强类型
strongly typed: 如果一种语言的所有程序都是
well behaved——既不可能出现
forbidden behaviors, 则该语言为
strongly typed。
弱类型
weakly typed: 上面强类型(
strongly typed)否则为弱类型
weakly typed。比如C语言的缓冲区溢出, 属于
trapped errors, 即属于
forbidden behaviors。故C语言是弱类型。
前面的人也说了,弱类型语言, 类型检查更不严格。如偏向于容忍隐式类型转换。臂如说C语言的int可以变成double。这样的结果是:容易产生
forbidden behaviours, 所以属于弱类型语言。
动态、静态类型:
静态类型
statically: 如果在编译时拒绝
ill behaved程序,则是
statically typed。
动态语言
dynamiclly: 如果在运行时拒绝
ill behaviors, 则是
dynamiclly typed。
误区 :
大家一般都会认为C语言需要编写
int a, int b之类的, Python语言不用写(可以直接写a, b), 所以C语言是静态的语言, Python 是动态的语言。这样理解是非常不准确的。比如Ocaml是静态类型的,但是也可以不明确的写出来。Ocaml是静态类型隐式。
静态类型可以分为两种:
如果类型是语言语法的一部分, 是
explicitly typed显示类型;
如果类型通过编译时推导,是
implicity typed隐式类型, 比如ML和Haskell。
下面是些例子
无类型: 汇编;
弱类型、静态类型 : C/C++;
弱类型、动态类型检查: Perl/PHP;
强类型、静态类型检查 :Java/C#;
强类型、动态类型检查 :Python, Scheme;
静态显式类型 :Java/C;
静态隐式类型 :Ocaml, Haskell。
JackDan9 Thinking
相关文章推荐
- Coding语言强弱类型且动静态类型简单解析。附图解
- 什么是语言类型的强弱?
- 2014 0416 word清楚项目黑点 输入矩阵 普通继承和虚继承 函数指针实现多态 强弱类型语言
- 关于强弱,静动语言类型的思考
- 强弱类型,动态静态语言比较(JAVA,C,C++,Python,Ruby,PHP,Perl)
- 静动态类型语言、强弱类型
- 静态动态强弱类型语言
- 关于强弱,静动语言类型的思考
- 关于语言的动态静态类型,强弱类型(c,c++,java,php等)
- D语言中的类型
- 将字符串型转换成datetime类型,字符串可以为各国语言
- java语言操作Oracle数据库中的CLOB数据类型
- C# 3.0语言新特性(语言规范):5 匿名类型
- C# 3.0语言新特性(语言规范):6 具有隐式类型的数组
- delphi学习笔记(1)-object pascal语言的数据类型
- C# 3.0语言新特性(语言规范):6 具有隐式类型的数组
- C++ Coding Standards:类型安全
- 语言内实例表示机制 类型信息隐藏 MOF自描述
- 高智高蠕虫病毒 可自动调整语言类型
- [译]Visual Basic 2005在语言上的增强(九)部分类型