SlideShare a Scribd company logo
1 of 50
Download to read offline
Bộ môn Công nghệ phần mềm
Khoa Công nghệ thông tin
Trường Đại học Khoa học Tự nhiên
VCBB© 13.09a

class
operator

true
public

C++

PP LT HƯỚNG ĐỐI TƯỢNG
cout

catch

ThS. Đặng Bình Phương

this

dbphuong@fit.hcmus.edu.vn

PHONG CÁCH LẬP TRÌNH

inline
new

cin
friend

STL

bool
using

OOP

try
virtual

false

private

throw
delete

1
1 2 3 4 5 6 7 8

VC


BB

Nội dung

Quy ước đặt tên (naming convention)
Quy tắc trình bày tổng thể chương trình
Quy tắc trình bày dòng lệnh
Quy tắc liên quan đến hằng số
Quy tắc liên quan đến kiểu tự định nghĩa
Quy tắc liên quan đến biến
Quy tắc liên quan đến hàm
Quy tắc chú thích chương trình

#include <iostream>
using namespace std;
void main()
{
cout << “Hello World”;
cout << endl;

Phong cách lập trình

2
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Sức mạnh của làm việc nhóm

Phim quảng cáo của hãng Coca-Cola
Phong cách lập trình

3
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Vì sao phải có chuẩn và quy ước?

Phong cách lập trình

4
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Quy ước đặt tên trong lập trình

Ngoài tính đúng đắn, chương trình máy tính
cần phải dễ đọc và dễ hiểu.

vs.

Hai chuẩn đang được sử dụng rộng rãi:
 Quy tắc đặt tên theo kiểu “lạc đà”.
 Quy tắc đặt tên theo phong cách Hung-ga-ri.
Phong cách lập trình

5
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Quy tắc “lạc đà” (Camel Case)

Khái niệm
 Cách viết tránh sử dụng các khoảng trắng
giữa các từ, được sử dụng trong hầu hết các
ngôn ngữ lập trình hiện đại và phổ biến như
C, C++, Visual Basic (VB) và JavaScript.

Phong cách lập trình

6
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Quy tắc “lạc đà” (Camel Case)

Một số từ đồng nghĩa với ký hiệu CamelCase
 BumpyCaps, BumpyCase
 CamelCaps, CamelHumpedWord
 CapWordsPython
 mixedCase trong Python (lowerCamelCase)
 ClCl (Capital-lower Capital-lower)
 HumpBackNotation
 InterCaps, NerdCaps, InternalCapitalization
 WordsStrungTogether, WordsRunTogether
Phong cách lập trình

7
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Quy tắc “lạc đà” (Camel Case)

Phân loại
 UpperCamelCase (thường gọi là PascalCase)
nếu ký tự đầu tiên của câu được viết hoa.
Ví dụ:
TheQuickBrownFoxJumpsOverTheLazyDog
 lowerCamelCase (thường gọi là camelCase)
nếu ký tự đầu tiên của câu được viết thường.
Ví dụ:
theQuickBrownFoxJumpsOverTheLazyDog
Phong cách lập trình

8
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Ký hiệu Hung-ga-ri

Khái niệm
 Là quy ước đặt tên trong lập trình máy tính
được phát minh bởi Charles Simonyi.
 Thường sử dụng trong môi trường lập trình
Windows như C, C++ và Visual Basic.
 Tên của biến cho biết kiểu, ý định sử dụng
hoặc thậm chí là tầm vực của biến đó:
•
•

Tiền tố viết thường chứa thông tin về kiểu của biến.
Phần còn lại bắt đầu bằng ký tự hoa cho biết biến
chứa thông tin gì.
Phong cách lập trình

9
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Ký hiệu Hung-ga-ri

Phân loại theo mục đích của tiền tố
 Ký hiệu Hung-ga-ri hướng hệ thống
(Systems Hungarian notation) sử dụng tiền tố
để thể hiện kiểu dữ liệu thực sự, ví dụ:
•
•

lAccountNum (“l” – long integer)
szName (“sz” – zero-terminated string)

 Ký hiệu Hung-ga-ri hướng ứng dụng
(Apps Hungarian notation) sử dụng tiền tố để
thể hiện mục đích sử dụng của biến, ví dụ:
•
•

rwPosition (“rw” – row, dòng)
fBusy (“f” – flag, cờ trạng thái)
Phong cách lập trình

10
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Một số Ký hiệu Hung-ga-ri thường gặp

Tiền tố chỉ kiểu dữ liệu của biến (type prefix):
Tiền tố

Ý nghĩa

b

boolean

c

char (chứa ký tự)

n, i

short, int, long, char

f, fp

floating-point

d, db

double, long double

sz

zero-terminated string

str

C++ string

Ví dụ
bool bHasEffect;
char cLetter;
int nValue;
float fPrice, fpPrice;
double dPi, dbPi;
char szName[20];
std::string strName;

Tiền tố n, f và d thường được sử dụng hơn tiền tố i, fp, db.
Tiền tố n thường được sử dụng hàm ý số lượng (count) còn tiền tố i được sử
dụng hàm ý chỉ số (index).

Phong cách lập trình

11
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Một số Ký hiệu Hung-ga-ri thường gặp

Tiền tố bổ nghĩa cho kiểu dữ liệu (type modifier)
được đặt trước tiền tố kiểu dữ liệu của biến
(type prefix) muốn áp dụng:
Tiền tố

Ý nghĩa

u

unsigned

a, rg

pointer

pfn

function pointer

pa

dynamic array

unsigned int unValue;
unsigned short u16Value;
unsigned long u32Value;

array, range

p

Ví dụ

int anValue, rgnValue;
int* pnValue;
char* pszName;
int (pfnFunc)(int);
int* panValue = new int[10];

Tiền tố a thường được sử dụng hơn tiền tố rg.
Phong cách lập trình

12
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Một số Ký hiệu Hung-ga-ri thường gặp

Tiền tố bổ nghĩa cho tầm vực (scope modifier)
được đặt trước tiền tố bổ nghĩa cho kiểu dữ liệu
(type modifier) muốn áp dụng:
Tiền tố

Ý nghĩa

Ví dụ

g_

biến toàn cục (global)

g_nValue, g_value

_

biến cục bộ (local)

s_

biến tĩnh (static)

s_nValue, s_value

m_

thành viên (member)
của cấu trúc/lớp

m_nValue, m_value

_nValue, _value

Phong cách lập trình

13
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Một số Ký hiệu Hung-ga-ri thường gặp

Thường thấy trong lập trình Windows (trong
sách “Programming Windows”, sách đầu tiên về
lập trình Windows API của Charles Petzold)
Tiền tố

Ý nghĩa

Ví dụ

w

word-size

wParam

l

long-integer

lParam

hwnd

handle to a window

hwndFoo

lpsz

long pointer to a zero-terminated string

lpszBar

Phong cách lập trình

14
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Đánh giá ký hiệu Hung-ga-ri

Ưu điểm
 Kiểu biến có thể thấy được từ tên biến đó.
 Nhiều biến các nhau với cùng ngữ nghĩa có thể
được sử dụng trong cùng một khối mã nguồn:
nWidth, fWidth, dWidth.
 Các tên biến được thống nhất hơn.
 Có thể phát hiện dễ dàng việc ép kiểu không
phù hợp hoặc các biểu thức sử dụng kiểu không
tương thích khi đọc mã nguồn.
 Tránh sử dụng nhầm thao tác:
heightWindow = window.getWidth()
Phong cách lập trình

15
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Đánh giá ký hiệu Hung-ga-ri

Khuyết điểm
 Việc kiểm tra bằng mắt là thừa khi việc kiểm tra
kiểu được thực hiện tự động bởi trình biên dịch.
 Một số IDE hiện đại tự động đánh dấu những chỗ
sử dụng kiểu không tương thích.
 Khi kiểu của biến thay đổi, tên của biến đó cũng
phải thay đổi nếu không sẽ không thống nhất.
 Trong đa số trường hợp, việc biết ý nghĩa sử
dụng của một biến bao hàm việc biết kiểu của nó.
Vì vậy, nếu không biết biến dùng để làm gì thì
việc biết kiểu của nó cũng vô ích!
Phong cách lập trình

16
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Một số quan điểm đáng chú ý
Linus Torvalds (cha đẻ của hệ điều
hành mã nguồn mở Linux)
không ủng hộ ký hiệu Hung-ga-ri
hướng hệ thống.

“Encoding the type of a function into the name (so-called Hungarian
notation) is brain damaged—the compiler knows the types anyway and can
check those, and it only confuses the programmer”

Phong cách lập trình

17
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Một số quan điểm đáng chú ý

Steve McConnell (tác giả của nhiều
sách CNPM nổi tiếng, được tạp chí
Software Development xem là một
trong ba người có ảnh hưởng nhất
trong công nghiệp phần mềm cùng với Bill Gates
và Linus Torvalds) ủng hộ ký hiệu 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 cách lập trình

18
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Một số quan điểm đáng chú ý
Bjarne Stroustrup (nhà khoa học người
Đan Mạch phát triển NNLT C++)
không ủng hộ ký hiệu Hung-ga-ri
hướng hệ thống 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 programming—both
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 cách lập trình

19
1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention)

