news 2026/7/1 9:13:49

懂得编程语言的通用结构,入门上手基本都是手拿把掐

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
懂得编程语言的通用结构,入门上手基本都是手拿把掐

在接触过多个编程语言的学习之后,观察到一些通用的范式结构,编程语言虽然表面差异巨大,但底层存在一套不可简化的最小完备集——这是所有语言都必须包含的基本元素,否则无法表达任意算法。

而把握住这一点之后,对任意编程语言的学习都有一种脉络极其明晰的感觉,一旦了解到这种通用范式的结构,那么对于入门编程语言就会有一个系统性的学习认知框架,知道该学什么,从哪里开始学。

这种通用的范式结构就是所有编程语言共有的基础元素,这种相似性源于计算机科学的基本原理——所有编程语言本质上都是人与计算机沟通的抽象工具,需要遵循计算机底层执行逻辑的约束

正是这样的约束,导致了编程语言在设计时所共同遵守的某种规则,也就是那些隐藏在各种语法表面之下的共性规律。也因为是讲解共性的内容,所以只会涉及到有哪些共性,不会描述这些共性在具体语言中是怎么表示的内容。

基础要素

任何编程语言都像一座建筑,需要最基础的材料和结构。这些基础元素是表达程序逻辑的基本单元,它们共同构成了编程语言的基础框架,包括如下五个部分:

  1. 数据表示
  2. 表达式与运算
  3. 控制结构
  4. 抽象机制
  5. 输入输出机制

下面按顺序进行介绍。

数据表示

任何计算都涉及数据,必须有表示数据的方式

就像是在草稿本上求解数学题一样,特别是代数内容,有字母、计算符号以及数值,这些写在本子上的字符是表达这些内容的具体形式,并且可以保证每个学习过代数的人都可以看懂和理解,因为是一套相同的机制。

变量

首先要介绍的是变量,那么为什么要有变量呢?想象一下,在代数中,如果没有变量,只有常量,也就是具体的数值,那么所有的问题都只是数值计算问题,而且是必须一次性完成的计算,不可能分步骤,迭代式的计算。

同时在实际情况中,就是有求解未知量的需求,也有某些量在动态变化的情况,所以单纯的常量无法建构一个复杂且动态的数学世界,对编程而言也同样如此。

在程序中,变量的作用如下所示:

  1. 临时保存数据,用于分步计算,避免一次性大量计算
  2. 避免直接使用常量,因为在一个表达式中,常量是无法修改的
    • 假设定义一个穿了增高鞋的人的身高函数为f(x)=x+2,其中变量x表示这个人的实际身高,而整数常量2就表示增高鞋的高度,是固定的数值
    • 如果它只穿同一个增高鞋的话,这个函数没有问题,但是哪天他换了其他高度的鞋子,这个2就不适用了
    • 难道要为每个鞋子定义一个专属的函数吗,这显然不可能。但是又不知道鞋子具体能给他提供多少身高
    • 所以这时候就换用变量a来描述,f(x)=x+a,此时这个变量a就代指了增高鞋的高度,根据实际鞋子的增高功能同步变化,灵活度就更高了。
  3. 记录程序运行状态,不同于临时保存数据只是某一计算的中间过程,此处的运行状态可以调控程序的流程和效果
  4. 根据输入变化行为,提供了与外界交互的可能,因为输入是不确定的,只有变量才能描述这种不确定性
  5. 隐藏内存细节,因为变量本质上是内存中存储数据的位置代称,否则需要直接操作内存地址,可读性非常差

下面给一个关于代数中的变量与程序中的变量的对比:

代数编程相同点
变量表示未知数或可变的量本质上是内存中存储数据的位置代称,或者说一个容器的名字1. 两者都是"符号代表值"
2. 都可以被重新赋值
3. 都遵循"先定义后使用"的原则

有一个常见的混淆点,就是符号=,在数学中,=表示的是一种等价关系,只是一种逻辑关系、比如x=5,表示的是x等于5这样一个关系或事实表述;而在程序中,表示的是一个动作,即赋值,也可以形象的表述为把一个值放入进一个容器中,具体来说就是把数值5放入到名为x的容器中,这个x也称为变量。

作为对比,现在有表达式x=x+1,如果从数学的角度来看,这个等价关系是不成立的,但是从程序的角度来看,就是取出容器x的值,加一后再放回去的意思。

小结一下,可以认为变量就是一种容器(当然也有其它类型的容器),既然是容器那么就是可重复利用的,同时所有语言都必须提供将数据存储在内存中并可通过名称引用的机制,这是计算的前提,后面的内容表述中,容器就是变量的意思。

标识符

上一小节介绍了变量,也提到变量就是容器,但这些都是抽象的概念,也就是说,给你一些看起来一模一样的容器,然后拿一个小球随机放进一个容器中,并打乱容器的摆放顺序,你还能找到小球在哪个容器中吗?

很难对吧,但是如果给每个容器标识一个唯一的名字,那么只要记住小球放入哪个名字标识的容器就可以了,因为此时容器是可识别的。

实际上只要标识符能唯一确定某个容器,并不会关心标识符由什么组成,但现实是程序的标识符需要遵循一些规范,比如不能以数字开头、不能包含特殊字符等。

