通常来说,根据数据类型可以将编程语言分为两类:
强类型语言
- 强类型语言(Strongly typed language)不仅强制要求事先声明变量,还要求声明每个变量的数据类型,这样编译器就能准确地知道这个变量中的值的类型。强类型语言在数据类型上要求很严格:必须事先说明变量中存放的数据的类型,而在程序的代码中不将其他类型的数据存放到变量中。若将某个变量声明为数字,那么编辑器就认为存放的是一个数字;若违反了这个规定 ,比如将日期存放在这个变量中,比那机器就会报错。
弱类型语言
- 在弱类型语言(loosely typed language)中,无需事先声明变量的数据类型。但存放在变量的数据类型依然是个需要注意的问题(不能要求计算机2 + banana),但弱数据类型不会在这个问题上斤斤计较。通常,在弱类型语言中都无法声明数据类型,而强类型语言则强制要求声明每个变量的数据类型
编译型语言
- 编译型语言通常都是强类型的,但也确实存在介于两者之间的语言。用编译型语言编写的代码预先由编译器处理,生成一个经过优化的二进制可执行文件————例如EXE文件。脚本语言事先不会被编译,而是在运行时编译。
编译型语言流程
- 在普通文本中编写代码
- 将代码编译成可执行文件
- 执行编译好的可执行文件
- 程序运行
脚本型语言
- 脚本语言通常都是弱类型的, 其中运行时引擎(runtime engine)会在运行时解释代码,而不是事先编译
脚本型语言流程
- 在普通文本中编写代码
- 执行脚本文件
- 脚本运行时引擎在程序运行时编译代码
- 程序运行
由于代码实在程序运行时才编译,所以编译器会检查变量存放的数据和操作合理的猜测其数据类型(2 + banana),进行隐式转换
因此准寻变量用途唯一原则,避免隐式转换
Dim strFirst,lngSecondstrFirst=CStr(50)
lngSecond=CLng(100)
result=strFirst+lngSecond
Msgbox result' 两个变量都是字符串子类型,会将进行字符串连接
' 其中有一个式数字子类型,隐式转换Str->double
' MsgBox将内容转为字符串输出,隐式转换double->str
' STDOUT标准输出函数的隐式转换后会恢复成原来的类型-->没有返回值
' 其中的字符串子类型不含有数字,相加会产生"Type Mismatch"错误.
#! /bin/bashstrFirst="50"
IntSecond=100
result=$[$strFirst + $IntSecond]
echo $result# echo将内容转为字符串输出,隐式转换double->str
# echo不会将$result解释成普通的字符串,格式化成变量后再解释隐式转换str