编程有两个基本的方面:数据和指令。要了解数据,就要先了解变量和类型的概念,要了解指令,就要先了解控制结构和子程序。本课将会花很大的篇幅让你熟悉这些概念。
变量是指一个存储单元(或被当做一个整体的若干个连贯的存储单元),每个变量都被赋予一个名字,这样就可以很容易的在程序中引用,程序员只需要关心变量的名字;追踪存储单元的职责由编译器来承担。作为一个程序员,你需要知道的是这些变量名指向的是内存中的一种“盒子”,盒子里面存放着数据,你不需要知道这个盒子在内存中的位置。
在Java和其它许多编程语言中,变量的类型表明它可以存储什么样的数据。一种变量可能用来存储整数(Integer)——例如3,-7和0这样的整数——另一种变量可能用来存储浮点数(Float)——例如3.14,-2.7或17.0这样的带小数点的数字。(是的,计算机对整数17和浮点数17.0确实有所区别;它们在计算机内部的差别其实很大。)此外还有字符类型(Characters)(“A”,“;”等等),字符串(String)(“Hello”, “A string can include many characters”等),还有一些不常用的类型例如日期,颜色,声音,或程序需要存储的其它数据类型。
编程语言总是有把数据存入变量或者读取数据的指令,还有使用数据做计算的指令。例如,下面这个可能会出现在Java程序中的“赋值语句”,告诉计算机读取存储在变量名叫“principal”(本金)中的数据,乘以0.07后把结果存储在名叫“interest”(利息)的变量名中。
interest = principal * 0.07;
还有一些“输入命令”用来用户输入的或者从存储在计算机磁盘的文件中读取来的数据,同时也有“输出命令”反方向输出数据。
这些基本的指令——把数据从一个地方挪到另一个地方以及执行计算的指令——是所有程序的构建模块。这些构建模块通过使用控制结构和子程序组合形成复杂的程序。
一个程序是一系列的指令。在普通的“控制流”中,计算机按照指令在程序中出现的顺序一个接着一个依次执行指令。但是,这显然是有局限性的:计算机很快就会无指令可执行。控制结构是可以改变控制流的特别的指令。控制结构有两个基本类型:循环(Loops),使得一系列指令一遍遍的重复;分支(Branches),使得计算机可以在程序运行时根据条件从两到多组指令中选择执行。
例如,如果变量“principal”的值大于10000,那么“interest”的值就是principal乘以0.05的结果;如果不大于10000,那么interest就是principal乘以0.04的结果。一个程序需要一些这类判断类型的实现。在Java中,就会使用下面的“if语句”:
if (principal > 10000) interest = principal * 0.05; else interest = principal * 0.04;
(现在先别担心细节。先记住计算机可以进行条件判断,并在此基础上决定下一步的走向。)
循环被用于重复执行同一个任务多次。例如,如果你想要为邮寄名单上的每一个名字打印邮寄地址,你可能会说:“获得第一个名字和地址并打印出来;获得第二个名字和地址并打印出来;获得第三个名字和地址并打印出来……”但是这很快就会变得不可理喻——如果你不知道到底有多少个名字的话这就根本不现实。所以你其实想说的应该是“只要名单上还有未打印的名字,就获取下一个名字和地址,打印出来。”循环就被用于表达这种重复。
大型程序非常复杂,几乎难以编写,除非使用“模块”的方式把它们进行分块管理。子程序可以实现这一功能。一个子程序包括一些执行任务的指令,把它们组合成一个单元并赋予一个名字。这个名字可以用来指代整个指令集。例如,你的程序的任务之一是在屏幕上画一个房子,你可以使用必须的指令拼成一个子程序,并为这个子程序命名为“drawHouse()”,那么你的程序中任何需要画房子的地方,你都可以使用一句简单的指令:
drawHouse();
这将会在每一个使用这句话的地方重复运行整个画房子指令,得出同样的效果。
这里的优势不仅仅是少打了几行字。使用子程序组织你的程序同样帮助你组织你的思考过程和你的程序设计。当你在编写画房子程序时,你可以集中思考画房子功能,而不用担心程序的其他部分。并且这个子程序一旦写完,你就可以忘记画房子的细节——问题已经解决了,你已经有了一个画房子的子程序了。子程序自此成为了编程语言的内置部分,你可以直接使用而不再需要思考子程序的具体实现细节。
原文链接: math.hws.edu 翻译:ImportNew.com -顾星竹
译文链接:[]