此外还有一类编程语言独有的预定义标识符,也称为关键字,这些标识符是不可使用的,比如python中的inputprint内置函数名。

数据/值

既然有了容器(变量),那么总要往容器里面放入一些东西,对于程序而言,就是数据,也可以称为,而把数据放入变量这种容器的动作就是赋值操作。

数据有很多种类型,比如日常在excel中有文本类型的数据、有数值类型的数据,还有一些复合类型的数据,这是因为数据来源于多种形式的活动中。

其中文本类型的数据可能是公司的员工姓名、数值类型的数据可能是员工的薪资、复合类型的数据可能是员工其他信息的组合。

在数学中,数字有整数、小数,复数等类型,同样在程序中的数据类型也有多种,比如数值类型(整数,浮点数)、布尔类型(真/假)和字符串类型等。

之所以有这些数据类型,就是要定义数据的性质以及不同类型的处理方式,既可以是同类型之间的运算,比如3+2是两个整数之间的运算;也可以是不同类型之间的运算,比如3+2.5中一个是整数,另一个是小数,定义它们之间的运算方式为:把整数转换为小数之后再与另一个小数进行计算。

表达式与运算

没有运算就无法计算

所有语言都支持将值通过运算符组合成新值,而这种由变量常量运算符组合的形式就是表达式,比如x + 5 * 3,和数学中的形式很像,并且一般情况下运算符的语义也是相通的。

这样的表达式称为算术表达式,可以包含变量和常量,也可以通过小括号改变运算顺序,但是不同于数学中这样的表达式只表示关系,在程序中,这样的表达式会实际计算值,也就是有一个算术结果,并且乘号不能省略。

接下来是比较与逻辑运算,比如数学中x > 5,表示变量与数值的关系,是这样一个事实陈述:x大于5;在程序中,这样的表达式称为布尔表达式,会产生一个布尔值(真/假)。

要记住只要是值就可以赋值给变量,比如is_greater = x > 5,那么如果x>5,则变量is_greater保存的结果就为一个逻辑真值,在python中就是true,否则为一个逻辑假值false,一般布尔表达式用于条件判断,比如if条件判断。

控制结构

控制流就是逻辑的表达

基本控制结构有下表所示:

元素本质作用说明
顺序执行默认执行方式语句按顺序依次执行
条件分支根据条件选择路径必须支持if或等价机制
循环/迭代重复执行代码块必须支持while或等价机制
跳转/返回改变执行位置,体现思维的跳跃returnbreak

其中顺序执行图示如下:

开始

步骤1

步骤2

结束

按照规定好的工序一步步顺序执行,不完成步骤1,就不会执行到步骤2,就比如洗完澡穿衣服,正常的顺序应该是先穿内衣再穿外衣,也就是步骤1是穿内衣,步骤2是穿外衣,排除不穿内衣的情况,那么应该没人会先执行步骤2穿外衣,再执行步骤1穿内衣吧(不会吧不会吧😲😲)

条件分支图示如下:

True

False

开始

条件判断

执行操作A

执行操作B

结束

一个逻辑判断只会产生两个结果,不是真就是假,比如你今天下班买菜了吗这个逻辑判断,要么买了,要么没买,所以对应到图上,只会产生两条支路,如果买菜了,那么就执行操作A,可以是自己做晚饭,如果没买菜,那么执行操作B,可以是点外卖

循环结构图示如下:

循环体

满足条件

不满足条件

开始

初始化计数器

判断循环条件

执行循环操作

更新计数器

结束

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 9:13:25

2026德阳黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式

德阳街头巷尾的黄金回收、白银回收、铂金回收店铺星罗棋布,新旧招牌交错林立,看似选择众多,实则鱼龙混杂、良莠不齐。为帮本地市民甄别靠谱变现渠道,小编连日实地走访、多方核验,逐一筛选出五家诚信经营的正规回收商户…

作者头像 李华
网站建设 2026/7/1 9:06:34

终极指南:用go2rtc彻底解决多协议摄像头流媒体管理难题

终极指南:用go2rtc彻底解决多协议摄像头流媒体管理难题 【免费下载链接】go2rtc Ultimate camera streaming application 项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc 你是否曾为家中不同品牌的智能摄像头无法统一管理而烦恼?是否因…

作者头像 李华
网站建设 2026/7/1 9:00:13

Python cryptography库实战:从Fernet加密到AES-GCM的文件安全保护

1. 项目概述:为什么我们需要自己动手加密文件? 在数字世界里,文件就是我们的数字资产。无论是工作文档、私人照片,还是项目代码,一旦泄露,轻则尴尬,重则造成财产或声誉损失。你可能觉得&#x…

作者头像 李华
网站建设 2026/7/1 8:55:57

别再死记硬背!用Python+NumPy手把手推导齐次变换矩阵(附代码)

从零推导齐次变换矩阵:用Python实现机器人运动学核心算法 理解齐次变换矩阵的本质 在机器人学和计算机视觉领域,齐次变换矩阵(Homogeneous Transformation Matrix)是描述刚体在三维空间中位置和姿态的核心数学工具。它巧妙地将旋…

作者头像 李华