|
編程有兩個(gè)基本的方面:數(shù)據(jù)和指令。要了解數(shù)據(jù),就要先了解變量和類型的概念,要了解指令,就要先了解控制結(jié)構(gòu)和子程序。本課將會(huì)花很大的篇幅讓你熟悉這些概念。 變量是指一個(gè)存儲(chǔ)單元(或被當(dāng)做一個(gè)整體的若干個(gè)連貫的存儲(chǔ)單元),每個(gè)變量都被賦予一個(gè)名字,這樣就可以很容易的在程序中引用,程序員只需要關(guān)心變量的名字;追蹤存儲(chǔ)單元的職責(zé)由編譯器來承擔(dān)。作為一個(gè)程序員,你需要知道的是這些變量名指向的是內(nèi)存中的一種“盒子”,盒子里面存放著數(shù)據(jù),你不需要知道這個(gè)盒子在內(nèi)存中的位置。 在Java和其它許多編程語言中,變量的類型表明它可以存儲(chǔ)什么樣的數(shù)據(jù)。一種變量可能用來存儲(chǔ)整數(shù)(Integer)——例如3,-7和0這樣的整數(shù)——另一種變量可能用來存儲(chǔ)浮點(diǎn)數(shù)(Float)——例如3.14,-2.7或17.0這樣的帶小數(shù)點(diǎn)的數(shù)字。(是的,計(jì)算機(jī)對(duì)整數(shù)17和浮點(diǎn)數(shù)17.0確實(shí)有所區(qū)別;它們?cè)谟?jì)算機(jī)內(nèi)部的差別其實(shí)很大。)此外還有字符類型(Characters)(“A”,“;”等等),字符串(String)(“Hello”, “A string can include many characters”等),還有一些不常用的類型例如日期,顏色,聲音,或程序需要存儲(chǔ)的其它數(shù)據(jù)類型。 編程語言總是有把數(shù)據(jù)存入變量或者讀取數(shù)據(jù)的指令,還有使用數(shù)據(jù)做計(jì)算的指令。例如,下面這個(gè)可能會(huì)出現(xiàn)在Java程序中的“賦值語句”,告訴計(jì)算機(jī)讀取存儲(chǔ)在變量名叫“principal”(本金)中的數(shù)據(jù),乘以0.07后把結(jié)果存儲(chǔ)在名叫“interest”(利息)的變量名中。
還有一些“輸入命令”用來用戶輸入的或者從存儲(chǔ)在計(jì)算機(jī)磁盤的文件中讀取來的數(shù)據(jù),同時(shí)也有“輸出命令”反方向輸出數(shù)據(jù)。 這些基本的指令——把數(shù)據(jù)從一個(gè)地方挪到另一個(gè)地方以及執(zhí)行計(jì)算的指令——是所有程序的構(gòu)建模塊。這些構(gòu)建模塊通過使用控制結(jié)構(gòu)和子程序組合形成復(fù)雜的程序。 一個(gè)程序是一系列的指令。在普通的“控制流”中,計(jì)算機(jī)按照指令在程序中出現(xiàn)的順序一個(gè)接著一個(gè)依次執(zhí)行指令。但是,這顯然是有局限性的:計(jì)算機(jī)很快就會(huì)無指令可執(zhí)行??刂平Y(jié)構(gòu)是可以改變控制流的特別的指令??刂平Y(jié)構(gòu)有兩個(gè)基本類型:循環(huán)(Loops),使得一系列指令一遍遍的重復(fù);分支(Branches),使得計(jì)算機(jī)可以在程序運(yùn)行時(shí)根據(jù)條件從兩到多組指令中選擇執(zhí)行。 例如,如果變量“principal”的值大于10000,那么“interest”的值就是principal乘以0.05的結(jié)果;如果不大于10000,那么interest就是principal乘以0.04的結(jié)果。一個(gè)程序需要一些這類判斷類型的實(shí)現(xiàn)。在Java中,就會(huì)使用下面的“if語句”:
(現(xiàn)在先別擔(dān)心細(xì)節(jié)。先記住計(jì)算機(jī)可以進(jìn)行條件判斷,并在此基礎(chǔ)上決定下一步的走向。) 循環(huán)被用于重復(fù)執(zhí)行同一個(gè)任務(wù)多次。例如,如果你想要為郵寄名單上的每一個(gè)名字打印郵寄地址,你可能會(huì)說:“獲得第一個(gè)名字和地址并打印出來;獲得第二個(gè)名字和地址并打印出來;獲得第三個(gè)名字和地址并打印出來……”但是這很快就會(huì)變得不可理喻——如果你不知道到底有多少個(gè)名字的話這就根本不現(xiàn)實(shí)。所以你其實(shí)想說的應(yīng)該是“只要名單上還有未打印的名字,就獲取下一個(gè)名字和地址,打印出來?!毖h(huán)就被用于表達(dá)這種重復(fù)。 大型程序非常復(fù)雜,幾乎難以編寫,除非使用“模塊”的方式把它們進(jìn)行分塊管理。子程序可以實(shí)現(xiàn)這一功能。一個(gè)子程序包括一些執(zhí)行任務(wù)的指令,把它們組合成一個(gè)單元并賦予一個(gè)名字。這個(gè)名字可以用來指代整個(gè)指令集。例如,你的程序的任務(wù)之一是在屏幕上畫一個(gè)房子,你可以使用必須的指令拼成一個(gè)子程序,并為這個(gè)子程序命名為“drawHouse()”,那么你的程序中任何需要畫房子的地方,你都可以使用一句簡(jiǎn)單的指令:
這將會(huì)在每一個(gè)使用這句話的地方重復(fù)運(yùn)行整個(gè)畫房子指令,得出同樣的效果。 這里的優(yōu)勢(shì)不僅僅是少打了幾行字。使用子程序組織你的程序同樣幫助你組織你的思考過程和你的程序設(shè)計(jì)。當(dāng)你在編寫畫房子程序時(shí),你可以集中思考畫房子功能,而不用擔(dān)心程序的其他部分。并且這個(gè)子程序一旦寫完,你就可以忘記畫房子的細(xì)節(jié)——問題已經(jīng)解決了,你已經(jīng)有了一個(gè)畫房子的子程序了。子程序自此成為了編程語言的內(nèi)置部分,你可以直接使用而不再需要思考子程序的具體實(shí)現(xiàn)細(xì)節(jié)。 |
|
|