当前位置: 首页 > news >正文

【编程范式】聊聊什么是数据类型和范式的本质

什么是编程范式

范式其实就是做事的方式,编程范式可以理解为如何编程,按照什么样的模式或者风格进行编程。

编程范式包含哪些

  • 泛型编程
  • 函数式编程
  • 面向对象编程
  • 编程本质和逻辑编程
    在这里插入图片描述
    虽然有不同的编程范式,但是对于目的来说都是为了解决同一个问题,那就是写出更通用、易拓展、可重用的代码或模块。

数据类型与现实世界的类比

当我们学习一门语言的时候,其实基本上都会学习一些基础的知识包括但不限于如下

  • 变量如何定义 使用。
  • 数据类型 如何使用 逻辑运算等
  • 函数的基本定义
  • 支持面向对象的话 类 结构如何进行定义使用
  • 文件编程、网络编程、并发编程等。
  • Web编程 相关的中间件、基础软件等。

你看学习任何一门语言来说的话 基本上都有上述的功能。那么针对于数据类型,有没有想过一个就是为什么要具体化一个数据类型呢,比如在Java中直接用Object、Go中的 interface{} 方式不好嘛,
带着这个问题,我们来聊聊数据类型。即类型系统。

对于Java或者Go来说的话,一种是内嵌数据类型,一种是抽象类型。前者就是int double float string等 后者就是 struct 、class 、interface等。
程序语言的类型系统主要提供如下的功能

  • 程序语言的安全性,即不会出现 int类型 被复制为字符串,导致在编译运行的时候报错,强类型语言可以提供安全保证。
  • 编译器的优化,编译器可以明确知道使用的数据类型,分配对应的空间大小以及更有效率的执行机器指令。
  • 代码可读性,有数据类型的代码,可读性、可维护性更清楚。
  • 抽象化,如果都是固定一个类型,那么不直观,通过具体的数据类型可以比较清楚。

我们需要清楚地知道,无论哪种程序语言,都逃避免不了一个特定的类型系统
所以每个语言肯定有一个类型检测系统,对于静态语言来说,会在编译器进行检测,而动态语言则是在运行期进行检查的。

范型的本质

类型的本质

  • 对内存的一种抽象,不同的类型,占用的内存布局和内存分配策略不同。
  • 不同的类型,操作不同。

范型

  • 标准化掉类型的内存分配、释放和访问。
  • 标准化掉类型的操作。比如:比较操作,I/O 操作,复制操作……
  • 标准化掉数据容器的操作。比如:查找算法、过滤算法、聚合算法……
  • 标准化掉类型上特有的操作。需要有标准化的接口来回调不同类型的具体操作……

屏蔽掉数据和操作数据的细节,让算法更为通用,让编程者更多地关注算法的结构,而不是在算法中处理不同的数据类型。

**我们需要清楚地明白,编程语言本质上帮助程序员屏蔽底层机器代码的实现,而让我们可以更为关注于业务逻辑代码。但是因为,编程语言作为机器代码和业务逻辑的粘合层,是在让程序员可以控制更多底层的灵活性,还是屏蔽底层细节,让程序员可以更多地关注于业务逻辑,这是很难两全需要 trade-off 的事。

所以,不同的语言在设计上都会做相应的取舍。比如:C 语言偏向于让程序员可以控制更多的底层细节,而 Java 和 Python 则让程序员更多地关注业务功能的实现。而 C++ 则是两者都想要,导致语言在设计上非常复杂。**

http://www.lryc.cn/news/104706.html

相关文章:

  • 2023-08-01 python根据x轴、y轴坐标(数组)在坐标轴里画出曲线图,python 会调用鼎鼎大名的matlib,用来分析dac 数据
  • 小研究 - 主动式微服务细粒度弹性缩放算法研究(四)
  • 机器学习深度学习——softmax回归的简洁实现
  • CPU利用率过高解决思路
  • Redis(三)—— Redis基本的事务操作、Redis实现乐观锁
  • SQLI_LABS攻击
  • 如何查看 Chrome 网站有没有前端 JavaScript 报错?
  • JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)
  • 【项目方案】OpenAI流式请求实现方案
  • 华为数通HCIP-IP组播基础
  • STM32 SPI学习
  • 分布式缓存与数据库的一致性记录
  • vue3的语法
  • 【git合并分支自定义提交消息】
  • AttributeError: module ‘PyQt5.QtGui‘ has no attribute ‘QMainWindow‘
  • 基于Java+SpringBoot+Vue前后端分离电商项目
  • Rpc服务消费者(Rpc服务调用者)实现思路
  • FANUC机器人实现2个RO输出信号互锁关联(互补)的具体方法
  • 权威认可|云畅科技再次入选中国信通院「高质量数字化转型产品及服务全景图」
  • 爬虫小白-如何调试列表页链接与详情链接不一样并三种方式js逆向解决AES-ECB
  • Ubuntu 离线部署的常见操作
  • 什么是多运行时架构?
  • 【MySQL】mysql | linux | 离线安装mysqldump
  • 中国农村程序员学习此【JavaScript教程】购买大平层,开上帕拉梅拉,迎娶白富美出任CEO走上人生巅峰
  • 【Python】Web学习笔记_flask(2)——getpost
  • RabbitMQ 教程 | 第5章 RabbitMQ 管理
  • LLM微调 | Adapter: Parameter-Efficient Transfer Learning for NLP
  • 在idea中添加try/catch的快捷键
  • 企业级开发中协同开发与持续集成持续部署
  • 九五从零开始的运维之路(其二十八)