Giới thiệu phong cách lập trình với C và C++ của thầy Nguyễn Việt Hà
Trang 1Sì l÷ñc phong c¡ch lªp tr¼nh trong C/C++
Nguy¹n Ngåc B£o - Nguy¹n Vi»t H
1 Giîi thi»u
Ch÷ìng tr¼nh m¡y t½nh l mët d¤ng t i li»u r§t phùc t¤p V¼ th¸ º ch÷ìng tr¼nh ÷ñc rã r ng v d¹ hiºu c¦n ph£i tu¥n thõ theo mët phong c¡ch lªp tr¼nh khoa håc, thèng nh§t i·u n y s³ gióp gi£m bît cæng sùc n¸u sau n y c¦n ph£i åc, gï rèi v sûa l¤i ch÷ìng tr¼nh (°c bi»t trong tr÷íng hñp ph¡t triºn theo nhâm) T i li»u n y giîi thi»u mët c¡ch sì l÷ñc v· phong c¡ch lªp tr¼nh trong C/C++
2 °t t¶n
T¶n ph£i °t câ þ ngh¾a! °t t¶n câ þ ngh¾a s³ gióp ch÷ìng tr¼nh d¹ hiºu
v g¦n vîi t÷ duy cõa ng÷íi lªp tr¼nh hìn Tr¡nh c¡ch °t t¶n chung chung ho°c c¡c t¶n m°c ành nh÷ untitled, noName, var1
2.1 Quy ֔c chung
°t t¶n theo mët sè quy ÷îc chung s³ gióp ng÷íi lªp tr¼nh x¡c ành ÷ñc þ ngh¾a cõa m¢ ngay tø t¶n cõa chóng
- T¶n bi¸n: vi¸t k¸t hñp chú hoa-chú th÷íng, bt ¦u b¬ng chú th÷íng V½ dö: a, sum, totalNumbers
- T¶n h¬ng: vi¸t to n bë b¬ng chú hoa, sû döng d§u g¤ch d÷îi (_) º ph¥n t¡ch c¡c tø V½ dö: MAX_STUDENTS
- T¶n kiºu (class, struct ): ph£i l mët danh tø, vi¸t k¸t hñp chú hoa-chú th÷íng, bt ¦u b¬ng hoa-chú hoa V½ dö: OddNumber, EvenNumber
- T¶n h m: ph£i l mët cöm ëng tø, vi¸t k¸t hñp chú hoa, chú th÷íng, bt ¦u b¬ng chú th÷íng V½ dö: getName(), calculateSum()
Trang 2- C¡c chú vi¸t tt khæng n¶n vi¸t to n b¬ng chú hoa khi sû döng l m t¶n V½ dö: exportHtmlSource(), openDvdPlayer()
- Cè gng vi¸t t¶n b¬ng ti¸ng Anh v¼ ti¸ng Vi»t khæng d§u th÷íng g¥y khâ hiºu
2.2 Quy ÷îc cö thº
D÷îi ¥y giîi thi»u mët sè quy ÷îc cö thº èi vîi °t t¶n:
- C¡c bi¸n ¸m (v½ dö trong váng l°p) n¶n l i, j, k
- Bi¸n v ph÷ìng thùc bool n¶n dòng ti¸p ¦u ngú is V½ dö: isFound, isStudent() Ngo i ra trong tøng tr÷íng hñp cö thº câ thº sû döng c¡c ti¸p ¦u ngú kh¡c nh÷ has, can V½ dö: hasStudent(), canCalculated() Khæng n¶n dòng t¶n câ þ ngh¾a phõ ành nh÷ hasNoStudent
- Ph÷ìng thùc y¶u c¦u t½nh to¡n g¼ n¶n dòng ti¸p ¦u ngú compute V½ dö: computeSum(), computeAverage()
- Ph÷ìng thùc y¶u c¦u t¼m ki¸m g¼ â n¶n dòng ti¸p ¦u ngú find V½ dö: findMaxElement(), findSortedPath()
- Bi¸n biºu di¹n sè l÷ñng èi t÷ñng n¶n dòng cho ti¸p ¦u ngú n V½ dö: nStudents, nElements
3 ành d¤ng
C«n ch¿nh ¦u dáng èi vîi méi o¤n code b¬ng kþ tü tab Khæng sû döng
kþ tü space º c«n ch¿nh C¡c d§u {} ph£i ÷ñc giâng th¯ng h ng i·u n y gióp ph¥n bi»t rã r ng c¡c khèi ch÷ìng tr¼nh
V½ dö:
while (!done) {
doSomething();
if (isFound(a)) {
done = moreToDo();
}
}
Trang 3Khai b¡o bi¸n ho°c vi¸t c¡c c¥u l»nh n¶n c«n ch¿nh th¯ng h ng º d¹ åc (dòng kþ tü tab)
V½ dö:
int minPosition, averagePosition;
float x,y,z;
minPosition = computeMinPostion (x, y, z);
averagePosition = computeAvgPostion (x, y, z);
Méi dáng khæng n¶n qu¡ 80 kþ tü i·u n y £m b£o cho ch÷ìng tr¼nh n¬m trong mët trang m n h¼nh N¸u dáng qu¡ d i câ thº ngt dáng v vi»c ngt dáng ph£i ÷ñc thº hi»n rã r ng:
V½ dö:
totalSum = (a + b +
c + d + e);
void setStudentInfo (String name,
int age);
èi vîi c¥u l»nh i·u ki»n (if-else, while ):
- H¤n ch¸ sû döng i·u ki»n d÷îi d¤ng mët biºu thùc phùc logic t¤p m n¶n t¡ch th nh c¡c i·u ki»n nhä
- Ph¦n x£y ra th÷íng xuy¶n °t trong khèi if, ph¦n ½t x£y ra hìn °t trong khèi else
- N¶n t¡ch i·u ki»n v c¥u l»nh thüc hi»n ra th nh hai dáng ri¶ng V½ dö:
if (isDone)
doCleanup();
4 Chó th½ch
Chó th½ch l r§t quan trång v c¦n thi¸t khi vi¸t m¢ Câ hai lo¤i chó th½ch
l : // cho chó th½ch tøng dáng l»nh v /* */ cho chó th½ch mët khèi l»nh Mët sè quy ành èi vîi chó th½ch:
Trang 4- Méi file ·u ph£i bt ¦u b¬ng mët khèi chó th½ch mæ t£ sì l÷ñc v· file
â Tr÷îc méi ph÷ìng thùc công n¶n câ mët dáng chó th½ch mæ t£ sì l÷ñc ph÷ìng thùc â Chó th½ch ngo i t¡c döng gi£i th½ch ch÷ìng tr¼nh cán gióp d¹ d ng ph¥n bi»t và tr½ cõa c¡c khèi m¢ l»nh
V½ dö:
//
-// Sort a list of integer numbers
// using buble sort
void bubleSort(int* a){
}
//
-// Sort a list of integer numbers
// using merge sort
void mergeSort(int* a){
}
- Sû döng // º gi£i th½ch ch÷ìng tr¼nh (kº c£ vîi tr÷íng hñp nhi·u dáng) v /**/ º t¤m bä c¡c o¤n m¢ thøa khi gï rèi
- N¶n vi¸t chó th½ch ngay trong khi lªp tr¼nh º £m b£o khæng qu¶n ngay nhúng þ t÷ðng khi lªp tr¼nh Tr¡nh vi¸t xong m¢ rçi mîi bê xung chó th½ch
- Câ thº chó th½ch trong th¥n ph÷ìng thùc nh÷ng khæng n¶n l¤m döng chó th½ch i·u n y s³ l m cho m¢ ch÷ìng tr¼nh ríi r¤c v khâ åc Tr÷íng hñp c¦n gi£i th½ch nhi·u n¶n sû döng c¡c t i li»u i k±m b¶n ngo i
T i li»u
[1] Geotechnical Software Services C++ Programming Style Guidelines, 2006
[2] L.W Cannon et.al Recommended C Style and Coding Standards, 1997