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

📅 2026/7/1 9:13:55
懂得编程语言的通用结构,入门上手基本都是手拿把掐
在接触过多个编程语言的学习之后观察到一些通用的范式结构编程语言虽然表面差异巨大但底层存在一套不可简化的最小完备集——这是所有语言都必须包含的基本元素否则无法表达任意算法。而把握住这一点之后对任意编程语言的学习都有一种脉络极其明晰的感觉一旦了解到这种通用范式的结构那么对于入门编程语言就会有一个系统性的学习认知框架知道该学什么从哪里开始学。这种通用的范式结构就是所有编程语言共有的基础元素这种相似性源于计算机科学的基本原理——所有编程语言本质上都是人与计算机沟通的抽象工具需要遵循计算机底层执行逻辑的约束。正是这样的约束导致了编程语言在设计时所共同遵守的某种规则也就是那些隐藏在各种语法表面之下的共性规律。也因为是讲解共性的内容所以只会涉及到有哪些共性不会描述这些共性在具体语言中是怎么表示的内容。基础要素任何编程语言都像一座建筑需要最基础的材料和结构。这些基础元素是表达程序逻辑的基本单元它们共同构成了编程语言的基础框架包括如下五个部分数据表示表达式与运算控制结构抽象机制输入输出机制下面按顺序进行介绍。数据表示任何计算都涉及数据必须有表示数据的方式就像是在草稿本上求解数学题一样特别是代数内容有字母、计算符号以及数值这些写在本子上的字符是表达这些内容的具体形式并且可以保证每个学习过代数的人都可以看懂和理解因为是一套相同的机制。变量首先要介绍的是变量那么为什么要有变量呢想象一下在代数中如果没有变量只有常量也就是具体的数值那么所有的问题都只是数值计算问题而且是必须一次性完成的计算不可能分步骤迭代式的计算。同时在实际情况中就是有求解未知量的需求也有某些量在动态变化的情况所以单纯的常量无法建构一个复杂且动态的数学世界对编程而言也同样如此。在程序中变量的作用如下所示临时保存数据用于分步计算避免一次性大量计算避免直接使用常量因为在一个表达式中常量是无法修改的假设定义一个穿了增高鞋的人的身高函数为f(x)x2其中变量x表示这个人的实际身高而整数常量2就表示增高鞋的高度是固定的数值如果它只穿同一个增高鞋的话这个函数没有问题但是哪天他换了其他高度的鞋子这个2就不适用了难道要为每个鞋子定义一个专属的函数吗这显然不可能。但是又不知道鞋子具体能给他提供多少身高所以这时候就换用变量a来描述f(x)xa此时这个变量a就代指了增高鞋的高度根据实际鞋子的增高功能同步变化灵活度就更高了。记录程序运行状态不同于临时保存数据只是某一计算的中间过程此处的运行状态可以调控程序的流程和效果根据输入变化行为提供了与外界交互的可能因为输入是不确定的只有变量才能描述这种不确定性隐藏内存细节因为变量本质上是内存中存储数据的位置代称否则需要直接操作内存地址可读性非常差下面给一个关于代数中的变量与程序中的变量的对比代数编程相同点变量表示未知数或可变的量本质上是内存中存储数据的位置代称或者说一个容器的名字1. 两者都是符号代表值2. 都可以被重新赋值3. 都遵循先定义后使用的原则有一个常见的混淆点就是符号在数学中表示的是一种等价关系只是一种逻辑关系、比如x5表示的是x等于5这样一个关系或事实表述而在程序中表示的是一个动作即赋值也可以形象的表述为把一个值放入进一个容器中具体来说就是把数值5放入到名为x的容器中这个x也称为变量。作为对比现在有表达式xx1如果从数学的角度来看这个等价关系是不成立的但是从程序的角度来看就是取出容器x的值加一后再放回去的意思。小结一下可以认为变量就是一种容器当然也有其它类型的容器既然是容器那么就是可重复利用的同时所有语言都必须提供将数据存储在内存中并可通过名称引用的机制这是计算的前提后面的内容表述中容器就是变量的意思。标识符上一小节介绍了变量也提到变量就是容器但这些都是抽象的概念也就是说给你一些看起来一模一样的容器然后拿一个小球随机放进一个容器中并打乱容器的摆放顺序你还能找到小球在哪个容器中吗很难对吧但是如果给每个容器标识一个唯一的名字那么只要记住小球放入哪个名字标识的容器就可以了因为此时容器是可识别的。实际上只要标识符能唯一确定某个容器并不会关心标识符由什么组成但现实是程序的标识符需要遵循一些规范比如不能以数字开头、不能包含特殊字符等。此外还有一类编程语言独有的预定义标识符也称为关键字这些标识符是不可使用的比如python中的input、print内置函数名。数据/值既然有了容器(变量)那么总要往容器里面放入一些东西对于程序而言就是数据也可以称为值而把数据放入变量这种容器的动作就是赋值操作。数据有很多种类型比如日常在excel中有文本类型的数据、有数值类型的数据还有一些复合类型的数据这是因为数据来源于多种形式的活动中。其中文本类型的数据可能是公司的员工姓名、数值类型的数据可能是员工的薪资、复合类型的数据可能是员工其他信息的组合。在数学中数字有整数、小数复数等类型同样在程序中的数据类型也有多种比如数值类型(整数浮点数)、布尔类型(真/假)和字符串类型等。之所以有这些数据类型就是要定义数据的性质以及不同类型的处理方式既可以是同类型之间的运算比如32是两个整数之间的运算也可以是不同类型之间的运算比如32.5中一个是整数另一个是小数定义它们之间的运算方式为把整数转换为小数之后再与另一个小数进行计算。表达式与运算没有运算就无法计算所有语言都支持将值通过运算符组合成新值而这种由变量、常量和运算符组合的形式就是表达式比如x 5 * 3和数学中的形式很像并且一般情况下运算符的语义也是相通的。这样的表达式称为算术表达式可以包含变量和常量也可以通过小括号改变运算顺序但是不同于数学中这样的表达式只表示关系在程序中这样的表达式会实际计算值也就是有一个算术结果并且乘号不能省略。接下来是比较与逻辑运算比如数学中x 5表示变量与数值的关系是这样一个事实陈述x大于5在程序中这样的表达式称为布尔表达式会产生一个布尔值(真/假)。要记住只要是值就可以赋值给变量比如is_greater x 5那么如果x5则变量is_greater保存的结果就为一个逻辑真值在python中就是true否则为一个逻辑假值false一般布尔表达式用于条件判断比如if条件判断。控制结构控制流就是逻辑的表达基本控制结构有下表所示元素本质作用说明顺序执行默认执行方式语句按顺序依次执行条件分支根据条件选择路径必须支持if或等价机制循环/迭代重复执行代码块必须支持while或等价机制跳转/返回改变执行位置体现思维的跳跃如return、break其中顺序执行图示如下开始步骤1步骤2结束按照规定好的工序一步步顺序执行不完成步骤1就不会执行到步骤2就比如洗完澡穿衣服正常的顺序应该是先穿内衣再穿外衣也就是步骤1是穿内衣步骤2是穿外衣排除不穿内衣的情况那么应该没人会先执行步骤2穿外衣再执行步骤1穿内衣吧不会吧不会吧条件分支图示如下TrueFalse开始条件判断执行操作A执行操作B结束一个逻辑判断只会产生两个结果不是真就是假比如你今天下班买菜了吗这个逻辑判断要么买了要么没买所以对应到图上只会产生两条支路如果买菜了那么就执行操作A可以是自己做晚饭如果没买菜那么执行操作B可以是点外卖循环结构图示如下循环体满足条件不满足条件开始初始化计数器判断循环条件执行循环操作更新计数器结束