【计算机哲学】《计算机哲学》

●理论:字符是构成程序设计语言的最小语法单位。每种程序设计语言都有自己的字符集。

【例】以Visual Basic为例,它的字符集包含字母、数字和专用字符3类。

(1)字母:大写英文字母A~Z,小写英文字母a~z。

(2)数字:0~9。

(3)专用字符:共27个。例如:+-*/=><\%&$@!(),.:;<Space>(空格键)<CR>(Enter键)等等。

(Else)注意:中文版的Visual Basic的字符集还包括汉字。

 

理论:计算机语言发展过程中,产生的一些概念。

1、函数(面向过程)与方法(面向对象)

待补充。

2、语句与过程

待补充。

过程:是能够完成一定功能的一组语句的集合。

3、命令(语法上一般没有括号)与函数(语法上一般有括号将参数括起来)

待补充。

4、别名(Alias)与引用(Reference)

  (1)引用:它是一个指向常量或变量的指针,属于程序代码本身。在程序设计语言的理论标准上本就是要求占用内存的,在硬件实现上需要存储空间去存储它,然后它的存储空间当中存储的是一个地址,该地址指向被引用的常量或变量,即间接寻址。

  (2)别名:它只是一个在程序代码书写阶段为常量或变量起的一个便于阅读或记忆的另外一个名称。在程序设计语言的理论标准上是不希望占用内存的,属于在屏幕上便于程序员阅读的「“屏幕显示”占位符”」。但是在硬件实现上还是需要存储空间去存储它,然后它的存储空间当中存储的是一个地址,该地址指向“被别名”的常量或变量,即间接寻址。

  注意:

  (1)在程序设计语言的理论标准上,引用与别名的设计初衷是不同的——一个需要占用内存,一个不希望占用内存。但是在硬件实现上,由于物理条件的现实制约,它两往往是相同的实现机制。

  (2)在程序设计语言发展的历史过程中,由于没有办法预测未来才会出现的工程需求和相应的理论,有程序设计语言出现了在英文翻译或原理理解上,将别名与引用混为一谈的情况。这是程序设计语言的历史发展过程所造成的后患问题,注意留心辨识。

5、占位符(“屏幕显示”占位符)(不占用内存)与程序代码(占用实际内存)

待补充。

 

●理论:编译器或解释器对程序代码字串的识别一般靠两类事物:(1)可见定界符:由字符集构成;(2)空白定界符:由“空白符(空格、回车、Tab字符)”构成。

(1)可见定界符:由字符集构成。例如:

  ①C/C++语言当中,函数参数的代码字串会被一对括号()括起来;

  ②C/C++语言当中,函数体内的代码字串会被一对花括号{}括起来;

  ③Visual Basic语言当中,块语句格式的If语句分支结构是用End If语句表示结束。

  ④Visual Basic语言当中,块语句格式的Select Case语句分支结构是用End Select语句表示结束。

  ⑤Visual Basic语言当中,一般情况下,要求程序代码是一行一句、一句一行;如果是复合语句行,即把几个语句放在一行中,各语句之间必须用冒号(:)隔开。

(2)空白定界符:由“空白符(空格、回车、Tab字符)”构成。例如:

  ①Visual Basic语言当中,一般情况下,要求程序代码是一行一句、一句一行,每行的最后其实就是看不见的回车字符。

  ②Visual Basic语言当中,很多时候都会用空格作为定界符。

    例如:定义单精度变量a,b,c(Dim a As Single,b As Single,c As Single)这条语句当中,就有看不见的空格字符。(空格字符的ASCII码是32)

  ③Visual Basic语言当中,Tab字符会被集成开发环境自动转化成多个空格,以此(多个空格)作为定界符。(Tab键的ASCII码是9)

 

●理论:计算机语言的发展及分类

一、机器语言
  特点:毫不靠近自然语言。(难记忆、难理解)
二、汇编语言
  特点:稍微靠近自然语言。(稍易记忆、稍易理解)
