1 / 44

第二章 基本語法

第二章 基本語法. 本章將介紹一些程式語言的基本語法,例如識別字的命名、資料型態、運算子及運算式等 。 2-1 識別字 2-2 資料型態 2-3 運算子 2-4 敘述與運算式. 2- 1 識別字. 本單元介紹什麼是保留字、管制字及識別字。. 保留字 (Keywords). 保留字是任一程式語言已事先賦予某一字串一個特別意義,所以程式設計者不得再重複賦予不同的用途。 例如 if 已被賦予決策敘述,程式設計者當然不得再定義 if 為另外的用途,以下是 Delphi 的保留字。 and downto in or string

kail
Download Presentation

第二章 基本語法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第二章 基本語法 本章將介紹一些程式語言的基本語法,例如識別字的命名、資料型態、運算子及運算式等。 • 2-1 識別字 • 2-2 資料型態 • 2-3 運算子 • 2-4 敘述與運算式

  2. 2-1識別字 本單元介紹什麼是保留字、管制字及識別字。

  3. 保留字(Keywords) 保留字是任一程式語言已事先賦予某一字串一個特別意義,所以程式設計者不得再重複賦予不同的用途。 例如 if 已被賦予決策敘述,程式設計者當然不得再定義 if 為另外的用途,以下是Delphi的保留字。 • and downto in or string • array else inherited out then • as end initialization packed threadvar • asm except inline procedure to • begin exports interface program try • case file is property type • class finalization label raise unit • const finally library record until • constructor for mod repeat uses • destructor function nil resourcestring var • dispinterface goto not set while • div if object shl with • do implementation of shr xor

  4. 管制字(Directives) 以下是Delphi的管制字,因為它在某些地方有特別意義,所以請儘量不要宣告其為識別字,以免發生不必要的錯誤 • absolute dynamic message private resident • abstract export name protected safecall • assembler external near public stdcall • automated far nodefault published stored • cdecl forward overload read varargs • contains implements override readonly virtual • default index package register write • deprecated library pascal reintroduce writeonly • dispid local platform requires

  5. 識別字(Identifier) • 真實的世界裏,每個人、事及物都有一個名稱,程式設計亦不例外,於程式設計時我們必須為每一個變數、常數、方法、函式、程序、類別、物件及套件(Package)命名,以上所有變數、常數、方法等名稱,統稱為程式語言的識別字。 Dephi的識別字命名規則如下:

  6. 1.識別字必須是以字母(大小寫的A至Z)或底線(_)開頭。1.識別字必須是以字母(大小寫的A至Z)或底線(_)開頭。 例如,以下是一些合法的識別字。 a ablOut ediIn -bb 以下則是一些非法的識別字。 7eleven //不能由數字開頭 +c //不能由+號開頭 =c //不能由=等開頭 • 2. 識別字由字母開頭後,可由字母、數字組合而成,但不得包含空白。 例如,以下則是一些合法的識別字。 a8 bb255 b2c3 以下則是一些非法的識別字。 Age#3 //不得使用字母、數字、錢字號及底線外的字元。 c+3 //不得含有運算字。 c 3 //不得含有空白。

  7. 3.識別字的長度不限,但Delphi僅能辨識前255個字元。3.識別字的長度不限,但Delphi僅能辨識前255個字元。 • 4. 識別字的大小寫均視為相同,例如Score、score及 SCORE皆代表相同的識別字。 • 5. 識別字不得使用保留字,如if、for等。 • 6. 識別字要用有意義的單字,例如StudentNumber 或AverageIncome。除非生命週期極短的變數才用 x、i或a等當識別字,也千萬不要用k23erp等這種沒意義又難記的識別字。 • 7. 識別字有多個單字時,中間可以加上底線(_),例如上例的StudentNumber可寫成 Student_Number,若擔心打字不靈光亦可寫成Stu_Num、stu_num、StuNum或stunum,其中 StuNum又稱為駱駝表示法,因為大寫字母看起來像駝峰一樣,可以避免鍵入底線的困擾、且提昇閱讀效率。

  8. 2-2 資料型態 • 資料的表示 電腦的主要工作就是處理資料,Delphi所能處理的資料為整數、浮點數、布林值、字元與字串。 分別說明如下:

  9. 整數 Delphi可以處理的整數有兩種進位方式,分別是十進位與十六進位。十進位的表示方式同我們平常的書寫方式,如 25;十六進位的表示方式為在數字的前面加上錢字號($),例如$12則為十進位的18。

  10. 浮點數 數字中含有小數點或指數的稱為浮點數。以指數為例,E或e表示10的次方,如0.0023、2.3E及2.3e-3均是表示相同的浮點數。

  11. 布林值 使用True與False可以表示布林值。

  12. 字元與字串 • 字元與字串一律使用單引號將欲表示的字元與字串兩邊括起,以下式子分別是字元與字串的表示方式。 'a'//字元 'Office XP快樂上手' //字串 • 若要使用控制字元,則應使用井字號(#)。例如,以下式子可讓Line1與Line2之間跳行與歸位。 'Line1'#13#10'Line2'

  13. 資料型態 Delphi所能處理的資料如上所述,接下來要討論的是電腦應如何儲存以上資料。因為不同性質的資料所需要的記憶體空間均不同,而Delphi為了有效地使用記憶體儲存資料,於是規劃了以下的資料型態,也就是讓小東西用小箱子裝、大東西用大箱子裝的道理,如此才能更有效率地儲存與搬運。

  14. Delphi的資料型態規劃如下,首先將資料分為六大類,Delphi的資料型態規劃如下,首先將資料分為六大類, 分別是Simple、String、Structured、Pointer、Procedural及Variant simple ordinal integer character Boolean enumerated subrange real string structured set array record file class class reference interface pointer procedural variant

  15. Simple Simple亦是資料型態的分類,它代表所有的數值型態。Simple亦可再分為Ordinal(序數)與Real(實數)型態。Ordinal代表一種可以區分數值前後次序的型態,例如Integer、Character、Boolean、Enumerated及Subrange等均稱為Ordinal型態。 只要是Ordinal型態的變數,均可套用7-4節的序數函式。

  16. Subrange型態 有些變數若有其一定的範圍,則可使用Subrange型態。例如某一個變數欲儲存學生的考試成績,可以宣告一個Subrange型態如下,其型態名稱為Tnumber。往後,Tnumber的用法就如同Real或Integer。 type Tnumber = 0..100;

  17. Real型態 Delphi可用的Real型態如下表,其中打星號(*)者稱為Generic,具有較佳的執行速度,其餘的稱為Fundamental。

  18. Boolean型態 若某一個變數的值僅有True與False,則可使用Boolean型態。Delphi的布林型態如下表所示,星號(*)表最佳的選擇,其它的是為配合不同作業系統或相容性等問題而產生的型態。

  19. Enumerated型態 • 有些變數的資料若可簡單的列舉,可使用 Enumerated 型態。其使用方式為先使用type列舉其可能值,例如12-3節的TmouseButton定義如下,其使用方法請看範例12-3a。 type TmouseButton = (mbLeft, mbRight, mbMiddle); • 或者亦可自行定義以下列舉型態,此型態的名稱為TmyColor。 type TmyColor =(Red, Yellow, Green, White);

  20. Integer型態 Integer的資料型態如下表所示,其中打星號(*)者稱為Generic,具有較佳的執行效率,其餘則稱為Fundamental。

  21. Characer型態 Characer的資料型態如下表所示,其中打星號(*)者稱為Generic,有較佳的執行效率,其餘的稱為 Fundamenal。

  22. Sring型態 Delphi可用的Sring型態如下表所示,打星號(*)的Sring是系統建議採用的型態,編譯器會依據字串的長度而自動採用ShorSring或AnsiSring。

  23. 變數宣告 變數的功能是用來輸入、處理及儲存外界的資料,而變數在使用以前均要於保留字var之後宣告,才可使用。在一些舊式的Basic語言中,變數並不需要事先宣告,卻也帶來極大的困擾。以下式子即為變數未宣告的結果,編譯器便無法回應使用者在拼字上的錯誤,而造成除錯上的困難。 student :=studend+1 上式若事先宣告suden如下: var suden : ineger ; 則編譯器遇到sudend時,便會提醒使用者此sudend並未宣告的錯誤訊息,提醒使用者補宣告或注意拼字錯誤。

  24. Delphi的變數宣告語法如下: var 變數名稱1[,變數名稱2] : 變數型態 ; 上式的變數名稱命名同識別字,以下敘述是一些變數的宣告。 var i : Ineger ; j,k : Real ; a : Sring ; 若是全域變數,亦可在變數宣告時直接給予初值各 函數或程序的區域變數則無法宣告時順便給予初值。 var i : Ineger = 10 ; a : Sring = 'Office XP快樂上手';

  25. 型態轉換(ypecas) • 不同的資料型態是否可以相互轉換,答案是可以的,但前題必須是它們所佔的記憶體空間是相同的。型態轉換的語法如下: 新型態 := 型態名稱(原型態); 例如以下敘述可將字元型態的c1轉為整數型態的a2。 c1 :='a'; a2 :=Ineger(c1); • 因為整數與變數所表示的數值範圍不同,所以整數與實數是不可互轉的,且因整數可表示的範圍較小,故可直接將整數設定給實數;但如果是實數要轉為整數,則應使用取整數的IN及runc函數,以上函數的語法及用法請看7-1節的數值函數。

  26. 常數符號的宣告 • 跟變數一樣,常數符號(以下簡稱常數)亦需要配置記憶體,與變數不同的是,常數符號正如其名稱所示,在整個程式中都不會改變其值,故稱為常數。程式設計中,有兩種表示常數的方式,一種是文字式(Ineral),例如直接以15或3.14159表示某一常數;另一種是本單元要介紹的常數符號式(Symbolic)。 • 之所以含有常數符號,是因為有些數字在程式中會不斷的重複出現,為了增加程式的可讀性及減少程式維護的麻煩,此時即可用一個有意義的符號代替,但必須在符號之前加上保留字cons,則該符號的值將永遠保持在所宣告的符號中,程式中任何位置均不可能改變其值,此稱為符號常數,簡稱常數。例如令cons PI=3.14159,則每次要使用3.14159時,只要填入PI即可(註:常數符號通常均用大寫表示)。

  27. 又例如,銀行的利率亦應以常數符號代替,因為此一常數將會在不同的程式段重覆出現很多次,且此一利率亦會常修改,此時即可在程式的開頭宣告此一常數,如以下敘述。又例如,銀行的利率亦應以常數符號代替,因為此一常數將會在不同的程式段重覆出現很多次,且此一利率亦會常修改,此時即可在程式的開頭宣告此一常數,如以下敘述。 const Rae 0.02 則當欲引用此一常數時,皆應以Rae代替0.02。此外,當此一利率變動時,亦只要 於最前面的常數宣告處修改即可,免除到處修改的麻煩。但是,此利率若未用常數宣告,則若某些程式片段未同步修改,將造成程式執行的不一致。 • 以下敘述是常數宣告的語法,其位置在var的上面或下面均可,且不用指定其型態。Delphi將會依照所輸入的值,做最適當的記憶體配置。 const 常數識別字 = 常數 以下式子即是宣告M=3。 const M = 3

  28. 範例2-2b • 示範常數的宣告與使用。 • 本例為了說明cons的位置

  29. 變數或常數的有效範圍 • 一個大型專案通常由許多表單組合而成,且每一個表單可能包含許多函式、程序或類別。這些程式通常由許多人合力完成,為了避免彼此變數間互相干擾,例如張三設sunum=15、李四又設sunum=20,則必然造成無法預期的錯誤。 • 為了防止變數互相干擾,因此有變數的有效範圍,茲將變數的有效範圍敘述如下:任一變數的宣告均屬於區域變數,例如宣告於事件函式中,它的有效範圍僅止於該事件函式,其它的函式均無法取得該區域變數的值;若宣告在表單,則其有效範圍僅止於該表單,其它的表單是無法取得該區域變數的值。關於以上敘述,請看以下範例說明。

  30. 範例2-2c 示範變數的有效範圍 程式說明: • 1. 變數a、b屬於表單區域變數,其有效範圍僅止於本表單,也就是表單內的任何函式、程序均可存取a、b的內容。 • 2. 本例於FormCreae程序中宣告變數b、c、d,則FormCreae共可存取a、b、c、d等4個變數,且於此程序中重複宣告變數b,則此變數b與表單的變數b是彼此獨立的。 • 3. 本例於bnSarClick程序中宣告變數c,則此程序共可存取變數a、b、c,其中a、b是表單的區域變數,c是本程序獨立的變數。此外,此區域變數c與FormCreae的c雖然名稱相同,但卻是彼此獨立的。

  31. 2-3 運算子 • 所謂運算子(Operaor),指的是可以對運算元(Operand)執行特定功能的特殊符號。一般而言,運算子可分為以下幾類:指定(Assignmen)運算子、算術(Arihmeic)運算子、比較(Comparison)運算子、邏輯(Logical)運算子、位元操作(Biwise)運算子及字串(Sring)運算子;而每一種運算子都可以再細分為一元(Unary)運算子與二元(Binary)運算子。一元運算子只需要一個運算元就可以操作,而二元運算子則需要兩個運算元才能夠操作。 • 在以下單元中,我們除了檢視各種不同的運算子功能外,還將討論運算子的結合律(Associaiviy)與優先順序(Precedence)。優先順序是用來決定同一式子擁有多個運算子時,每一個運算子進行運算的順序;而結合律則決定了在同一敘述中,相同優先順序的運算子執行順序。

  32. 指定運算子 • 指定運算子的符號為 := (C++、Java及VB均使用 =),其作用為將運算符號右邊運算式的值指定給運算符號左邊的運算元。所以,以下敘述sum := a+b; 是將a+b的值指定給sum。 sum := 0,a := 3,b := 5; sum := a + b; • 上式與數學的等號是不同的,所以不要一直懷疑為什麼0會等於8。其次,你不能將常數放在指定運算子的左邊,例如下式: 8 := x ; • 此為一個不合法的敘述,但下式將常數8指定給變數x為合法的。 x := 8 ;

  33. 算術運算子(Arihmeic operaors) • 算術運算子用來執行一般的數學運算,包括取負數 ( - )、取正數( + )、加( + )、減( - )、乘( * )、除( / )、整數除法(div)及取餘數(mod)等,如下表所示:

  34. 關係運算子(Relaional operaors) 關係運算子又稱為比較運算子,用於資料之間的大小比較,比較的結果可得到邏輯的rue或False,下表是Delphi中的關係運算子符號。

  35. 邏輯運算子(Logical operaors) 當同一個運算式同時具有兩個以上的關係運算子時,則每兩個關係運算子之間必須使用邏輯運算子連結,Delphi的邏輯運算子如下表示:

  36. 字串運算子(Sring operaor) 前面關係運算子的 =、<>、>、<、>= 及 <= 均適用於字串的大小比較,而下表的字串連結+運算子,則可連結兩個字串。

  37. 運算子的優先順序 於較複雜的運算式中,通常同時存在許多運算子,此時就需要定義其優先順序,下表即是Delphi關於運算子的優先順序表(有部份運算子本書並未介紹,如shl、shr,有興趣的讀者請自行研究)。

  38. 當同一運算式中、同時包含多個運算子時,優先等級高的先行運算;當運算等級相同時,則由左至右逐一運算。請看下列式子:當同一運算式中、同時包含多個運算子時,優先等級高的先行運算;當運算等級相同時,則由左至右逐一運算。請看下列式子: x+y*z • 與x+(y*z)的效果相同。 但是以下式子若不加括號,編譯器即會弄錯。 x>2 and y>3 • 因為按照Delphi的運算子優先順序表,上式應同等於以下式子: x>(2 and y)>3

  39. 3-4 敘述與運算式 • 敘述(Saemen) 凡是控制執行的順序、對運算式取值或不作任何事,均可稱為敘述。所有的敘述都要以分號(;)作結束,以下式子即是一個敘述。於Delphi中,若前一個敘述未以分號結束,則錯誤訊息通常出現在下一個敘述的開頭。 sum := sum + 1 ;

  40. 敘述區塊(Block Saemen)或 複合敘述(Compund Saemen) 在任何可以放單一敘述的地方, 也就能放敘述區塊。敘述區塊亦稱為複合敘述,一個複合敘述是由begin...end組合而成,但end之後必須再加分號(;)作為結束,如下所示。 begin t := a ; a := b ; b := t ; end;

  41. 運算式(Expression) • 任何可求得值的式子,均稱為運算式,例如5+3會傳回一個數值,所以5+3是一個運算式,所有的運算式亦可成為一個敘述,以下是一些合法的運算式。一般而言,可以放在等號右邊的東西,都可以稱為運算式 i = 0 ; a = 3 ; b = 5 ; sum := 0 ; 6 ; //傳回6 4+5 ; //傳回9 sum > 3 ; //傳回False i ; //傳回0 a + b ; //傳回8 sum := a + b ; //傳回sum = 8

  42. 註解(Commens) 適當的程式註解能增加程式的可讀性,Delphi的註解有三種表示方式,第一種如下: {我是註解} • 上式在大括號({)開始即視為註解,在編譯程式時不予以處理,直到遇到右大括號 (})為止。例如以下二式後方均為註解: x := x + 3; { x值加3} sum := sum + y; { 將y之值加至sum} • 第二種註解方式與第一種類似,如下式: (* 我是註解 *) • 第三種是單一列的註解,凡是雙斜線(//)以後的敘述,Delphi均視為註解,例如: sum := sum + y; //將y值累加至sum

More Related