何雪英
摘要:C++是國內(nèi)大多數(shù)高校的計算機專業(yè)都開設(shè)的一門專業(yè)基礎(chǔ)課,然而在這門課的教學中,很少有人重視編程習慣的培養(yǎng)。為此,本文通過介紹一些良好的編程風格,結(jié)合筆者在實踐方面的經(jīng)驗,對培養(yǎng)學生的編程習慣提出了一些建議和看法,以使得學生在學習程序設(shè)計初期就養(yǎng)成良好的編程習慣。
關(guān)鍵詞:C++教學;編程習慣;編程風格;高質(zhì)量代碼
中圖分類號:G642? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)22-0126-02
開放科學(資源服務)標識碼(OSID):
1 引言
C++作為一門優(yōu)秀的面向?qū)ο蟮某绦蛟O(shè)計語言,是絕大多數(shù)高校計算機專業(yè)開設(shè)的一門必修課。然而在這門課的教學中,教師往往只重視學生語法學習和算法能力的培養(yǎng),認為只要學生所編寫的程序可以通過調(diào)試并能得到正確結(jié)果就可以了,卻忽視了最基本的編程習慣的培養(yǎng)。實際上,良好的編程習慣在增加程序的可讀性、可維護性和可重用性,提高程序的質(zhì)量等方面,具有非常重要的作用。因此,幫助學生認識到編程習慣的重要性并注意培養(yǎng)他們這方面的能力,使學生在學習高級語言程序設(shè)計初期就接受規(guī)范編程的教育非常重要,這樣可以使得我們的大學生在走出校園前就已經(jīng)具備了良好的編程素養(yǎng),為以后進一步的學習和應用打下良好的基礎(chǔ)。本文從標識符的命名、注釋、代碼布局、類的聲明和函數(shù)設(shè)計規(guī)則5個方面介紹了一些好的編程規(guī)范,并提出具體可行的實踐方法,希望能夠幫助學生培養(yǎng)良好的編程習慣, 寫出高質(zhì)量的代碼。
2編程習慣
養(yǎng)成良好的編程習慣,就是在程序設(shè)計過程中要遵循好的程序設(shè)計規(guī)范,也就是編程風格。包括標識符的命名、注釋、代碼布局、類的聲明和函數(shù)設(shè)計規(guī)則等。
2.1標識符命名
標識符包括常量名、變量名、函數(shù)名以及對象名等。標識符的命名應做到既簡單直觀又能見名知意。名字太簡單不宜于閱讀者理解程序,因此建議除了循環(huán)變量可以使用“i,j”等簡單的名字外,其他盡量使用精煉且有意義的名字,可以采用英文單詞或其組合,便于記憶和理解,切忌采用漢語拼音命名。如比較著名的匈牙利命名法,每個標識符的開頭以其數(shù)據(jù)類型的縮寫命名,然后再加上代表該標識符含義或作用的英文單詞簡寫共同組成。如定義用于計數(shù)的整型變量為iCount,定義用于表示性別的字符型變量為cSex等。另外,建議對局部變量小寫,符號常量、宏大寫[1]。
2.2 注釋
注釋是指程序設(shè)計者在編寫代碼時所添加的一些說明性語句,只是起到一個解釋說明的作用,對程序本身的執(zhí)行并沒有影響。它是提高程序可讀性的必要手段,不僅可以幫助閱讀者很快地了解程序的功能和結(jié)構(gòu),對程序設(shè)計者本人也是很重要的,有時候我們閱讀自己編寫沒有注釋的代碼,如果間隔時間比較久,理解起來也會很費勁甚至難以讀懂,更不用說去閱讀他人編寫的代碼了。因此,養(yǎng)成良好的編程習慣,注釋必不可少。
程序的注釋可分為序言性注釋和功能性注釋[2]。序言性注釋是對程序整體性的介紹,通常放在程序開頭,內(nèi)容一般包括:介紹各模塊的用途和功能;對函數(shù)參數(shù)及調(diào)用形式進行描述;有關(guān)數(shù)據(jù)相關(guān)屬性的描述,如名稱、用途、約束等;有關(guān)開發(fā)信息簡介,如模塊設(shè)計者、修改者、修改說明及日期等。功能性注釋位于源程序中,通常使用縮進、空行或括號,來區(qū)分源程序和注釋,對程序段的功能進行描述。這里需要注意的是功能性注釋描述的是程序要“做什么”,而不是“怎么做”;描述的對象是一段程序, 而非每一條語句。
2.3 代碼布局
程序中代碼的布局對于程序的可讀性和可維護性也有很大影響,適當?shù)睦每s進、空格、空行等能使程序更整潔美觀,層次結(jié)構(gòu)更清晰,方便閱讀和維護[3-4]。對比圖1(良好的代碼布局)和圖2(不良的代碼布局),前者的優(yōu)勢顯而易見。
[#include
using namespace std;
int main( )
{
int i;
int sum = 0;
cin >> i;
while (i <= 10)
{
sum = sum + i;
i++;
}
cout << “sum=” << sum << endl;
return 0;
} #include
using namespace std;
int main( )
{int i, sum=0;
cin>>i;
while (i<=10)
{sum=sum+i;
i++;}
cout << “sum=”sum << endl;
return 0;
}
圖1? 良好的代碼布局 圖2? 不良的代碼布局 ]
(1)代碼行的書寫:每條語句最好單獨占用一行,不在一行上書寫多個語句,也不將一條語句分成幾行來寫。這樣既方便對相關(guān)內(nèi)容進行注釋,又增加了程序的可讀性。
(2)縮進和對齊:對于嵌套的層次結(jié)構(gòu)采用鋸齒形的書寫方式,根據(jù)語句間的邏輯關(guān)系進行語句的對齊和縮進。邏輯上屬于順序結(jié)構(gòu)的語句要對齊,邏輯上屬于嵌套的語句要往里縮進,可以利用tab鍵進行縮進和對齊。這樣的程序,層次分明,邏輯結(jié)構(gòu)一目了然,可讀性強。
(3)空格和空行:過于擁擠的程序,可讀性自然大大降低??崭窈涂招惺浅绦蛑兄饕姆指舴侠淼厥褂盟鼈?,會使程序看起來整潔美觀,從而增進程序的可讀性。
(4) 大括號的位置
對于大括號的位置一般有兩種風格:一種風格是“{”獨占一行,如圖3所示。另一種風格是將“{”放在一行的最后。如圖4所示。
[if (condition )
{
…/ / programe code
} if (condition){
…/ / programe code
} 圖3? ?大括號的位置 圖4? 大括號的位置 ]
推薦使用圖3的風格,很顯然,這種風格更直觀,更易區(qū)分出程序塊的位置,且便于檢查配對情況。
2.4 類的聲明
在類的聲明中,具有不同訪問屬性(private、public、protected)的成員的出現(xiàn)順序可以任意,但一個成員只能具有一種訪問屬性[5]。但在實際應用時,習慣將public類型成員放在其他類型成員的前面,這樣方便閱讀,因為用戶更關(guān)心類提供的接口或服務。
在規(guī)模較大的項目中,通常把類的聲明放在頭文件中(*.h),類的實現(xiàn)放在*.cpp文件中,類的使用放在主函數(shù)文件中,在*.cpp文件和主函數(shù)文件中使用#include包含*.h文件。
2.5 函數(shù)
在面向?qū)ο蟮某绦蛟O(shè)計中,函數(shù)是對功能的抽象,通常將相對獨立的、經(jīng)常使用的功能抽象為函數(shù)。由于函數(shù)可被重復使用,而且使用時只需了解函數(shù)的功能和調(diào)用方法,無須關(guān)注函數(shù)的實現(xiàn)細節(jié),因而提高了代碼的重用率和程序開發(fā)的效率,同時也便于多人的分工協(xié)作和維護。
函數(shù)設(shè)計總的原則是應該功能單一、規(guī)模小。下面重點論述函數(shù)的參數(shù)、返回值和內(nèi)部實現(xiàn)的一些規(guī)則。
2.5.1函數(shù)參數(shù)的規(guī)則
(1)完整定義參數(shù)。不要省略參數(shù)類型和參數(shù)名,沒有參數(shù)時,使用void填充。
(2)參數(shù)個數(shù)不要太多。
(3)參數(shù)名要恰當,順序要合理。例如:對于字符串復制函數(shù)strcpy的兩個參數(shù),如果僅命名為str1、str2,很難區(qū)分出拷貝順序,而采用dstStr、srcStr這種能夠區(qū)分目的參數(shù)和源參數(shù)的命名方式,拷貝順序一目了然。
void strcat(char *str1, char *str2)? ?//不良的代碼習慣
void strcat(char *dstStr, char *srcStr)? ?//良好的代碼習慣
2.5.2函數(shù)返回值的規(guī)則
(1)不要省略函數(shù)返回值的類型。沒有返回值時,聲明為void。
(2)確保返回值類型與聲明的函數(shù)類型一致。
2.5.3函數(shù)實現(xiàn)規(guī)則
(1)盡量少用全局變量,確保函數(shù)的單入口和單出口。
(2)盡量少用靜態(tài)局部變量。相同的輸入產(chǎn)生相同的輸出。
(3)主函數(shù)盡量簡短。通常只有幾個函數(shù)調(diào)用語句,只是實現(xiàn)對其他功能函數(shù)的調(diào)用,而這些函數(shù)的定義全在主函數(shù)外實現(xiàn)。
3 實踐方法
針對以上介紹的良好的編程風格,如何融匯到日常的C++的教學中,使學生在學習編程之初就養(yǎng)成良好的編程習慣,筆者提出了自己的一些建議和看法,并付諸了教學實踐,效果顯著。
3.1 提高對編程習慣重要性的認識
要想讓學生認識到好的編程習慣的重要性,首先要在思想上引起學生的重視,才有可能付諸實踐。
(1)把編程習慣體現(xiàn)在課堂上。教師的課件、教案都嚴格遵循好的編程風格;并且教師在講課的過程中,要把編程習慣融入每個具體的實例中,讓學生時刻都能感受到編程習慣的優(yōu)勢和重要性。
(2)把用人單位尤其是一些大型軟件公司對編程的要求告訴學生,并找一些實例給學生看,讓學生感受什么是好的代碼風格。
(3)設(shè)計一定數(shù)量的綜合性實驗,讓學生分工合作完成。因為合作的過程中要讀其他同學的代碼,在這個過程中學生能親身感受到不好的代碼風格給自己帶來的種種困難,從而認識到養(yǎng)成良好編程習慣的重要性。
3.2 納入考核標準
在實驗成績計算辦法中增加編程習慣所占的比重。無論是平時布置的電子作業(yè),還是最終的考試答題中,都要求學生必須遵守這些編程習慣,并且占一定的分值。
4 結(jié)束語
以上所述,只是筆者在多年的C++教學中總結(jié)出來的一些心得和體會,實際上在編程習慣方面還有很多其他約定俗成的風格,還有很多值得我們挖掘和探討的問題,編程習慣的培養(yǎng)任重而道遠。
參考文獻:
[1]何靈敏,許翔,等.C++教學中編程習慣的養(yǎng)成[J].計算機教育,2011.
[2]嚴軼群,劉濤.淺論C語言學習方法和編程風格[J].蘭州工業(yè)高等??茖W校學報,2009.
[3]王志超.大學生編程習慣的培養(yǎng)[J].吉林教育,2009.
[4]李寧.論C語言中高質(zhì)量代碼編寫的規(guī)范問題[J].電腦知識與技術(shù),2015.
[5]鄭莉,董淵,等.C++語言程序設(shè)計[M].清華大學出版社,2006.
【通聯(lián)編輯:王力】