三、高级语言-不可跨平台
  靠近自然语言。(易记忆、易理解)
  1、一开始,面向过程。
    例如:Fortran、C、Pascal
  2-1、后来,为了解决软件危机,面向对象。
    例如:C++
  2-2、同时,微软希望搞成可视化(Visual)的,控件拖拽。(往往也是采用面向对象的机制。)
    例如:Visual Basic、C#
四、高级语言-可跨平台(带虚拟层)
  再后来,为了跨平台,带虚拟层。
  1、靠近自然语言。(易记忆、易理解,往往也是采用面向对象的机制)
    例如:Java
  2、非常靠近自然语言。(更易记忆、更易理解,往往也是采用面向对象的机制)
    例如:Python

【其它】-特殊:

  会话语言(交互语言)、脚本语言,等等。

 

理论:“一般循环”中,代码段作为“循环体”重复执行时,代码段中变化的数据必须是有规律的;“循环嵌套”中,代码段作为“循环体”重复执行时,代码段中变化的数据必须是有规律的。那么重点来了:“循环嵌套”存在无法使用的情况是设立「函数」或「过程」机制的原因之一。

例如:求7!+11!-10!=多少?

  这里我们可以用三个“一般循环”分别对7!、11!、10!进行计算,然后再计算出整个式子的计算结果;

  这里我们很难找出7、11、10这三个数之间有什么规律,所以这个题目不适合使用“循环嵌套”。所以,我们可以用「函数」或「过程」来做。

 

●理论:语法糖。

一、是什么

  语法糖(Syntactic sugar):也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。

二、作用/意义/为什么要添加它

  也就是说,一个语言中添加语法糖目的是为了方便程序员使用。新的语法可以酿造更好的编程风格,一些难以实现的方面也变得轻而易举了。
  另外,通常来说使用语法糖还能够增加程序的可读性,从而减少程序代码出错的机会。

三、例子

  例1、在C语言里用a[i]表示*(a+i),用a[i][j]表示*(*(a+i)+j),由此可见语法糖不是“现代语言”独有,这种写法简洁明了,易于理解。

  例2、实际上从面向过程到面向对象也是一种语法糖。

    C语言可以通过它的指针、类型转换,结构体实现面向对象的编程风格;
    但是C++更进一步的推广了这种风格,更加易用;
    不过到了C#把(面向对象)OO的风格发挥得淋漓尽致。

  例3、C#从1.0到2.0,只有泛型不是语法糖,其余的新特性都是语法糖。

    由于.net从2.0到3.0再到3.5的底层运行时环境CLR没有做更新,没有添加任何新的IL指令,所以C#从2.0到3.0中所有的特性都是语法糖。

四、深入理解

  (1)OO的编程风格对于面向过程来说是不是一种语法糖呢?

  如果生硬地照此理解,只有计算机硬件指令才不算语法糖,而其他一切利用编译器、汇编器将代码抽象,和自然语言更相近的手段都算语法糖。

  (2)语法糖会造成性能上的损失吗?

  语法糖是一种便捷的写法,可以给我们带来方便,提高开发编码的效率。编译器会帮我们做转换,在性能上不会带来损失。

  (3)语法糖的其它形态——“思想上的”语法糖

  语法糖和其他编程思想一样重要。
  例如:duck type、人本接口、最小接口、约定优于配置,广义来讲都是一些“思想上的”语法糖。

  (4)语法糖并不是绝对广受欢迎的。

  由于语法糖是为了方便某种功能的使用而设立的。

  如果这种功能的使用范围或领域比较普遍,那它就会受到程序员的普遍欢迎;

  但是,如果这种功能常常只是在特定范围或领域内才能用得上,那么这个语法糖往往会被其它工作范围或领域内的程序员视为一种“即增加语法臃肿,又毫无意义”的东西。

posted @ 2022-06-23 10:36  BearKuma1069  阅读(442)  评论(0)    收藏  举报