VC


BB

Một số quan điểm đáng chú ý
Joel Spolsky (kỹ sư phần mềm và tác
giả của blog về phát triển phần mềm
đặc biệt về phần mềm Windows) ủng hộ
ký hiệu Hung-ga-ri hướng ứng dụng.

“If you read Simonyi’s 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.” They’re
both of type string. The compiler won’t help you if you assign one to the
other and Intellisense won’t 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 you’re lucky. (...) There’s 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”.
20
Phong cách lập trình
1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình

VC


BB

Quy tắc 1

Chương trình nên được tách thành
nhiều đơn thể (module), mỗi đơn thể
thực hiện một công việc và càng
độc lập với nhau càng tốt. Điều này
sẽ giúp chương trình dễ bảo dưỡng
hơn và khi đọc chương trình, ta không phải
đọc nhiều, nhớ nhiều các đoạn lệnh nằm rải rác
để hiểu được điều gì đang được thực hiện.

Phong cách lập trình

21
1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình

VC


BB

Quy tắc 2

Nên sử dụng các tham số khi truyền
thông tin cho các chương trình con.
Tránh sử dụng các biến toàn cục
để truyền thông tin giữa các
chương trình con vì như vậy sẽ làm mất tính
độc lập giữa các chương trình con và rất
khó khăn khi kiểm soát giá trị của chúng khi
chương trình thi hành.

Phong cách lập trình

22
1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình

VC


BB

Quy tắc 3

Cách trình bày chương trình càng
nhất quán sẽ càng dễ đọc và dễ hiểu.
Từ đó, ta sẽ mất ít thời gian để nghĩ
về cách viết chương trình và
như vậy sẽ có nhiều thời gian hơn
để nghĩ về các vấn đề cần giải quyết.

Phong cách lập trình

23
1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình

VC


BB

Quy tắc 4

Chương trình nên giữ được tính
đơn giản và rõ ràng trong hầu hết
các tình huống. Việc sử dụng các
mẹo lập trình chỉ thể hiện sự
khéo léo của lập trình viên và làm
tăng hiệu quả chương trình lên một chút,
trong khi điều đó sẽ đánh mất đi tính đơn giản
và rõ ràng của chương trình.

Phong cách lập trình

24
1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình

VC


BB

Quy tắc 4

Ví dụ
1
2
3
4
5
6
7
8
9
10
11
12
13
14

a[i++] = 1;

// Khó hiểu!

a[i] = 1;

// Viết thành 2 dòng

i++;

// dễ hiểu hơn…

if (doSomething() == false) …

// Hơi phức tạp!

bool bResult = doSomething();

// Viết thành 2 dòng

if (bResult == false) …

// dễ hiểu hơn…

*x += (*xp = (2*k < (n – m) ? c[k + 1] : d[k--]));
if (2 * k < n – m)
*xp = c[k + 1];
else

// !!!

// Sử dụng lệnh điều kiện if else
// thay vì toán tử 3 ngôi
// dễ đọc và dễ hiểu hơn…

*xp = d[k--];
*x = *x + *xp;
Phong cách lập trình

25
1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình

VC


BB

Quy tắc 5

Chương trình nên thực hiện như một dòng chảy từ
trên xuống dưới
 Các chỉ thị #include, #define trên cùng.
 Sau đó đến khai báo các biến toàn cục,
class hay struct.
 Không nên có những thay đổi bất chợt do
sử dụng goto hay continue.

Phong cách lập trình

26
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh



VC

BB

Quy tắc 6

Mỗi câu lệnh nên được đặt riêng trên một dòng để
chương trình dễ đọc và dễ quan sát
cách thực hiện trong quá trình tìm lỗi (debug).
1
2
3
4
5
6
7
8
9
10

x=a+b-c*d;for(int i=0; i<n; i++)

// Khó đọc!

x = a + b – c * d;

// Viết thành 2 dòng

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

// dễ đọc hơn…

// Thực hiện bao nhiêu lần khi debug?
while (i < 100) i++;
// Phải theo dõi i để biết if có thực hiện không!
if (i < 100) i++;
Phong cách lập trình

27
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh

VC


BB

Quy tắc 7

Câu lệnh phải thể hiện đúng cấu trúc chương trình
bằng cách sử dụng hợp lý thụt đầu dòng (tab)
1
2
3
4
5
6
7

if (nCount == 0) printf(“No data!n”);

// Khó debug!

if (nCount == 0)

// Không thấy được quan hệ

printf(“No data!n”);

// phân cấp (lệ thuộc)

if (nCount == 0)

// OK

printf(“No data!n”);

Phong cách lập trình

28
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh

VC



Quy tắc 8

BB

Các cặp dấu {} bao các khối lệnh phải được canh
thẳng hàng theo một trong hai cách sau:
1
2
3
4
5
6
7
8
9

// Cách 1

// Cách 2

if (…)

if (…) {

{

…
…

}

}

else {

else

…

{

}
…

}

Nên viết cặp dấu {} trước rồi viết các lệnh vào
giữa để tránh thiếu các dấu ngoặc này.
Phong cách lập trình

29
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh

VC



Quy tắc 9

BB

Các câu lệnh nằm giữa cặp dấu {} được viết
thụt vào một khoảng tab (các lệnh ngang cấp
thì phải thụt vào như nhau).
1
2
3
4
5
6
7
8

if (a == 1)
{
printf(“Onen”);
if (a == 2)

printf(“Twon”);
else
printf(“Neither one nor two!n”);
}

