You are on page 1of 52

B mn Cng ngh phn mm Khoa Cng ngh thng tin Trng i hc Khoa hc T nhin VCBB 3.

class

true

operator

public

C++

PP LT HNG I TNG
cout this ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn

catch

PHONG CCH LP TRNH

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;

Phong cch lp trnh

Quy c t tn (naming convention)

VC

BB

Sc mnh ca lm vic nhm

Phim qung co ca hng Coca-Cola


Phong cch lp trnh

Quy c t tn (naming convention)

VC

BB

V sao phi c chun v quy c?

Phong cch lp trnh

Quy c t tn (naming convention)

VC

BB

Quy c t tn trong lp trnh

Ngoi tnh ng n, chng trnh my tnh cn phi d c v d hiu.

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

Quy c t tn (naming convention)

VC

BB

Quy tc lc (Camel Case)

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.

Phong cch lp trnh

Quy c t tn (naming convention)

VC

BB

Quy tc lc (Camel Case)

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

Quy c t tn (naming convention)

VC

BB

Quy tc lc (Camel Case)

Phn loi UpperCamelCase (thng gi l PascalCase) nu k t u tin ca cu c vit hoa. V d: TheQuickBrownFoxJumpsOverTheLazyDog

lowerCamelCase (thng gi l camelCase)


nu k t u tin ca cu c vit thng. V d: theQuickBrownFoxJumpsOverTheLazyDog
Phong cch lp trnh

Quy c t tn (naming convention)

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.

Phong cch lp trnh

Quy c t tn (naming convention)

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)

Phong cch lp trnh

10

Quy c t tn (naming convention)

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).

Phong cch lp trnh

11

Quy c t tn (naming convention)

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

Quy c t tn (naming convention)

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

Quy c t tn (naming convention)

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)

Phong cch lp trnh

14

Quy c t tn (naming convention)

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

Quy c t tn (naming convention)

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

Quy c t tn (naming convention)

VC

BB

nh gi k hiu Hung-ga-ri

u im Kiu bin c th thy c t tn bin . Nhiu bin cc nhau vi cng ng ngha c th


c s dng trong cng mt khi m ngun: iWidth, fWidth, dWidth Cc tn bin c thng nht hn. C th pht hin d dng vic p kiu khng ph hp hoc cc biu thc s dng kiu khng tng thch khi c m ngun. Trnh s dng nhm thao tc: heightWindow = window.getWidth()
Phong cch lp trnh

17

Quy c t tn (naming convention)

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

Quy c t tn (naming convention)

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

Phong cch lp trnh

19

Quy c t tn (naming convention)

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

Phong cch lp trnh

20

Quy c t tn (naming convention)

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

Phong cch lp trnh

21

Quy c t tn (naming convention)

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

Quy tc trnh by tng th chng 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.

Phong cch lp trnh

23

Quy tc trnh by tng th chng trnh

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.

Phong cch lp trnh

24

Quy tc trnh by tng th chng trnh

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.

Phong cch lp trnh

25

Quy tc trnh by tng th chng trnh

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.

Phong cch lp trnh

26

Quy tc trnh by tng th chng trnh

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

Quy tc trnh by tng th chng trnh

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.

Phong cch lp trnh

28

Quy tc trnh by dng lnh

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

for (int i = 0; i < n; i++)


// Thc hin bao nhiu ln khi debug? while (i < 100) i++;

// d c hn

// Phi theo di i bit if c thc hin khng!


if (i < 100) i++;
Phong cch lp trnh

29

Quy tc trnh by dng lnh

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);

Phong cch lp trnh

30

Quy tc trnh by dng lnh

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 {
}

Nn vit cp du { } trc ri vit cc lnh vo gia trnh thiu cc du ngoc ny.


Phong cch lp trnh

31

Quy tc trnh by dng lnh

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); }

Phong cch lp trnh

32

Quy tc trnh by dng lnh

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!

Phong cch lp trnh

33

Quy tc trnh by dng lnh

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);

// Khong trng sau du , trong li gi hm


hoanVi(x,y); hoanVi(x, y); // Khong trng sau du ; trong vng lp for

for (int i = 1;i < n;i++)


for (int i = 1; i < n; i++)

Phong cch lp trnh

34

Quy tc trnh by dng lnh

VC

BB

Quy tc 12

Nn c khong trng gia t kha v du (, nhng khng nn c khong trng gia tn hm v du (


1 2 3 4 5 6 7 8 9 10
// Khng nn c khong trng gia hoanVi v ( void hoanVi (int a, int b); void hoanVi(int a, int b); // Nn c khong trng gi if v (

// Khng nn c khong trng gia strcmp v (


if(strcmp (strInput, info) == 0) if (strcmp(strInput, info) == 0)
Phong cch lp trnh

35

Quy tc trnh by dng lnh

VC

BB

Quy tc 13

Nn s dng cc du ( ) khi mun trnh cc li v u tin ton t


1 2
int i = a >= b && c < d && e <= g + h; int i = (a >= b) && (c < d) && (e <= (g + h));

Phong cch lp trnh

36

Quy tc trnh by dng lnh

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

Quy tc trnh by dng lnh

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

Quy tc lin quan n hng s

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;

Phong cch lp trnh

39

Quy tc lin quan n hng s

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

Quy tc lin quan n kiu t nh ngha

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)

Phong cch lp trnh

41

Quy tc lin quan n bin

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;

Phong cch lp trnh

42

Quy tc lin quan n bin

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;

Phong cch lp trnh

43

Quy tc lin quan n bin

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

Quy tc lin quan n bin

VC

BB

Quy tc 22

Mi bin nn khai bo trn mt dng nhm d ch thch v ngha ca mi bin.


1 2 3 4
float fHeSoA, fHeSoB, fNghiem; float fHeSoA, fHeSoB; float fNghiem; // ! // H s a, b ca pt bc 1 // Nghim ca pt bc 1

Phong cch lp trnh

45

Quy tc lin quan n bin

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

Phong cch lp trnh

46

Quy tc lin quan n hm

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

Phong cch lp trnh

47

Quy tc ch thch chng trnh

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.
// ... /* */

Phong cch lp trnh

48

Quy tc ch thch chng trnh

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.

Phong cch lp trnh

49

Quy tc ch thch chng trnh

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

// Trng hp c bit // Trng hp khc

50

Quy tc ch thch chng trnh

VC

BB

Quy tc 27

Khng nn lm dng ch thch, c gng gi cho chng trnh ca bn d c, d hiu.


1
i++; // Cu lnh ny nhm tng i thm 1 n v!!!

Phong cch lp trnh

51

Quy tc ch thch chng trnh

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

// Ngy cp nht : 15/06/2011 // Tn hm : timSoLonNhat

// M t
// Kiu tra v

: Tm s ln nht trong mng cho trc


: int S lng phn t

// Tham s: int a[] Mng mt chiu cc phn t kiu int // Tham s: int n int timSoLonNhat(int a[], int n);

Phong cch lp trnh

52

You might also like