Phong cách lập trình
Trang 1Quy định về Phong cách lập trình
Lê Sỹ Quang - Lê Sỹ Vinh
Phần I: Trình bày tên hằng tên biến và tổng quan chươngtrình.
I Giới thiệu
Phong cách lập trình của một lậptrình viên cũng giống như phong cách sống của một con người Có lẽ song song với việc học các kiến thứcphục vụ cho công việc lập trình bạn phải học và rèn luyện cho bản thân mình mộtphong cách lập trình tốt Việc học và rèn luyện một phong cách lập trình tốtnên tiến hành ngay từ khi bạn mới bắt tay vào học lập trình Một phong cách lậptrình tốt sẽ giúp bạn tạo ra một chương trình dễ đọc, dễ hiểu, dễ tìm và sửalỗi, dễ nhận thấy cấu trúc bậc cao của chương trình Những điều này sẽ
thuậnlợi cho cả người viết chương trình, người đánh giá chương trình, và người bảotrì chương trình Sau đây là một số những quy định về một phong cách lập trìnhtốt được đúc kết từ kinh nghiệm của các chuyên gia trên thế giới về lập trình
II Cách đặt tên biến và tên hằng
Khi mới học lập trình, chúng tathường cảm thấy việc đặt tên biến và tên hằng rất dễ dàng, bởi vì những chươngtrình đầu tiên thường ngắn, đơn giản, dễ hiểu và được lập trình trong mộtkhoảng thời gian ngắn liên tục Nhưng sau khi lượng kiến thức đã nhiều, cácchương trình bắt đầu dài ra, phức tạp hơn, số lượng biến và hằng cần dùng ngày càngnhiều, đặc biệt là một chương trình có thể được lập trình trong một khoảng thờigian dài, có thể là vài ngày, hoặc vài tháng Thậm chí một chương trình donhiều người lập trình, mỗi người làm một phần nào đó Khi đó việc đặt tên biếnvà tên hằng sẽ trở lên khó khăn hơn nhiều Bạn phải biết cách đặt tên biến vàtên hằng sao cho chúng mang ý nghĩa rõ dàng vàcó tính gợi cảm (lập trình viên có thể nhìn vào tên biến và tên hằng vàhiểu được chức năng và tác dụng của chúng).Sau đây là một số quy định về cách đặt tên biến và tên hằng:
1 Tên biến, tên hằng phải đượcđặt bởi một dãy kí tự có nghĩa
Ví dụ:
- var pp: char; Cách đặt tên biến như vậy là không tốt, biến pp khôngmang ý nghĩa và
không gợi nhớ cho lập trình viên
- var persion_position: char;Cách đặt tên biến như vậy là tốt, tên
biến mang ý nghĩa rõ ràng đồngthời gợi nhớ cho lập trình viên
2 Tên biến không nên đặt bằng toàn kí tự in hoa
Trang 2Ví dụ:
var PERSON_POSITION: char;Việc đặt tên biến như thế này là không tốt, bởi nếu ta
coi một chương trình nhưmột văn bản thì trong một văn bản có quá nhiều chữ cái in hoa
sẽ làm cho ngườiđọc khó chịu và không nhận ra những chỗ quan trọng trong văn bản
3 Tên hằng nên đặt bằng mộtchuỗi kí tự in hoa
Trong một chương trình, số lượngcác hằng xuất hiện không nhiều, vậy nếu chúng ta đặt tên hằng là chuỗi kí tự inhoa sẽ phân biệt được chúng với tên biến
4 Các từ khoá nên dùng toàn chữcái thường
Ví dụ: for, while, do, begin, end
Như chúng ta đã biết trong một sốngôn ngữ thì bộ chương trình dịch không phân biệt chữ cái in hoa và chữ cái inthường (ví dụ trong ngôn ngữ lập trình Pascal) Nhưng trong một
số ngôn ngữ lậptrình khác thì chữ các in hoa và chữ cái in thường được coi là khác nhau Tronghầu hết các ngôn ngữ lập trình này, các từ khoá được viết dưới dạng chữ cái
inthường (ví dụ trong ngôn ngữ lập trình C++) Vậy một thói quen về việc dùng cáctừ khoá bằng toàn chữ cái in thường thì sẽ dễ dàng cho chúng ta hơn rất nhiềukhi chúng ta học một ngôn ngữ lập trình mới
5 Cách đặt tên biến dài
Khi một chương trình dài và phứctạp, đặc biệt là nhiều người viết thì lượng biến cần phải
sử dụng là rất lớn.Để tránh sự nhầm lẫn giữa các biến khác nhau thì các lập trình viên bắt buộcphải đặt các tên biến dài (thường từ 2 từ trở lên) Đối với các tên biến dài,ta có thể dùng chữ cái in hoa hoặc dấu gạch chân dưới để phân biệt giữa các từkhác nhau
Ví dụ:
- person_position hoặcpersonPosition: Là cách đặt tên biến tốt
- personposition: Là cáchđặt tên biến không tốt.
6 Cách đặt tên hàm
Có nhiều cách đặt tên hàm khácnhau Cách đặt tên hàm cũng giống như cách đặt tên biến Nhưng khi đặt tên chomột hàm thì cần có thêm một vài chú ý về cấu trúc ngữ pháp của tên hàm Mộttrong những cách đặt phổ biến trong việc đặt tên hàm là sử dụng cấu trúc
ngữpháp Độngtừ + Cụm danh từ.
Ví dụ:
- function search_table;
Trang 3- function is_person;
III Trình bày tổng quan củachương trình
1 Tổng quan chương trình
Chương trình phải được lùi đầudòng một cách thích hợp Các câu lệnh �bên trong� các vòng lặp (ví dụ: for,while, repeate), các lệnh điều kiện rẽ nhánh (ví dụ: if, case) và trong cặp�begin end� phải được lùi thêm một bậc Bên cạnh đó các câu lện khai báobiến cũng nên lùi vào một bậc Việc lùi vào một bậc có thể được thực hiện bằngmột số dấu cách (space) hoặc dấu tab.Việc lùi vào một cách thích hợp các dòng lệnh sẽ cho lập trình viên thấyđược cấu trúc khối của chương trình, điều đó giúp cho việc tìm lỗi và sửa lỗidễ dàng hơn
Vídụ1: Chương trình viết có cấu trúc tốt.
function do_example;
var i:integer;
Begin
for i:=1 to n do
begin
if (i mod 2 = 0) then write(�số chẵn�)
else write(�số lẻ�);
end;
End;
Ví dụ 2: Chương trình viết có cấutrúc không tốt
functiondo_another_example;
var i: integer;
begin
fori:=1 to n do
begin
Trang 4if (i mod 2 = 0) then write(�số chẵn�)
else write(�sốlẻ�);
end;
end;
2 Đoạn chương trình và dòng lệnh
Trong một file chương trìnhthường gồm nhiều hàm, trong một hàm có thể lại gồm nhiều đoạn nhỏ Mỗi đoạn nhỏnên được tách nhau ra bởi các dòng trống.Trong một đoạn nhỏ ý nghĩa của các dòng lệnh nên tương đối giống nhau vàphù hợp với nhau
Trong chương trình mỗi dòng chỉnên viết một dòng lệnh (các bộ chương trình dịch của các ngôn ngữ thường bỏ quatất cả các dấu trống, vì vậy việc bạn cố viết một chương trình với số lượngdòng ít bằng cách đẩy nhiều dòng lệnh trên cùng một dòng là vô nghĩa) Mỗi dònglệnh trên một dòng sẽ giúp bạn dễ dàng trong việc gỡ rối chương trình
IV Bài tập
Trênmặt phẳng toạ độ cho 2 hình chữ nhật có các cạnh song song với hai trục toạ độ.Hình chữ nhật thứ nhất được biếu diễn bởi hai cặp toạ độ đối tâm trái dưới vàphải trên là (x1,y1) và (x2,y2) Hìnhchữ nhật thứ hai được biếu diễn bởi hai cặp toạ độ đối tâm trái dưới và phảitrên là (x3,y3) và (x4,y4) Hãy viết một chương trình với số phép toán là ítnhất có thể được để kiểm tra xem hai hình chữ nhật trên có diện tích chung vớinhau hay không (diện tích chung lớn hơn 0)
Quy định về phong cách lập trình
Lê Sỹ Quang - Lê Sỹ Vinh
1 Mỗichương trình phải có một phần chú thích chung giới thiệu mục tiêu của
chươngtrình Điều đó sẽ giúp bạn dễ dàng nâng cấp và bảo trì chương trình trong thờigian sau này Phần chú thích của chương trình như một phát biểu ngắn ngọn vềbài toán cần giải quyết
Ví dụ:
Input:Một dãy số A có độ dài N
Output:Dãy số A sau khi đã được sắp xếp
Trang 52 Mỗi chươngtrình con cần phải có chú thích về mục đích của chương trình con đó,
những chúthích làm cho người đọc hiểu được mục đích của chương trình con chứ không phảigiúp người đọc hiểu được chương trình con đó được thực hiện như thế nào
Vídụ:
Chú thích đúng: mô tả mục đích của hàm
{hàm tinh_tong_2_sonhận vào 2 số nguyên, trả kết quả ra là một số nguyên bằng tổng
của 2 số nguyênnhận vào}
functiontinh_tong_2_so(giatri1, giatri2 : integer) : integer;
begin
tinh_tong_2_so:=giatri1 + giatri2;
end;
Chú thích sai: mô tả hoạt động của hàm
{hàm tinh_tong_2_solấy giatri1 cộng với giatri2}
functiontinh_tong_2_so(giatri1, giatri2 : integer) : integer;
begin
tinh_tong_2_so:=giatri1 + giatri2;
end;
3 Đốivới các cấu trúc dữ liệu quan trọng phải có chú thích và về mục đích của cấutrúc đó
và mỗi liên hệ của nó với các phần dữ liệu khác Vấn đề chú thích chonhững cấu trúc dữ liệu đặc biệt cần thiết cho lập trình hướng chức năng
Vídụ:
tuoi: array[1 max]of integer; { mang day_so lưu tuổi của tất cả các sinh viên trong trường)
4 Mỗichương trình con cần có chú thích về ý nghĩa cho từng tham số của chương trình
Vídụ:
{ diem1: chua toa do dinh thunhat cua tam giac,
Trang 6diem2:chua toa do dinh thu hai cua tam giac,
diem3:chua toa do dinh thu ba cua tam giac}
procedure tinh_dien_tich_tamgiac(diem1, diem2, diem3 : kieu_diem);
5.Những đoạn chương trình phức tạp và khó hiểu, cần chú thích cẩn thận Lời chúthích sẽ liên quan đến nội dung của đoạn chương trình đó
Vídụ
{chương trình con dưới đây sẽ nhận vào một danh sách các số nguyên có độ dài làN, kết
quả trả ra là một bộ gồm 3 số dau,cuoi, tong cho biết đoạn con liên tiếp bắt đầu từ vị trí dauvà kết thúc ở vị trí cuoi có giá trị tổng bằng tong,đó là đoạn con liên tiếp trong dãy số
trên có tổng lớn nhất}
proceduretim_doan_con_dai_nhat(N : integer, A : kieu_mang_1_chieu, Var dau, cuoi, tong :integer);
begin
{ dùnghai vòng for để liệt kê tất cả các đoạn con liên tiếp của dãy số, mỗi đoạncon bắt
đầu từ vị trí firstvà kết thúc ở vị trí last}
forfirst:=1 to N do
forlast:=first to N do
begin
end;
end;
6 Đốivới mỗi chương trình con nên liệt kê điều kiện trước và điều kiện sau củachúng
Vídụ:
{điềukiện trước: so_chia phải có giá trị khác không, 2 giá trị đưa vào phải là 2số nguyên.
điều kiện sau: Phải tính tích của hai số với độ chính xác là 1/10000}
functiontinh_tich_2_so(so_bi_chia, so_chia : integer) : real;
Trang 77 Nêncó ít nhất một dòng trống (hoặc một dòng kẻ) trước mỗi chương trình con để táchbiệt nhưng chương trình con, điều này sẽ giúp cho ta phân biệt được các chươngtrình con khác nhau
Vídụ:
functiontinh_tong_2_so(giatri1, giatri2 : real) : real;
begin
tinh_tong_2_so:=giatri1 + giatri2;
end;
{ -}
function tinh_tich_2_so(giatri1, giatri2 : real) :real;
begin
tinh_tich_2_so:=giatri1 * giatri2;
end;
Lê Sỹ Quang - Lê Sỹ Vinh