Phong cách lập trình

30
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh

VC


BB

Quy tắc 10

Các toán tử và toán hạng trong một biểu thức nên
được tách rời nhau bởi 1 khoảng trắng nhằm làm
biểu thức dễ đọc hơn (trừ các toán tử ++, ––, –)
1
2
3
4
5
6
7
8

a=b*c;

// Khó đọc!

a = b * c;

// Dễ đọc hơn!

a = b ++;

// Không nên!

a = b++;

// Nên!

a = - b;

// Không nên!

a = -b;

// Nên!

Phong cách lập trình

31
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh



VC

BB

Quy tắc 11

Có khoảng trắng ngăn cách giữa dấu phẩy hay
chấm phẩy với các tham số.
1
2
3
4
5
6
7
8
9
10
11

// Khoảng trắng sau dấu , trong khai báo hàm
void swap(int a,int b);

// Khó đọc!

void swap(int a, int b);

// Dễ đọc hơn…

// Khoảng trắng sau dấu , trong lời gọi hàm
swap(x,y);

// Khó đọc!

swap(x, y);

// Dễ đọc hơn…

// Khoảng trắng sau dấu ; trong vòng lặp for
for (int i = 1;i < n;i++) …

// Khó đọc!

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

// Dễ đọc hơn…

Phong cách lập trình

32
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh



VC

BB

Quy tắc 12

