计算机语言赋值号,从赋值语句去理解命令式编程

命令式编程语言

所谓计算机程序,其实就是一份计算机照着执行的工作流程表。那些工作流程表都是一条条的祈使命令语句组成的。比如,先做这个,再做那个。在这种条件下做这个,在那种条件下,做那个。等等。这种命令式的、顺序执行的编程模型,叫做命令式编程(Imperative Programming),对应的编程语言自然就是命令式语言(Imperative Language)。

汇编语言,就是命令式语言的一种。计算机在硬件结构上天生就是命令式的、顺序式的。

命令式编程模型简单直观,而且符合底层计算机硬件结构,因而大行其道,相应的,命令式语言也是当前的主流编程语言。当然,一般来讲,主旋律之外都少不了杂音。命令式语言之外,当然也少不了非命令式编程语言,比如,函数式编程语言(Functional Programming Language),就是一种与命令式语言概念区别甚大的一种非命令式编程语言。

汇编语言是原初形式的命令式语言,其工作模型完全是建立在内存模型(包括寄存器在内)的基础上的。高级命令式语言虽然在表面概念上比汇编语言更加抽象,更加高端,但是,其内在运行模式仍然是建立在内存模型的基础之上的。

赋值语句

首先,我们需要着重讲解命令式语言中最基本、最核心的语句——“赋值”语句。

赋值语句是命令式语言中最常见的语句,形式上看起来很简单,但是,概念上却极其复杂。我们必须从赋值语句的基本形式开始,一步步讲述其基本概念。

在大部分的主流命令式编程语言中,“赋值”语句是用“等号”(=)来表述的。比如,在C、C++、Java、C#、Python、Ruby等命令式编程语言中,赋值语句都是用“=”这个符号来表述的。在这些语言中,“=”也叫做赋值符号。

赋值符号(“=”)的左边部分,叫做左值。赋值符号(“=”)的右边部分,叫做右值。左值和右值的定义十分直观,很容易理解。但是,接下来的问题,却没有那么容易理解了。

到现在为止,我们已经有了一条赋值语句的基本形式:左值 = 右值

那么,左值和右值具体是什么呢?用编程术语来说,左值是变量名,右值是表达式。

赋值语句就可以写成这样:变量名 = 表达式

这就涉及到编程语言中两个十分重要的概念——变量和表达式。这两个词语源自于数学(代数)中的概念。编程语言借用这两个词语来表达编程模型中类似的概念。当然,在编程语言中,这两个词语带有了一些编程语言特有的特色,不像在代数中那么纯粹。

表达式的概念相对来说纯粹一点,我们先来讲表达式的概念。

我们可以把表达式理解为一个数学公式。可以十分简单,比如,可以就是一个数字,也可以十分复杂,比如,(1 + 2)* 15 / 26 – 13。

变量的概念相对来说就不那么纯粹了。一方面,编程语言的变量的概念与代数中的变量概念类似,变量名通常以字母开头,代表变化的数值。另一方面,编程语言的变量又具有自己的特色。下面我们就主要讲解编程语言中的变量的诸多特性。

变量的特性

在编程语言的赋值语句中,变量名既可以出现在左边,也可以出现在右边的表达式。 比如,下述两个赋值语句。

x = 1

y = x + 1

x和y都是变量名。x既可以出现在赋值符号(=)的左边,也可以出现在赋值符号(=)的右边。

到现在为止,一切都显得那么和谐。上面的两条赋值语句看起来很正常,等号两边的变量或者表达式都满足相等的条件。“=”这个符号既表达了赋值符号的含义,又表达了“相等”的含义,与代数中的含义完全一致。看起来,一切都很顺利。但是,这只是假象。在编程语言中,赋值符号(=)丝毫没有“相等”的含义。之所以看起来好像“相等”,只是因为巧合而已。下面,我们再来看一条在代数中不可能成立的赋值语句。

x = x + 1

这种表达在代数中是不成立的,在命令式编程语言中,却是完全成立的。那么,这条语句代表了什么含义呢?

我们前面说过,命令式语言是有顺序的、并且按照顺序执行的。赋值语句的执行过程是这样的,首先,执行赋值符号(=)右边的表达式,得出结果之后,再把结果存入赋值符号左边的变量名。

那么,x = x + 1 这条语句的执行过程就是这样的。

首先,计算机执行赋值符号(=)右边的表达式 x + 1。在执行这个表达式的时候,计算机首先要取得x的值,然后,再把这个值和1相加,得到一个结果数值。到此,右边表达式结束,计算机继续执行,将得到的表达式计算结果存入到x这个变量名。这条语句执行结束之后,最终,x的数值就比之前增加了1。比如,x之前是0,那么赋值语句执行之后就是1。如果x之前是15,那么赋值语句执行之后就是16。

我们可以看到,x这个变量名具有两面性。一方面,x可以被计算机读取(计算机执行右边表达式的时候);一方面,x还可以被计算机写入(计算机执行赋值语句到最后一个步骤的时候)。

在命令式编程语言中,所有的变量名都具有这种两面性。可以读,也可以写,因此,可能时时变化。这也符合了变量这个名词的字面含义——可以变化的数量值。与之相对的,就是常量这个名词。常量是具有固定数值的、不可改变的数量值。常量的概念比较简单,不再赘述。

初次接触编程语言的读者,通常会被赋值符号(=)的含义弄糊涂。所以,一定要记住,在绝大多数命令式编程语言中,“=”的含义不是“相等”,而是“赋值”。

在一些语法严格、定义规范的语言中,比如,Pascal语言,赋值符号并不是“=”,而是“:=”,即,等号前面多了一个冒号(“:”)。这种赋值符号的定义,有效地减少了概念上混淆的可能性。当然,这种赋值符号的定义方法带来了一个不便之处,那就是每次都要多写一个冒号。

我的建议是,当你初次接触编程语言时,可以先从Pascal语言开始。当学会了简单的语法和编程概念之后,再转向其他主流编程语言。这样可以避免赋值符号带来的概念上的混淆。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值