Professional Documents
Culture Documents
class
true
operator
public
C++
PP LT HNG I TNG
cout this ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn
catch
inline
private
OOP
new
friend STL using bool
cin
virtual false
try
throw delete
VC
BB
Ni dung
Quy c t tn (naming convention) Quy tc trnh by tng th chng trnh Quy tc trnh by dng lnh Quy tc lin quan n hng s Quy tc lin quan n kiu t nh ngha Quy tc lin quan n bin Quy tc lin quan n hm Quy tc ch thch chng trnh
#include <iostream> using namespace std; void main() { cout << Hello World; cout << endl;
VC
BB
VC
BB
VC
BB
vs.
Hai chun ang c s dng rng ri: Quy tc t tn theo kiu lc Quy tc t tn theo phong cch Hung-ga-ri.
Phong cch lp trnh
VC
BB
Khi nim Cch vit trnh s dng cc khong trng gia cc t, c s dng trong hu ht cc ngn ng lp trnh hin i v ph bin nh C, C++, Visual Basic (VB) v JavaScript.
VC
BB
Mt s t ng ngha vi k hiu CamelCase BumpyCaps, BumpyCase CamelCaps, CamelHumpedWord CapWordsPython mixedCase trong Python (lowerCamelCase) ClCl (Capital-lower Captital-lower) HumpBackNotation InterCaps, NerdCaps, InternalCapitalization WordsStrungTogether, WordsRunTogether
Phong cch lp trnh
VC
BB
VC
BB
K hiu Hung-ga-ri
Khi nim L quy c t tn trong lp trnh my tnh c pht minh bi Charles Simonyi. Thng s dng trong mi trng lp trnh Windows nh C, C++ v Visual Basic. Tn ca bin cho bit kiu, nh s dng hoc thm ch l tm vc ca bin :
Tin t vit thng cha thng tin v kiu ca bin. Phn cn li bt u bng k t hoa cho bit bin cha thng tin g.
VC
BB
K hiu Hung-ga-ri
Phn loi theo mc ch ca tin t K hiu Hung-ga-ri hng h thng (Systems Hungarian notation) s dng tin t th hin kiu d liu thc s, v d:
lAccountNum: bin c kiu l s nguyn di (l long integer) arru8NumberList: bin l mt mng cc s nguyn 8 bit khng du (arru8 array of unsigned 8-bit integers) szName: bin l mt chui c k t kt thc (sz zero-terminated string)
10
VC
BB
K hiu Hung-ga-ri
Phn loi theo mc ch ca tin t K hiu Hung-ga-ri hng ng dng (Apps Hungarian notation) s dng tin t th hin mc ch s dng ca bin, v d:
rwPosition: bin th hin mt dng (rw row) usName: bin th hin mt chui khng an ton (us unsafe), ngha l n cn c x l trc khi s dng. strName: bin th hin mt chui cha mt tn (str string).
11
VC
BB
K hiu Hung-ga-ri
V d bBusy: kiu lun l (b boolean) cApples: s lng (c count) dwLightYears: kiu t kp (dw double word) fBusy: c trng thi (f flag) nSize: kiu s nguyn v lu s lng
(n count) iSize: kiu s nguyn v lu ch s (i index) fpPrice: kiu s chm ng (fp floating-point)
Phong cch lp trnh
12
VC
BB
K hiu Hung-ga-ri
V d dbPi: kiu s thc di (db double) pFoo: kiu con tr (p pointer) pfnFunc: con tr hm (pfn pointer to function) rgStudents: mng hoc mt vng (rg range) szLastName: chui c k t kt thc
(sz zero-terminated string) u32Identifier: kiu s nguyn 32-bit khng du (u32 unsigned 32-bit integer) stTime: cu trc thi gian (st structure)
Phong cch lp trnh
13
VC
BB
K hiu Hung-ga-ri
i vi con tr v mng thng c kiu ca phn t i km: pszOwner: con tr n chui k t c kt thc
(psz pointer to zero-terminated string) rgfpBalances: mng cc s chm ng (rgfp array/range of floating-point) aulColors: mng cc s nguyn di khng du (aul array of unsigned long)
14
VC
BB
K hiu Hung-ga-ri
Thng thy trong lp trnh Windows (trong sch Programming Windows, sch u tin v lp trnh Windows API ca Charles Petzold): wParam: tham s kiu word (w word-size) lParam: tham s kiu s nguyn di
(l long-integer) hwndFoo: bin qun l ca s (hwnd handle to a window) lpszBar: bin con tr s nguyn di n mt chui c kt thc (lpsz long pointer to a zero-terminated string)
Phong cch lp trnh
15
VC
BB
K hiu Hung-ga-ri
i khi c m rng trong C++ cho bit phm ca bin, phn cch bi du gch di: g_nWheels: bin ton cc (g global) v l s
nguyn (integer). _wheels: bin cc b (local) v khng xc nh kiu. s_wheels: bin tnh (s static). m_nWheels: thnh vin (m member) ca mt cu trc/lp v l s nguyn (n integer). m_wheels: thnh vin (m member) ca mt cu trc/lp v khng xc nh kiu.
Phong cch lp trnh
16
VC
BB
nh gi k hiu Hung-ga-ri
17
VC
BB
nh gi k hiu Hung-ga-ri
Khuyt im Vic kim tra bng mt l tha khi vic kim tra
kiu c thc hin t ng bi trnh bin dch. Mt s IDE hin i t ng nh du nhng ch s dng kiu khng tng thch. Khi kiu ca bin thay i, tn ca bin cng phi thay i nu khng s khng thng nht. Trong a s trng hp, vic bit ngha s dng ca mt bin bao hm vic bit kiu ca n. V vy, nu khng bit bin dng lm g th vic bit kiu ca n cng v ch!
Phong cch lp trnh
18
VC
BB
Mt s quan im ng ch
Linus Torvalds (cha ca h iu hnh m ngun m Linux) khng ng h k hiu Hung-ga-ri hng h thng.
Encoding the type of a function into the name (so-called Hungarian notation) is brain damagedthe compiler knows the types anyway and can check those, and it only confuses the programmer
19
VC
BB
Mt s quan im ng ch
Steve McConnell (tc gi ca nhiu sch CNPM ni ting, c tp ch Software Development xem l mt trong ba ngi c nh hng nht trong cng nghip phn mm cng vi Bill Gates v Linus Torvalds) ng h k hiu Hung-ga-ri.
Although the Hungarian naming convention is no longer in widespread use, the basic idea of standardizing on terse, precise abbreviations continues to have value. ... Standardized prefixes allow you to check types accurately when you're using abstract data types that your compiler can't necessarily check
20
VC
BB
Mt s quan im ng ch
Bjarne Stroustrup (nh khoa hc ngi an Mch pht trin NNLT C++) khng ng h k hiu Hung-ga-ri hng h thng cho NNLT C++.
No I don't recommend Hungarian. I regard Hungarian (embedding an abbreviated version of a type in a variable name) a technique that can be useful in untyped languages, but is completely unsuitable for a language that supports generic programming and object-oriented programmingboth of which emphasize selection of operations based on the type an arguments (known to the language or to the run-time support). In this case, 'building the type of an object into names' simply complicates and minimizes abstraction
21
VC
BB
Mt s quan im ng ch
Joel Spolsky (k s phn mm v tc gi ca blog v pht trin phn mm c bit v phn mm Windows) ng h k hiu Hung-ga-ri hng ng dng.
If you read Simonyis paper closely, what he was getting at was the same kind of naming convention as I used in my example above where we decided that us meant unsafe string and s meant safe string. Theyre both of type string. The compiler wont help you if you assign one to the other and Intellisense wont tell you bupkis. But they are semantically different; they need to be interpreted differently and treated differently and some kind of conversion function will need to be called if you assign one to the other or you will have a runtime bug. If youre lucky. (...) Theres still a tremendous amount of value to Apps Hungarian, in that it increases collocation in code, which makes the code easier to read, write, debug, and maintain, and, most importantly, it makes wrong code look wrong. 22 Phong cch lp trnh
VC
BB
Quy tc 1
Chng trnh nn c tch thnh nhiu n th (m-un), mi n th thc hin mt cng vic v cng c lp vi nhau cng tt. iu ny s gip chng trnh d bo dng hn v khi c chng trnh, ta khng phi c nhiu, nh nhiu cc on lnh nm ri rc hiu c iu g ang c thc hin.
23
VC
BB
Quy tc 2
Nn s dng cc tham s khi truyn thng tin cho cc chng trnh con. Trnh s dng cc bin ton cc truyn thng tin gia cc chng trnh con v nh vy s lm mt tnh c lp gia cc chng trnh con v rt kh khn khi kim sot gi tr ca chng khi chng trnh thi hnh.
24
VC
BB
Quy tc 3
Cch trnh by chng trnh cng nht qun s cng d c v d hiu. T , ta s mt t thi gian ngh v cch vit chng trnh v nh vy s c nhiu thi gian hn ngh v cc vn cn gii quyt.
25
VC
BB
Quy tc 4
Chng trnh nn gi c tnh n gin v r rng trong hu ht cc tnh hung. Vic s dng cc mo lp trnh ch th hin s kho lo ca lp trnh vin v lm tng hiu qu chng trnh ln mt cht, trong khi iu s nh mt i tnh n gin v r rng ca chng trnh.
26
VC
BB
Quy tc 4
V d
1 2 3 4 5 6 7 8 9 10 11 12 13 14
a[i++] = 1; a[i] = 1; i++; if (doSomething() == false) bool bResult = doSomething(); if (bResult == false) *x += (*xp = (2*k < (n m) ? c[k + 1] : d[k--])); if (2 * k < n m) *xp = c[k + 1]; else *xp = d[k--]; *x = *x + *xp;
Phong cch lp trnh
27
VC
BB
Quy tc 5
Chng trnh nn thc hin nh mt dng chy t trn xung di Cc ch th #include, #define trn cng. Sau n khai bo cc bin ton cc, class hay struct. Khng nn c nhng thay i bt cht do s dng goto hay continue.
28
VC
BB
Quy tc 6
Mi cu lnh nn c t ring trn mt dng chng trnh d c v d quan st cch thc hin trong qu trnh tm li (debug).
1 2 3 4 5 6 7 8 9 10
x=a+b-c*d;for(int i=0; i<n; i++) x = a + b c * d; // Kh c! // Vit thnh 2 dng
// d c hn
29
VC
BB
Quy tc 7
Cu lnh phi th hin ng cu trc chng trnh bng cch s dng hp l tht u dng (tab)
1 2 3 4 5 6 7
if (nCount == 0) printf(No data!\n); if (nCount == 0) printf(No data!\n); if (nCount == 0)
printf(No data!\n);
30
VC
BB
Quy tc 8
Cc du { } bao cc khi lnh phi c canh thng hng theo mt trong hai cch sau:
1 2 3 4 5 6 7 8 9
// Cch 1 if () { } // Cch 2 if () {
}
else { }
else {
}
31
VC
BB
Quy tc 9
Cc cu lnh nm gia cp du { } c vit tht vo mt khong tab (cc lnh ngang cp th phi tht vo nh nhau).
1 2 3 4 5 6 7 8
if (a == 1)
{ printf(Mot\n); if (a == 2) printf(Hai\n);
else
printf(Khac Mot va Hai!\n); }
32
VC
BB
Quy tc 10
Cc ton t v ton hng trong mt biu thc nn c tch ri nhau bi 1 khong trng nhm lm biu thc d c hn (tr cc ton t ++, , )
1 2 3 4 5 6 7 8
a=b*c; a = b * c; a = b ++; a = b++; a = - b; a = -b; // Kh c! // D c hn! // Khng nn! // Nn! // Khng nn! // Nn!
33
VC
BB
Quy tc 11
C khong trng ngn cch gia du phy hay chm phy vi cc tham s.
1 2 3 4 5 6 7 8 9 10 11
// Khong trng sau du , trong khai bo hm void hoanVi(int a,int b); void hoanVi(int a, int b);
34
VC
BB
Quy tc 12
35
VC
BB
Quy tc 13
36
VC
BB
Quy tc 14
Nn dng cc dng trng phn chia cc on lnh trong mt hm nh: on nhp/xut d liu, on tng ng vi cc bc x l khc nhau.
1 2 3 4 5 6 7 8 9 10 11
void main() { // (Cc) on lnh nhp y
// (Cc) on lnh x l y
// (Cc) on lnh xut Xut
}
Phong cch lp trnh
37
VC
BB
Quy tc 15
Mi dng lnh khng nn di qu 80 k t, iu ny gip vic c chng trnh d dng hn khi khng phi thc hin cc thao tc cun ngang mn hnh. Trong trng hp dng lnh qu di th nn ngt thnh nhiu dng.
1 2 3 4 5 6
int myComplexFuncuntion(unsigned int uiValue, int iValue,
int myComplexFuncuntion(unsigned int uiValue, int iValue, char cValue, int *piValue);
Phong cch lp trnh
38
VC
BB
Quy tc 16
Tn hng khng theo quy tc PascalCase, camelCase hay k hiu Hung-ga-ri m c vit in ton b v gia cc t cch nhau bng du _
1 2 3 4 5
const int NumberOfElements 100; const int NUMBEROFELEMENTS 100; const int NUMBER_OF_ELEMENTS 100;
39
VC
BB
Quy tc 17
Cc hng s khng nn vit trc tip vo chng trnh m nn s dng #define hay const nh ngha. iu ny s gip lp trnh vin d kim sot nhng chng trnh ln v gi tr ca hng s khi cn thay i th ch phi thay i mt ln duy nht gi tr nh ngha ( #define hay const). Tuy vy, khng nn dng #define thng xuyn nh ngha cc hng s, bi v trong qu trnh debug, ta s khng th xem c gi tr ca mt hng s nh ngha bng #define.
Phong cch lp trnh
40
VC
BB
Quy tc 18
Tn kiu t nh ngha l danh t c t theo PascalCase v bt u bng mt k t i din: TMyTypeName: Kiu nh ngha bng typedef SMyStructName: Kiu cu trc (structure) UMyUnionName: Kiu hp nht (union) EMyEnumName: Kiu tp hp (enumeration) CMyClassName: Lp i tng (class)
41
VC
BB
Quy tc 19
Tn bin c t theo k hiu Hung-ga-ri sao cho ngha, c th l l cc t hon chnh hoc vit tt nhng phi d c (d pht m)
1 2 3 4 5
int ntuso, nmauso; int nTuso, nMauso; int nTuSo, nMauSo;
42
VC
BB
Quy tc 20
Tn bin kiu d liu t nh ngha (typedef, struct, union, class, ) c vit theo camelCase v khng c tin t.
1 2 3 4 5
CPhanSo psPhanSo; CPhanSo PhanSo; CPhanSo phanSo;
43
VC
BB
Quy tc 21
Bin nn c khai bo gn v tr m n bt u c s dng nhm trnh vic khai bo mt lot cc bin d tha u hm hay chng trnh. Trong C chun, tt cc bin bt buc phi khai bo u khi trc khi s dng. Trong C++ bin c th khai bo bt k ni u trc khi s dng.
44
VC
BB
Quy tc 22
45
VC
BB
Quy tc 23
Cc bin khng nn c s dng li vi nhiu ngha khc nhau trong cng mt hm.
1 2 3 4 5
for (i = 0; i < n; i++) for (n = 0; n < 10; n++) // n l bin iu khin // n l s ln lp
46
VC
BB
Quy tc 24
Tn hm c vit theo camelCase v phi l ng t phn nh cng vic hm s thc hin hoc gi tr tr v ca n.
1 2 3 4 5
int SoLonNhat(int a[], int n); int TimSoLonNhat(int a[], int n); int timSoLonNhat(int a[], int n); // Khng r hnh ng // Sai quy tc t tn // OK
47
VC
BB
Quy tc 25
Nn s dng du // v du ny khng c nh hng khi s dng cp k hiu /* */ v hiu ha mt on lnh trong qu trnh sa li chng trnh. Nn nh rng trong C/C++ khng cho php cc cp du /* */ lng nhau.
// ... /* */
48
VC
BB
Quy tc 26
Nn vit ch thch ngn gn nhng y , d hiu qua vic trnh by chng trnh r rng, n gin v cch t tn hp l. Vi cc ch thch ngn, nn t n trn cng dng lnh cn ch thch. Vi cc ch thch di hn, hoc ch thch cho c mt on lnh hy t cu ch thch trn mt dng ring ngay pha trn cu lnh cn ch thch.
49
VC
BB
Quy tc 26
V d
1 2 3 4 5 6 7 8 9 10 11 12 13
if (a == 2) return true; else return laSoNguyenTo(a)); if (argc > 1) { // M v x l tp tin FILE *fp = fopen(argv[1], rb); if (fp != NULL) fclose(fp); }
Phong cch lp trnh
50
VC
BB
Quy tc 27
51
VC
BB
Quy tc 28
Vit ch thch cho tng hm v cho tng tp tin m ngun (.h v .cpp).
1 2 3 4 5 6 7 8 9 10 11 12
// M t : Chng trnh x l mng mt chiu
// Tc gi
// Email
: ng Bnh Phng
: dbphuong@fit.hcmus.edu.vn
// M t
// Kiu tra v
// Tham s: int a[] Mng mt chiu cc phn t kiu int // Tham s: int n int timSoLonNhat(int a[], int n);
52