Nên có khoảng trắng giữa từ khóa và dấu (,
nhưng không nên có khoảng trắng giữa tên hàm
và dấu (
1
2
3
4
5
6
7
8
9
10

// Không nên có khoảng trắng giữa hoanVi và (
void swap (int a, int b);

// Dư khoảng trắng!

void swap(int a, int b);

// Nên có khoảng trắng giữ if và (
// Không nên có khoảng trắng giữa strcmp và (
if(strcmp (szInput, “info”) == 0)

// Dư khoảng trắng!

…
if (strcmp(szInput, “info”) == 0)

// OK

…
Phong cách lập trình

33
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh

VC


BB

Quy tắc 13

Nên sử dụng các cặp dấu () khi muốn tránh các
lỗi về độ ưu tiên toán tử
1
2

int i = a >= b && c < d && e <= g + h;

// Kết quả đúng ý?

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

Phong cách lập trình

34
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh



VC

Quy tắc 14

BB

Nên dùng các dòng trắng để phân chia các đoạn
lệnh trong một hàm như: đoạn nhập/xuất dữ liệu,
đoạn tương ứng với các bước xử lý khác nhau.
1
2
3
4
5
6
7
8
9
10
11

void main()
{
// (Các) Đoạn lệnh nhập ở đây
// ...
// (Các) Đoạn lệnh xử lý ở đây
// ...
// (Các) Đoạn lệnh xuất

// ...
}
Phong cách lập trình

35
1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh

VC


BB

Quy tắc 15

Mỗi dòng lệnh không nên dài quá 80 ký
tự, điều này giúp việc đọc chương trình
dễ dàng hơn khi không phải thực hiện
các thao tác cuộn ngang màn hình.
Trong trường hợp dòng lệnh quá dài
thì nên ngắt thành nhiều dòng.
1
2
3
4
5
6

int myComplexFunction(unsigned int unValue, int nValue, ...
int myComplexFunction(unsigned int unValue,
int nValue,
char cValue,
int* pnValue);
Phong cách lập trình

36
1 2 3 4 5 6 7 8 Quy tắc liên quan đến hằng số

VC


BB

Quy tắc 16

Không nên viết trực tiếp các hằng số vào chương
trình mà nên sử dụng #define hay const để định
nghĩa. Điều này sẽ giúp lập trình viên dễ kiểm soát
những chương trình lớn vì giá trị của hằng số khi
cần thay đổi thì chỉ phải thay đổi một lần duy nhất
ở giá trị định nghĩa (ở #define hay const).
Tuy vậy, không nên dùng #define thường xuyên
để định nghĩa các hằng số, bởi vì trong quá trình
debug, ta sẽ không thể xem được giá trị của một
hằng số định nghĩa bằng #define.
Phong cách lập trình

37
1 2 3 4 5 6 7 8 Quy tắc liên quan đến hằng số

VC


BB

Quy tắc 17

Tên hằng cần phải rõ nghĩa và không theo quy tắc
PascalCase, camelCase hay Hung-ga-ri mà được
viết in toàn bộ và giữa các từ cách nhau bởi dấu _
1
2
3
4
5
6
7

#define N 100

// Không rõ nghĩa!

const int NumberOfElements 100;

// Nhầm với biến/hàm

const int NUMBEROFELEMENTS 100;

// Khó đọc

const int NUMBER_OF_ELEMENTS 100;

// Dễ đọc và rõ nghĩa

Phong cách lập trình

38
1 2 3 4 5 6 7 8 Quy tắc liên quan đến kiểu tự định nghĩa

VC


BB

Quy tắc 18

Tên kiểu tự định nghĩa là danh từ được đặt theo
PascalCase và bắt đầu bằng một ký tự đại diện:
 TMyTypeName: Kiểu tự định nghĩa (typedef)
 SMyStructName: Kiểu cấu trúc (structure)
 UMyUnionName: Kiểu hợp nhất (union)
 EMyEnumName: Kiểu tập hợp (enumeration)
 CMyClassName: Lớp đối tượng (class)

Phong cách lập trình

39
1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến

VC


BB

Quy tắc 19

Tên biến được đặt theo ký hiệu Hung-ga-ri sao
cho đủ nghĩa, có thể là là các từ hoàn chỉnh hoặc
viết tắt nhưng phải dễ đọc (dễ phát âm)
1
2
3
4
5

int nmaxnumber;

// Không theo ký hiệu Hung-ga-ri

int nMaxnumber;

// Không theo ký hiệu Hung-ga-ri

int nMaxNumber;

Phong cách lập trình

40
1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến

VC


BB

Quy tắc 20

Tên biến kiểu dữ liệu tự định nghĩa (typedef,
struct, union, class, …) được viết theo
camelCase và không có tiền tố (T, S, U, C)
1
2
3
4
5

SFraction SFractionA;

// Không nên có tiền tố S

SFraction FractionA;

// Không nên viết theo PascalCase

SFraction fractionA, fracA;

Phong cách lập trình

41
1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến

VC


BB

Quy tắc 21

Biến nên được khai báo ở gần vị trí
mà nó bắt đầu được sử dụng nhằm
tránh việc khai báo một loạt các
biến dư thừa ở đầu hàm hay
chương trình.
Trong C chuẩn, tất các biến bắt buộc phải khai
báo ở đầu khối trước khi sử dụng.
Trong C++ biến có thể khai báo ở bất kỳ nơi đâu
trước khi sử dụng.

Phong cách lập trình

42
1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến

VC


BB

Quy tắc 22

Mỗi biến hay nhóm các biến cùng ý nhĩa nên khai
báo trên một dòng nhằm dễ chú thích về ý nghĩa
của mỗi biến.
1
2
3
4

float fA, fB, fRoot; // Khó chú thích ý nghĩa!
float fA, fB;

// Hệ số a, b của phương trình bậc 1

float fRoot;

// Nghiệm của phương trình bậc 1

Phong cách lập trình

43
1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến

VC


BB

Quy tắc 23

Các biến không nên được sử dụng lại với nhiều
nghĩa khác nhau trong cùng một hàm.
1
2
3
4
5

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

// n là số lần lặp

…

for (n = 0; n < 10; n++)

// n lại là biến điều khiển

…

Phong cách lập trình

44
1 2 3 4 5 6 7 8 Quy tắc liên quan đến hàm

VC


BB

Quy tắc 24

Tên hàm được viết theo camelCase và phải là
động từ phản ánh công việc hàm sẽ thực hiện
hoặc giá trị trả về của nó.
1
2
3
4
5

int Max(int a[], int n);

// Không rõ hành động!

int FindMax(int a[], int n);

// Sai quy tắc đặt tên

int findMax(int a[], int n);

// OK

Phong cách lập trình

45
1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình

VC


BB

Quy tắc 25

Nên sử dụng dấu // để ghi chú vì
dấu này không có ảnh hưởng khi sử
dụng cặp ký hiệu /* */ để vô hiệu
hóa một đoạn lệnh trong quá trình
sửa lỗi chương trình.
Nên nhớ rằng trong C/C++ không cho phép các
cặp dấu /* */ lồng nhau.
// ...
/*
…
*/

Phong cách lập trình

46
1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình

VC


BB

Quy tắc 26

Nên viết chú thích ngắn gọn nhưng
đầy đủ, dễ hiểu qua việc trình bày
chương trình rõ ràng, đơn giản và
cách đặt tên hợp lý.
Với các chú thích ngắn, nên đặt nó
trên cùng dòng lệnh cần chú thích.
Với các chú thích dài hơn, hoặc chú thích cho
cả một đoạn lệnh hãy đặt câu chú thích trên
một dòng riêng ngay phía trên câu lệnh cần
chú thích.
Phong cách lập trình

47
1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình

VC



Quy tắc 26

BB

Ví dụ
1
2
3
4
5
6
7
8
9
10
11
12
13

if (a == 2)
return true;

// Trường hợp đặc biệt

return isPrime(a));

// Trường hợp khác

else

if (argc > 1)
{
// Mở và xử lý tập tin…
FILE *fp = fopen(argv[1], “rb”);
if (fp != NULL)
…
fclose(fp);
}
Phong cách lập trình

48
1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình

VC



Quy tắc 27

BB

Không nên lạm dụng chú thích, cố gắng giữ cho
chương trình dễ đọc, dễ hiểu.
1
2
3
4
5
6

void main()

// Hàm chính!!!

{

// Bắt đầu hàm chính!!!
int i;
i = 369;

// Gán cho i giá trị 369!!!

i++;
}

// Khai báo biến i kiểu số nguyên!!!
// Câu lệnh này để tăng i thêm 1 đơn vị!!!
// Kết thúc hàm chính!!!

Phong cách lập trình

49
1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình



VC

Quy tắc 28

BB

Viết chú thích cho từng hàm và cho từng tập tin
mã nguồn (.h và .cpp).
1
2
3
4
5
6
7
8
9
10
11
12

// Mô tả

: Chương trình xử lý mảng một chiều

// Tác giả

: Đặng Bình Phương

// Email

: dbphuong@fit.hcmus.edu.vn

// Ngày cập nhật : 15/06/2012
// Tên hàm

: findMax

// Mô tả

: Tìm số lớn nhất trong mảng cho trước

// Kiểu trả về

: int

// Tham số: int a[] – Mảng một chiều các phần tử kiểu int
// Tham số: int n

– Số lượng phần tử

int findMax(int a[], int n);
…
Phong cách lập trình

50

More Related Content

What's hot

Phần 11: Tập tin
Phần 11: Tập tinPhần 11: Tập tin
Phần 11: Tập tinHuy Rùa
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.commai_non
 
Nmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinhNmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinhMinh Ngoc Tran
 
Phần 12: Hàm (Nâng cao)
Phần 12: Hàm (Nâng cao)Phần 12: Hàm (Nâng cao)
Phần 12: Hàm (Nâng cao)Huy Rùa
 
Nmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltcNmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltcMinh Ngoc Tran
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]bookbooming1
 
Phần 7: Mảng một chiều
Phần 7: Mảng một chiềuPhần 7: Mảng một chiều
Phần 7: Mảng một chiềuHuy Rùa
 
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Thanh Minh Hoang
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh Cquyloc
 
Nmlt c13 con_trocoban
Nmlt c13 con_trocobanNmlt c13 con_trocoban
Nmlt c13 con_trocobanvitbau1412
 
Tin học ứng dụng trong kinh doanh data4u
Tin học ứng dụng trong kinh doanh data4uTin học ứng dụng trong kinh doanh data4u
Tin học ứng dụng trong kinh doanh data4uXephang Daihoc
 
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiHuynh MVT
 
Phần 8: Mảng hai chiều
Phần 8: Mảng hai chiềuPhần 8: Mảng hai chiều
Phần 8: Mảng hai chiềuHuy Rùa
 
3 Function
3 Function3 Function
3 FunctionCuong
 
Phần 5: Câu lệnh lặp
Phần 5: Câu lệnh lặpPhần 5: Câu lệnh lặp
Phần 5: Câu lệnh lặpHuy Rùa
 

What's hot (17)

Phần 11: Tập tin
Phần 11: Tập tinPhần 11: Tập tin
Phần 11: Tập tin
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
 
Nmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinhNmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinh
 
Phần 12: Hàm (Nâng cao)
Phần 12: Hàm (Nâng cao)Phần 12: Hàm (Nâng cao)
Phần 12: Hàm (Nâng cao)
 
Nmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltcNmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltc
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
 
Phần 7: Mảng một chiều
Phần 7: Mảng một chiềuPhần 7: Mảng một chiều
Phần 7: Mảng một chiều
 
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh C
 
Nmlt c13 con_trocoban
Nmlt c13 con_trocobanNmlt c13 con_trocoban
Nmlt c13 con_trocoban
 
Tin học ứng dụng trong kinh doanh data4u
Tin học ứng dụng trong kinh doanh data4uTin học ứng dụng trong kinh doanh data4u
Tin học ứng dụng trong kinh doanh data4u
 
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansi
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Phần 8: Mảng hai chiều
Phần 8: Mảng hai chiềuPhần 8: Mảng hai chiều
Phần 8: Mảng hai chiều
 
C2 basics of_c_and_cpp
C2 basics of_c_and_cppC2 basics of_c_and_cpp
C2 basics of_c_and_cpp
 
3 Function
3 Function3 Function
3 Function
 
Phần 5: Câu lệnh lặp
Phần 5: Câu lệnh lặpPhần 5: Câu lệnh lặp
Phần 5: Câu lệnh lặp
 

Viewers also liked

Ung dung ms excel trong kinh tế
Ung dung ms excel trong kinh tếUng dung ms excel trong kinh tế
Ung dung ms excel trong kinh tếThang Lang
 
Mô phỏng Đường lên đỉnh Olympia
Mô phỏng Đường lên đỉnh OlympiaMô phỏng Đường lên đỉnh Olympia
Mô phỏng Đường lên đỉnh OlympiaPhong Olympia
 
Starbucks International Marketing Strategy
Starbucks International Marketing StrategyStarbucks International Marketing Strategy
Starbucks International Marketing StrategyShahzad Khan
 
ujian pertengahan tahun/kertas 1/matematik tahun 2
ujian pertengahan tahun/kertas 1/matematik tahun 2ujian pertengahan tahun/kertas 1/matematik tahun 2
ujian pertengahan tahun/kertas 1/matematik tahun 2Eja Jaafar
 

Viewers also liked (6)

Ung dung ms excel trong kinh tế
Ung dung ms excel trong kinh tếUng dung ms excel trong kinh tế
Ung dung ms excel trong kinh tế
 
nngu sql
 nngu sql nngu sql
nngu sql
 
Hinh hoa bkhn
Hinh hoa bkhnHinh hoa bkhn
Hinh hoa bkhn
 
Mô phỏng Đường lên đỉnh Olympia
Mô phỏng Đường lên đỉnh OlympiaMô phỏng Đường lên đỉnh Olympia
Mô phỏng Đường lên đỉnh Olympia
 
Starbucks International Marketing Strategy
Starbucks International Marketing StrategyStarbucks International Marketing Strategy
Starbucks International Marketing Strategy
 
ujian pertengahan tahun/kertas 1/matematik tahun 2
ujian pertengahan tahun/kertas 1/matematik tahun 2ujian pertengahan tahun/kertas 1/matematik tahun 2
ujian pertengahan tahun/kertas 1/matematik tahun 2
 

Similar to Pplthdt c01 phong_cachlaptrinh_v13.09a

Phong cách lập trình - Đặng Bình Phương
Phong cách lập trình - Đặng Bình PhươngPhong cách lập trình - Đặng Bình Phương
Phong cách lập trình - Đặng Bình PhươngNguyễn Công Hoàng
 
Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892HaiNguyen870
 
Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)Hong Le Van
 
C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)Nguyễn Phụng
 
