美文网首页
动静、强弱变量类型

动静、强弱变量类型

作者: 迷路的丸子 | 来源:发表于2018-08-24 16:47 被阅读0次

静态类型vs动态类型

静态类型

  • 静态类型是指在编译时就能确定变量类型的类型
    例如,C++语言中定义变量:
int a = 5;
float b = 5.5;
double pi = 3.1415926;
char c[] = "Hello";
string d("World");

以上变量都在编译时决定了类型,类型的定义本身就决定了变量本身可操作的集合,因此代码在编译过程中就可以较早地发现类型错误。

  • 优点:能在编译时发现类型错误,在代码发布运行之前找到问题并提前解决
  • 缺点:静态类型必须在声明中表达出来,编译器无法智能识别类型

动态类型

  • 动态类型是指在运行时才能确定一个变量类型的类型

例如,JavaScript语言中的语句:

var name = student.getName();

这行代码只有在被执行的时候才知道 name 是字符串类型的,甚至是 null 或 undefined 类型;同时也没办法进行类型推导,因为 student.getName() 函数签名根本不包含返回值类型信息。

  • 优点:设限较少,节约编程的时间成本,代码本身具有一定的灵活性
  • 缺点:牺牲一定的可靠性,运行时可能会出现的错误概率较大,同时系统需要对变量类型进行识别,会耗费额外的时间

总结

通常情况下,建议把可能遇到的问题提前预防并解决,能使用静态类型就尽量使用静态类型,可以在编译时马上发现问题并解决,这不仅能减少运行时的工作量和降低错误出现的可能性,个人认为这也是良好的编程习惯。但并非就认为动态类型完全不可取,某些未知的环境下,动态类型的使用也是难以避免的。因此,静态类型和动态类型各有利弊,需做一定的权衡。

强类型vs弱类型

强类型

  • 强类型的一个类型对象只有一种解释方式,不允许隐式转换
"1"+2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

上述例子中,"1"为字符串类型str,2为整型int,表达式中的运算不允许隐式类型转换,出现forbidden behavior,该语言是强类型语言。

  • 优点:类型固定、安全,内存大小固定,而且可以连续分配,方便管理,逻辑严谨
  • 缺点:速度上可能略逊色于弱类型定义语言,编程时在类型中投入的精力增加

弱类型

  • 弱类型的一个类型对象可以被解释成不同的类型,允许隐式转换
"1"+2
'12'

上述例子中,"1"为字符串类型str,2为整型int,表达式在执行过程中,整型2被转换成字符串类型,输出结果呈现出字符串的拼接,该语言是弱类型语言。

  • 优点:灵活、简单、方便使用,包容性较强,定义变量的过程中可以无需指定类型,且执行过程中也可以隐式地改变其类型
  • 缺点:调试过程较困难,容易产生未知BUG,相对不适合大项目开发

总结

从上述讨论开来,静态类型和强类型语言更为严谨,容易理解,能减少程序出错的可能性;而动态类型和弱类型语言更为灵活,但更容易出错

当前常见的语言分类

class

参考

https://www.zhihu.com/question/19918532/answer/58538334
https://segmentfault.com/a/1190000012372372

相关文章

  • 动静、强弱变量类型

    静态类型vs动态类型 静态类型 静态类型是指在编译时就能确定变量类型的类型例如,C++语言中定义变量: 以上变量都...

  • 【TS】基础数据类型

    在了解TypeScript(简称TS)基础数据类型之前,先聊聊类型的“强弱动静”之分。 TS是JS的超集,JS是一...

  • 辨析编程语言的四种类型:动静类型与强弱类型

    导读:当描述一门编程语言的时候,我们一般需要区分它是动态类型还是静态类型,区分它是强类型还是弱类型。然而,很多人会...

  • 变量及资料类型

    变量及资料类型 变量的类型决定资料的类型 一份统计资料中可能包括所有的变量类型变量及资料类型示意图 变量类型 变量...

  • golang的值类型,指针类型和引用类型&值传递&指针传递

    一,变量类型 变量分为值类型,指针类型和引用类型。以如下变量定义和赋值语句为例: output: 值类型变量a,值...

  • Go 基础篇总结-变量

    一、Go内建变量类型 类型转换 type(varName) 二、变量定义 四种变量定义类型: 变量定义 三、变量和...

  • Go 基础篇-变量

    一、Go内建变量类型 类型转换 type(varName) 二、变量定义 四种变量定义类型: 变量定义 三、变量和...

  • 强弱类型、动态类型与静态类型初探

    一、强弱类型 类型安全:强类型、弱类型;1974年提出 强类型:语言层面限制实参类型必须与形参类型相同,不允许任意...

  • Python中几个重要的函数

    1. 获取变量类型的函数 type() 给变量赋值后,变量就具有确定的类型,同一变量赋值类型不同,变量的类型也就跟...

  • dart基础

    变量 动态类型or静态类型 变量类型: 内置类型 变量声明和赋值: Tips没有初始化的变量, 默认值都是null...

网友评论

      本文标题:动静、强弱变量类型

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