Devwork.vn Giáo trình C# cơ bản
Devwork.vn Giáo trình C# cơ bảnDevwork.vn Giáo trình C# cơ bản
Devwork.vn Giáo trình C# cơ bảnDevwork
 
Nmlt c02 gioi_thieunnltc_in
Nmlt c02 gioi_thieunnltc_inNmlt c02 gioi_thieunnltc_in
Nmlt c02 gioi_thieunnltc_inHuy Nguyễn
 
06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu cTrí Nguyễn
 
Introduction to python 20110917
Introduction to python   20110917Introduction to python   20110917
Introduction to python 20110917AiTi Education
 
DoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdfDoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdfTamDo58
 
Giáo trình vb.net
Giáo trình vb.netGiáo trình vb.net
Giáo trình vb.netHung Pham
 
Python moi
Python moiPython moi
Python moiDÉp LÊ
 
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?ITguru.vn
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#Hihi Hung
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#LanLT2011
 
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]leduyk11
 

Similar to Pplthdt c01 phong_cachlaptrinh_v13.09a (20)

Phong cách lập trình - Đặng Bình Phương
Phong cách lập trình - Đặng Bình PhươngPhong cách lập trình - Đặng Bình Phương
Phong cách lập trình - Đặng Bình Phương
 
Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892
 
Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)
 
C++ can ban
C++ can banC++ can ban
C++ can ban
 
C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)
 
Devwork.vn Giáo trình C# cơ bản
Devwork.vn Giáo trình C# cơ bảnDevwork.vn Giáo trình C# cơ bản
Devwork.vn Giáo trình C# cơ bản
 
Nmlt c02 gioi_thieunnltc_in
Nmlt c02 gioi_thieunnltc_inNmlt c02 gioi_thieunnltc_in
Nmlt c02 gioi_thieunnltc_in
 
06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c
 
Code convention
Code conventionCode convention
Code convention
 
Introduction to python 20110917
Introduction to python   20110917Introduction to python   20110917
Introduction to python 20110917
 
Coding standard
Coding standardCoding standard
Coding standard
 
Basic C programming
Basic C programmingBasic C programming
Basic C programming
 
DoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdfDoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdf
 
Giáo trình vb.net
Giáo trình vb.netGiáo trình vb.net
Giáo trình vb.net
 
Python moi
Python moiPython moi
Python moi
 
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
C# cơ bản hay
C# cơ bản hayC# cơ bản hay
C# cơ bản hay
 
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
 

Recently uploaded

QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...ThunTrn734461
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhvanhathvc
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxAnAn97022
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...hoangtuansinh1
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfVyTng986513
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 

Recently uploaded (20)

QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptx
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 

Pplthdt c01 phong_cachlaptrinh_v13.09a

  • 1. Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Trường Đại học Khoa học Tự nhiên VCBB© 13.09a class operator true public C++ PP LT HƯỚNG ĐỐI TƯỢNG cout catch ThS. Đặng Bình Phương this dbphuong@fit.hcmus.edu.vn PHONG CÁCH LẬP TRÌNH inline new cin friend STL bool using OOP try virtual false private throw delete 1
  • 2. 1 2 3 4 5 6 7 8 VC  BB Nội dung Quy ước đặt tên (naming convention) Quy tắc trình bày tổng thể chương trình Quy tắc trình bày dòng lệnh Quy tắc liên quan đến hằng số Quy tắc liên quan đến kiểu tự định nghĩa Quy tắc liên quan đến biến Quy tắc liên quan đến hàm Quy tắc chú thích chương trình #include <iostream> using namespace std; void main() { cout << “Hello World”; cout << endl; Phong cách lập trình 2
  • 3. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Sức mạnh của làm việc nhóm Phim quảng cáo của hãng Coca-Cola Phong cách lập trình 3
  • 4. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Vì sao phải có chuẩn và quy ước? Phong cách lập trình 4
  • 5. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Quy ước đặt tên trong lập trình Ngoài tính đúng đắn, chương trình máy tính cần phải dễ đọc và dễ hiểu. vs. Hai chuẩn đang được sử dụng rộng rãi:  Quy tắc đặt tên theo kiểu “lạc đà”.  Quy tắc đặt tên theo phong cách Hung-ga-ri. Phong cách lập trình 5
  • 6. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Quy tắc “lạc đà” (Camel Case) Khái niệm  Cách viết tránh sử dụng các khoảng trắng giữa các từ, được sử dụng trong hầu hết các ngôn ngữ lập trình hiện đại và phổ biến như C, C++, Visual Basic (VB) và JavaScript. Phong cách lập trình 6
  • 7. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Quy tắc “lạc đà” (Camel Case) Một số từ đồng nghĩa với ký hiệu CamelCase  BumpyCaps, BumpyCase  CamelCaps, CamelHumpedWord  CapWordsPython  mixedCase trong Python (lowerCamelCase)  ClCl (Capital-lower Capital-lower)  HumpBackNotation  InterCaps, NerdCaps, InternalCapitalization  WordsStrungTogether, WordsRunTogether Phong cách lập trình 7
  • 8. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Quy tắc “lạc đà” (Camel Case) Phân loại  UpperCamelCase (thường gọi là PascalCase) nếu ký tự đầu tiên của câu được viết hoa. Ví dụ: TheQuickBrownFoxJumpsOverTheLazyDog  lowerCamelCase (thường gọi là camelCase) nếu ký tự đầu tiên của câu được viết thường. Ví dụ: theQuickBrownFoxJumpsOverTheLazyDog Phong cách lập trình 8
  • 9. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Ký hiệu Hung-ga-ri Khái niệm  Là quy ước đặt tên trong lập trình máy tính được phát minh bởi Charles Simonyi.  Thường sử dụng trong môi trường lập trình Windows như C, C++ và Visual Basic.  Tên của biến cho biết kiểu, ý định sử dụng hoặc thậm chí là tầm vực của biến đó: • • Tiền tố viết thường chứa thông tin về kiểu của biến. Phần còn lại bắt đầu bằng ký tự hoa cho biết biến chứa thông tin gì. Phong cách lập trình 9
  • 10. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Ký hiệu Hung-ga-ri Phân loại theo mục đích của tiền tố  Ký hiệu Hung-ga-ri hướng hệ thống (Systems Hungarian notation) sử dụng tiền tố để thể hiện kiểu dữ liệu thực sự, ví dụ: • • lAccountNum (“l” – long integer) szName (“sz” – zero-terminated string)  Ký hiệu Hung-ga-ri hướng ứng dụng (Apps Hungarian notation) sử dụng tiền tố để thể hiện mục đích sử dụng của biến, ví dụ: • • rwPosition (“rw” – row, dòng) fBusy (“f” – flag, cờ trạng thái) Phong cách lập trình 10
  • 11. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Một số Ký hiệu Hung-ga-ri thường gặp Tiền tố chỉ kiểu dữ liệu của biến (type prefix): Tiền tố Ý nghĩa b boolean c char (chứa ký tự) n, i short, int, long, char f, fp floating-point d, db double, long double sz zero-terminated string str C++ string Ví dụ bool bHasEffect; char cLetter; int nValue; float fPrice, fpPrice; double dPi, dbPi; char szName[20]; std::string strName; Tiền tố n, f và d thường được sử dụng hơn tiền tố i, fp, db. Tiền tố n thường được sử dụng hàm ý số lượng (count) còn tiền tố i được sử dụng hàm ý chỉ số (index). Phong cách lập trình 11
  • 12. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Một số Ký hiệu Hung-ga-ri thường gặp Tiền tố bổ nghĩa cho kiểu dữ liệu (type modifier) được đặt trước tiền tố kiểu dữ liệu của biến (type prefix) muốn áp dụng: Tiền tố Ý nghĩa u unsigned a, rg pointer pfn function pointer pa dynamic array unsigned int unValue; unsigned short u16Value; unsigned long u32Value; array, range p Ví dụ int anValue, rgnValue; int* pnValue; char* pszName; int (pfnFunc)(int); int* panValue = new int[10]; Tiền tố a thường được sử dụng hơn tiền tố rg. Phong cách lập trình 12
  • 13. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Một số Ký hiệu Hung-ga-ri thường gặp Tiền tố bổ nghĩa cho tầm vực (scope modifier) được đặt trước tiền tố bổ nghĩa cho kiểu dữ liệu (type modifier) muốn áp dụng: Tiền tố Ý nghĩa Ví dụ g_ biến toàn cục (global) g_nValue, g_value _ biến cục bộ (local) s_ biến tĩnh (static) s_nValue, s_value m_ thành viên (member) của cấu trúc/lớp m_nValue, m_value _nValue, _value Phong cách lập trình 13
  • 14. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Một số Ký hiệu Hung-ga-ri thường gặp Thường thấy trong lập trình Windows (trong sách “Programming Windows”, sách đầu tiên về lập trình Windows API của Charles Petzold) Tiền tố Ý nghĩa Ví dụ w word-size wParam l long-integer lParam hwnd handle to a window hwndFoo lpsz long pointer to a zero-terminated string lpszBar Phong cách lập trình 14
  • 15. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Đánh giá ký hiệu Hung-ga-ri Ưu điểm  Kiểu biến có thể thấy được từ tên biến đó.  Nhiều biến các nhau với cùng ngữ nghĩa có thể được sử dụng trong cùng một khối mã nguồn: nWidth, fWidth, dWidth.  Các tên biến được thống nhất hơn.  Có thể phát hiện dễ dàng việc ép kiểu không phù hợp hoặc các biểu thức sử dụng kiểu không tương thích khi đọc mã nguồn.  Tránh sử dụng nhầm thao tác: heightWindow = window.getWidth() Phong cách lập trình 15
  • 16. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Đánh giá ký hiệu Hung-ga-ri Khuyết điểm  Việc kiểm tra bằng mắt là thừa khi việc kiểm tra kiểu được thực hiện tự động bởi trình biên dịch.  Một số IDE hiện đại tự động đánh dấu những chỗ sử dụng kiểu không tương thích.  Khi kiểu của biến thay đổi, tên của biến đó cũng phải thay đổi nếu không sẽ không thống nhất.  Trong đa số trường hợp, việc biết ý nghĩa sử dụng của một biến bao hàm việc biết kiểu của nó. Vì vậy, nếu không biết biến dùng để làm gì thì việc biết kiểu của nó cũng vô ích! Phong cách lập trình 16
  • 17. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Một số quan điểm đáng chú ý Linus Torvalds (cha đẻ của hệ điều hành mã nguồn mở Linux) không ủng hộ ký hiệu Hung-ga-ri hướng hệ thống. “Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged—the compiler knows the types anyway and can check those, and it only confuses the programmer” Phong cách lập trình 17
  • 18. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Một số quan điểm đáng chú ý Steve McConnell (tác giả của nhiều sách CNPM nổi tiếng, được tạp chí Software Development xem là một trong ba người có ảnh hưởng nhất trong công nghiệp phần mềm cùng với Bill Gates và Linus Torvalds) ủng hộ ký hiệu 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 cách lập trình 18
  • 19. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Một số quan điểm đáng chú ý Bjarne Stroustrup (nhà khoa học người Đan Mạch phát triển NNLT C++) không ủng hộ ký hiệu Hung-ga-ri hướng hệ thống 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 programming—both 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 cách lập trình 19
  • 20. 1 2 3 4 5 6 7 8 Quy ước đặt tên (naming convention) VC  BB Một số quan điểm đáng chú ý Joel Spolsky (kỹ sư phần mềm và tác giả của blog về phát triển phần mềm đặc biệt về phần mềm Windows) ủng hộ ký hiệu Hung-ga-ri hướng ứng dụng. “If you read Simonyi’s 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.” They’re both of type string. The compiler won’t help you if you assign one to the other and Intellisense won’t 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 you’re lucky. (...) There’s 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”. 20 Phong cách lập trình
  • 21. 1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình VC  BB Quy tắc 1 Chương trình nên được tách thành nhiều đơn thể (module), mỗi đơn thể thực hiện một công việc và càng độc lập với nhau càng tốt. Điều này sẽ giúp chương trình dễ bảo dưỡng hơn và khi đọc chương trình, ta không phải đọc nhiều, nhớ nhiều các đoạn lệnh nằm rải rác để hiểu được điều gì đang được thực hiện. Phong cách lập trình 21
  • 22. 1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình VC  BB Quy tắc 2 Nên sử dụng các tham số khi truyền thông tin cho các chương trình con. Tránh sử dụng các biến toàn cục để truyền thông tin giữa các chương trình con vì như vậy sẽ làm mất tính độc lập giữa các chương trình con và rất khó khăn khi kiểm soát giá trị của chúng khi chương trình thi hành. Phong cách lập trình 22
  • 23. 1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình VC  BB Quy tắc 3 Cách trình bày chương trình càng nhất quán sẽ càng dễ đọc và dễ hiểu. Từ đó, ta sẽ mất ít thời gian để nghĩ về cách viết chương trình và như vậy sẽ có nhiều thời gian hơn để nghĩ về các vấn đề cần giải quyết. Phong cách lập trình 23
  • 24. 1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình VC  BB Quy tắc 4 Chương trình nên giữ được tính đơn giản và rõ ràng trong hầu hết các tình huống. Việc sử dụng các mẹo lập trình chỉ thể hiện sự khéo léo của lập trình viên và làm tăng hiệu quả chương trình lên một chút, trong khi điều đó sẽ đánh mất đi tính đơn giản và rõ ràng của chương trình. Phong cách lập trình 24
  • 25. 1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình VC  BB Quy tắc 4 Ví dụ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 a[i++] = 1; // Khó hiểu! a[i] = 1; // Viết thành 2 dòng i++; // dễ hiểu hơn… if (doSomething() == false) … // Hơi phức tạp! bool bResult = doSomething(); // Viết thành 2 dòng if (bResult == false) … // dễ hiểu hơn… *x += (*xp = (2*k < (n – m) ? c[k + 1] : d[k--])); if (2 * k < n – m) *xp = c[k + 1]; else // !!! // Sử dụng lệnh điều kiện if else // thay vì toán tử 3 ngôi // dễ đọc và dễ hiểu hơn… *xp = d[k--]; *x = *x + *xp; Phong cách lập trình 25
  • 26. 1 2 3 4 5 6 7 8 Quy tắc trình bày tổng thể chương trình VC  BB Quy tắc 5 Chương trình nên thực hiện như một dòng chảy từ trên xuống dưới  Các chỉ thị #include, #define trên cùng.  Sau đó đến khai báo các biến toàn cục, class hay struct.  Không nên có những thay đổi bất chợt do sử dụng goto hay continue. Phong cách lập trình 26
  • 27. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh  VC BB Quy tắc 6 Mỗi câu lệnh nên được đặt riêng trên một dòng để chương trình dễ đọc và dễ quan sát cách thực hiện trong quá trình tìm lỗi (debug). 1 2 3 4 5 6 7 8 9 10 x=a+b-c*d;for(int i=0; i<n; i++) // Khó đọc! x = a + b – c * d; // Viết thành 2 dòng for (int i = 0; i < n; i++) // dễ đọc hơn… // Thực hiện bao nhiêu lần khi debug? while (i < 100) i++; // Phải theo dõi i để biết if có thực hiện không! if (i < 100) i++; Phong cách lập trình 27
  • 28. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh VC  BB Quy tắc 7 Câu lệnh phải thể hiện đúng cấu trúc chương trình bằng cách sử dụng hợp lý thụt đầu dòng (tab) 1 2 3 4 5 6 7 if (nCount == 0) printf(“No data!n”); // Khó debug! if (nCount == 0) // Không thấy được quan hệ printf(“No data!n”); // phân cấp (lệ thuộc) if (nCount == 0) // OK printf(“No data!n”); Phong cách lập trình 28
  • 29. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh VC  Quy tắc 8 BB Các cặp dấu {} bao các khối lệnh phải được canh thẳng hàng theo một trong hai cách sau: 1 2 3 4 5 6 7 8 9 // Cách 1 // Cách 2 if (…) if (…) { { … … } } else { else … { } … } Nên viết cặp dấu {} trước rồi viết các lệnh vào giữa để tránh thiếu các dấu ngoặc này. Phong cách lập trình 29
  • 30. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh VC  Quy tắc 9 BB Các câu lệnh nằm giữa cặp dấu {} được viết thụt vào một khoảng tab (các lệnh ngang cấp thì phải thụt vào như nhau). 1 2 3 4 5 6 7 8 if (a == 1) { printf(“Onen”); if (a == 2) printf(“Twon”); else printf(“Neither one nor two!n”); } Phong cách lập trình 30
  • 31. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh VC  BB Quy tắc 10 Các toán tử và toán hạng trong một biểu thức nên được tách rời nhau bởi 1 khoảng trắng nhằm làm biểu thức dễ đọc hơn (trừ các toán tử ++, ––, –) 1 2 3 4 5 6 7 8 a=b*c; // Khó đọc! a = b * c; // Dễ đọc hơn! a = b ++; // Không nên! a = b++; // Nên! a = - b; // Không nên! a = -b; // Nên! Phong cách lập trình 31
  • 32. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh  VC BB Quy tắc 11 Có khoảng trắng ngăn cách giữa dấu phẩy hay chấm phẩy với các tham số. 1 2 3 4 5 6 7 8 9 10 11 // Khoảng trắng sau dấu , trong khai báo hàm void swap(int a,int b); // Khó đọc! void swap(int a, int b); // Dễ đọc hơn… // Khoảng trắng sau dấu , trong lời gọi hàm swap(x,y); // Khó đọc! swap(x, y); // Dễ đọc hơn… // Khoảng trắng sau dấu ; trong vòng lặp for for (int i = 1;i < n;i++) … // Khó đọc! for (int i = 1; i < n; i++) … // Dễ đọc hơn… Phong cách lập trình 32
  • 33. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh  VC BB Quy tắc 12 Nên có khoảng trắng giữa từ khóa và dấu (, nhưng không nên có khoảng trắng giữa tên hàm và dấu ( 1 2 3 4 5 6 7 8 9 10 // Không nên có khoảng trắng giữa hoanVi và ( void swap (int a, int b); // Dư khoảng trắng! void swap(int a, int b); // Nên có khoảng trắng giữ if và ( // Không nên có khoảng trắng giữa strcmp và ( if(strcmp (szInput, “info”) == 0) // Dư khoảng trắng! … if (strcmp(szInput, “info”) == 0) // OK … Phong cách lập trình 33
  • 34. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh VC  BB Quy tắc 13 Nên sử dụng các cặp dấu () khi muốn tránh các lỗi về độ ưu tiên toán tử 1 2 int i = a >= b && c < d && e <= g + h; // Kết quả đúng ý? int i = (a >= b) && (c < d) && (e <= (g + h)); Phong cách lập trình 34
  • 35. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh  VC Quy tắc 14 BB Nên dùng các dòng trắng để phân chia các đoạn lệnh trong một hàm như: đoạn nhập/xuất dữ liệu, đoạn tương ứng với các bước xử lý khác nhau. 1 2 3 4 5 6 7 8 9 10 11 void main() { // (Các) Đoạn lệnh nhập ở đây // ... // (Các) Đoạn lệnh xử lý ở đây // ... // (Các) Đoạn lệnh xuất // ... } Phong cách lập trình 35
  • 36. 1 2 3 4 5 6 7 8 Quy tắc trình bày dòng lệnh VC  BB Quy tắc 15 Mỗi dòng lệnh không nên dài quá 80 ký tự, điều này giúp việc đọc chương trình dễ dàng hơn khi không phải thực hiện các thao tác cuộn ngang màn hình. Trong trường hợp dòng lệnh quá dài thì nên ngắt thành nhiều dòng. 1 2 3 4 5 6 int myComplexFunction(unsigned int unValue, int nValue, ... int myComplexFunction(unsigned int unValue, int nValue, char cValue, int* pnValue); Phong cách lập trình 36
  • 37. 1 2 3 4 5 6 7 8 Quy tắc liên quan đến hằng số VC  BB Quy tắc 16 Không nên viết trực tiếp các hằng số vào chương trình mà nên sử dụng #define hay const để định nghĩa. Điều này sẽ giúp lập trình viên dễ kiểm soát những chương trình lớn vì giá trị của hằng số khi cần thay đổi thì chỉ phải thay đổi một lần duy nhất ở giá trị định nghĩa (ở #define hay const). Tuy vậy, không nên dùng #define thường xuyên để định nghĩa các hằng số, bởi vì trong quá trình debug, ta sẽ không thể xem được giá trị của một hằng số định nghĩa bằng #define. Phong cách lập trình 37
  • 38. 1 2 3 4 5 6 7 8 Quy tắc liên quan đến hằng số VC  BB Quy tắc 17 Tên hằng cần phải rõ nghĩa và không theo quy tắc PascalCase, camelCase hay Hung-ga-ri mà được viết in toàn bộ và giữa các từ cách nhau bởi dấu _ 1 2 3 4 5 6 7 #define N 100 // Không rõ nghĩa! const int NumberOfElements 100; // Nhầm với biến/hàm const int NUMBEROFELEMENTS 100; // Khó đọc const int NUMBER_OF_ELEMENTS 100; // Dễ đọc và rõ nghĩa Phong cách lập trình 38
  • 39. 1 2 3 4 5 6 7 8 Quy tắc liên quan đến kiểu tự định nghĩa VC  BB Quy tắc 18 Tên kiểu tự định nghĩa là danh từ được đặt theo PascalCase và bắt đầu bằng một ký tự đại diện:  TMyTypeName: Kiểu tự định nghĩa (typedef)  SMyStructName: Kiểu cấu trúc (structure)  UMyUnionName: Kiểu hợp nhất (union)  EMyEnumName: Kiểu tập hợp (enumeration)  CMyClassName: Lớp đối tượng (class) Phong cách lập trình 39
  • 40. 1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến VC  BB Quy tắc 19 Tên biến được đặt theo ký hiệu Hung-ga-ri sao cho đủ nghĩa, có thể là là các từ hoàn chỉnh hoặc viết tắt nhưng phải dễ đọc (dễ phát âm) 1 2 3 4 5 int nmaxnumber; // Không theo ký hiệu Hung-ga-ri int nMaxnumber; // Không theo ký hiệu Hung-ga-ri int nMaxNumber; Phong cách lập trình 40
  • 41. 1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến VC  BB Quy tắc 20 Tên biến kiểu dữ liệu tự định nghĩa (typedef, struct, union, class, …) được viết theo camelCase và không có tiền tố (T, S, U, C) 1 2 3 4 5 SFraction SFractionA; // Không nên có tiền tố S SFraction FractionA; // Không nên viết theo PascalCase SFraction fractionA, fracA; Phong cách lập trình 41
  • 42. 1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến VC  BB Quy tắc 21 Biến nên được khai báo ở gần vị trí mà nó bắt đầu được sử dụng nhằm tránh việc khai báo một loạt các biến dư thừa ở đầu hàm hay chương trình. Trong C chuẩn, tất các biến bắt buộc phải khai báo ở đầu khối trước khi sử dụng. Trong C++ biến có thể khai báo ở bất kỳ nơi đâu trước khi sử dụng. Phong cách lập trình 42
  • 43. 1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến VC  BB Quy tắc 22 Mỗi biến hay nhóm các biến cùng ý nhĩa nên khai báo trên một dòng nhằm dễ chú thích về ý nghĩa của mỗi biến. 1 2 3 4 float fA, fB, fRoot; // Khó chú thích ý nghĩa! float fA, fB; // Hệ số a, b của phương trình bậc 1 float fRoot; // Nghiệm của phương trình bậc 1 Phong cách lập trình 43
  • 44. 1 2 3 4 5 6 7 8 Quy tắc liên quan đến biến VC  BB Quy tắc 23 Các biến không nên được sử dụng lại với nhiều nghĩa khác nhau trong cùng một hàm. 1 2 3 4 5 for (i = 0; i < n; i++) // n là số lần lặp … for (n = 0; n < 10; n++) // n lại là biến điều khiển … Phong cách lập trình 44
  • 45. 1 2 3 4 5 6 7 8 Quy tắc liên quan đến hàm VC  BB Quy tắc 24 Tên hàm được viết theo camelCase và phải là động từ phản ánh công việc hàm sẽ thực hiện hoặc giá trị trả về của nó. 1 2 3 4 5 int Max(int a[], int n); // Không rõ hành động! int FindMax(int a[], int n); // Sai quy tắc đặt tên int findMax(int a[], int n); // OK Phong cách lập trình 45
  • 46. 1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình VC  BB Quy tắc 25 Nên sử dụng dấu // để ghi chú vì dấu này không có ảnh hưởng khi sử dụng cặp ký hiệu /* */ để vô hiệu hóa một đoạn lệnh trong quá trình sửa lỗi chương trình. Nên nhớ rằng trong C/C++ không cho phép các cặp dấu /* */ lồng nhau. // ... /* … */ Phong cách lập trình 46
  • 47. 1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình VC  BB Quy tắc 26 Nên viết chú thích ngắn gọn nhưng đầy đủ, dễ hiểu qua việc trình bày chương trình rõ ràng, đơn giản và cách đặt tên hợp lý. Với các chú thích ngắn, nên đặt nó trên cùng dòng lệnh cần chú thích. Với các chú thích dài hơn, hoặc chú thích cho cả một đoạn lệnh hãy đặt câu chú thích trên một dòng riêng ngay phía trên câu lệnh cần chú thích. Phong cách lập trình 47
  • 48. 1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình VC  Quy tắc 26 BB Ví dụ 1 2 3 4 5 6 7 8 9 10 11 12 13 if (a == 2) return true; // Trường hợp đặc biệt return isPrime(a)); // Trường hợp khác else if (argc > 1) { // Mở và xử lý tập tin… FILE *fp = fopen(argv[1], “rb”); if (fp != NULL) … fclose(fp); } Phong cách lập trình 48
  • 49. 1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình VC  Quy tắc 27 BB Không nên lạm dụng chú thích, cố gắng giữ cho chương trình dễ đọc, dễ hiểu. 1 2 3 4 5 6 void main() // Hàm chính!!! { // Bắt đầu hàm chính!!! int i; i = 369; // Gán cho i giá trị 369!!! i++; } // Khai báo biến i kiểu số nguyên!!! // Câu lệnh này để tăng i thêm 1 đơn vị!!! // Kết thúc hàm chính!!! Phong cách lập trình 49
  • 50. 1 2 3 4 5 6 7 8 Quy tắc chú thích chương trình  VC Quy tắc 28 BB Viết chú thích cho từng hàm và cho từng tập tin mã nguồn (.h và .cpp). 1 2 3 4 5 6 7 8 9 10 11 12 // Mô tả : Chương trình xử lý mảng một chiều // Tác giả : Đặng Bình Phương // Email : dbphuong@fit.hcmus.edu.vn // Ngày cập nhật : 15/06/2012 // Tên hàm : findMax // Mô tả : Tìm số lớn nhất trong mảng cho trước // Kiểu trả về : int // Tham số: int a[] – Mảng một chiều các phần tử kiểu int // Tham số: int n – Số lượng phần tử int findMax(int a[], int n); … Phong cách lập trình 50