Phong cách lập trình C

14 835 2
Phong cách lập trình C

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Phong cách lập trình C

1|Phong cách lập trình C++ PHONG CÁCH LẬP TRÌNH C++ Bạn học lập trình, bạn nghĩ chương trình máy tính nào? Một chương trình máy tính xem tác phẩm, đọc bạn (có thể bây giờ, mà 10 năm sau!), lập trình viên khác sau bạn (để phát triển, sửa chửa, cập nhật ) Chính lẽ đó, chương trình máy tính nên đáp ứng u cầu sau: đúng, dễ đọc dễ hiểu  Mục đích style làm cho chương trình trở nên dễ đọc người viết người khác, style tốt phần thiết yếu việc lập trình tốt Viết chương trình chạy chưa đủ chương trình khơng máy tính đọc mà cịn để lập trình viên khác đọc Hơn nữa, chương trình có style tốt ln có nhiều khả chạy chương trình có style tồi  Tài liệu cung cấp cho bạn: Một tập hợp chuẩn trình bày chương trình thơng dụng Một thói quen để từ bạn có phong cách lập trình tương đối chun nghiệp Tuy nhiên, tài liệu khơng có tham vọng đề cập đến tồn khía cạnh phong cách lập trình Nó nói đến cần thiết bạn, sinh viên, chưa tìm phong cách phù hợp tạo thói quen tốt từ đầu Tổ chức chương trình Mơđun hóa chương trình bạn Chương trình bạn nên tách thành nhiều môđun, môđun thực công việc độc lập với tốt Điều giúp bạn dễ bảo dưỡng chương trình đọc chương trình, bạn khơng phải đọc nhiều, nhớ nhiều đoạn lệnh nằm rải rác để hiểu điều thực Khi muốn chuyển thơng tin cho chương trình con, bạn nên sử dụng tham số Tránh sử dụng biến tồn cục làm bạn triệt tiêu tính độc lập chương trình khó khăn kiểm sốt giá trị chúng chương trình thi hành (Chú ý, bạn nên phân biệt biến toàn cục số toàn cục) Định nghĩa cài đặt lớp phải chia thành nhiều file để ta dễ dàng tái sử dụng Định nghĩa lớp lưu file header với mở rộng *.h Cài đặt thành viên lớp lưu file nguồn với mở rộng *.cpp Thơng thường lớp có cặp file *.H *.CPP, gộp lớp có liên quan vào cặp file.Cuối file *.H thị #include đến file *.CPP.Cuối file *.CPP "chương trình chính" dùng để test file CPP kèm theo #define thích hợp cho việc test Chương trình lưu file nguồn riêng include file header lớp dùng đến 2|Phong cách lập trình C++ Mỗi file header lớp nên sử dụng định hướng #ifndef, #define, #endif để đảm bảo file header include lần Ký hiệu #define nên tên file header viết toàn chữ hoa với dấu gạch ( _ ) thay cho dấu chấm Ví dụ: //counter.h #ifndef COUNTER_H #define COUNTER_H class Counter { // }; // end Counter #include "counter.cpp" #endif // COUNTER_H Chuẩn tài liệu Sử dụng // cho thích Chỉ dùng /* */ để tạm thời vơ hiệu hóa đoạn chương trình để test debug Mỗi file nguồn, CPP H, phải bắt đầu khối thích đủ để người đọc kết nối file chúng bị tách Mẫu sau: // // Name: Họ tên // Class: Lớp // Project: mơ tả/tên dự án (một dịng, giống file) // Purpose: Mục đích sử dụng mã chương trình khai báo file // Mỗi lớp, hàm, phương thức phải có khối thích mơ tả ngắn gọn lớp, hàm, phương thức làm gì; hàm/phương thức: liệt kê tất tham số, nêu rõ ý nghĩa tham số; mô tả điều kiện trước sau hàm/phương thức đó.Chọn tên có nghĩa đơn giản hóa thích Lưu ý, tài liệu phương thức đặt định nghĩa lớp (*.H) ta chép tài liệu vào file *.CPP khơng bắt buộc Có thể thích đoạn code bên hàm, nhiên nên thích đủ hiểu Quá nhiều thích thích thừa làm code trơng rối Tất thích phải lùi đầu dịng đoạn code quanh Tên: 3|Phong cách lập trình C++ • Sử dụng tên có nghĩa.Tên giàu tính mơ tả cho biến tồn cục tên ngắn gọn cho biến cục bộ.Tên có nghĩa giúp chương trình dễ viết dễ debug Nếu bạn phải dùng tên khơng có nghĩa cho bạn chưa hồn tồn hiểu tốn giải Hãy cố hiểu rõ trước tiếp tục lập trình Theo thơnglệ, tên i j dành cho số, p q dành cho trỏ, s t dành cho xâu.Người ta dùng tên bắt đầu kết thúc chữ “p” cho biến trỏ (chẳng hạn nodep, intp, intpp, doublep), tên bắt đầu chữ hoa cho biến toàn cục (chẳng hạn Globals) tất chữ hoa cho số (chẳng hạn CONSTANTS) Khuyến cáo sử dụng tên tiếng Anh kiểu camel (xem bên dưới) Các namespace C++ góp phần làm rõ nghĩa tên mà khơng cần sử dụng tên dài • Đặt tên cách quán Các biến có liên quan phải đặt tên có liên quan, đồng thời phải làm bật khác chúng Các tên lớp sau vừa dài vừa không quán: class UserQueue { int noOfItemsInQ, frontOfTheQueue, queueCapacity; public int noOfUsersInQueue() { } }; Thứ nhất, nội dung queue biểu diễn ba dấu hiệu: Q, Queue queue Thứ hai, biến hàm thành phần lớp UserQueue sử dụng đối tượng lớp này, viết queue.queueCapacity hay queue.noOfUsersInQueue() rõ ràng thừa Chúng ta viết lại lớp với tên sau: class UserQueue { int nitems, front, capacity; public int nusers() { } } Không thân đoạn mã định nghĩa lớp dễ hiểu hơn, mà đoạn mã sử dụng lớp UserQueue dễ hiểu hơn: queue.capacity++; n = queue.nusers(); Lớp UserQueue cải tiến thêm, nitems nusers thực chất biểu diễn khái niệm cần sử dụng hai tên mà thơi 4|Phong cách lập trình C++ • Tên project, form, component sinh môi trường lập trình: project form phải có tên hợp lý, không để nguyên Form1 Các component phải đặt tên có nghĩa, ngoại trừ component Label, Group Box, etc., chúng khơng có mặt code Các component nên đặt hậu tố kiểu đối tượng: Ex: widthScale, nameText, leftScrollbar, mainForm, myLabel, printerDialog • Tên biến tên hàm: o Thường phải từ cụm từ Ngoại lệ nhất: đếm vịng for() đơi cần dùng tên chữ chẳng hạn i o không viết tắt trừ từ viết tắt thông dụng chẳng hạn HTML, coi từ viết tắt từ thơng thường (tên có dạng convertToHtml thay convertToHTML) o Đặt tên cho namespace nên chữ in thường toàn bộ: Ex: mynamespace, com.company.application.ui o Tên biến danh từ bắt đầu ký tự in thường, từ bắt đầu ký tự in hoa: Ex: line, audioSystem… o Đặt tên “động” cho hàm: Tên hàm nên động từ theo sau danh từ Ví dụ: now = date.getTime(); Các hàm trả giá trị boolean nên đặt tên thể giá trị mà trả Ví dụ: isOctal( c ) tốt là: checkOctal( c ); cách đặt tên thứ cho biết hàm trả giá trị true c số octal trả false trường hợp ngược lại o Tên hàm thể chức Các tiền tố thường sử dụng: get/set, add/remove, create/destroy, start/stop, insert/delete, increment/decrement, old/new, begin/end, first/last, up/down, min/max, next/previous, old/new, open/close, show/hide, suspend/resume Ex: +“set/get” đặt phương thức truy cập trực tiếp đến thuộc tính: getName(), setSalary(int) … +“find” sử dụng phương thức tìm kiếm: vertex.findNearestVertex(); matrix.findSmallestElement(); node.findShortestPath(Node destinationNode); +Tập hợp nhiều đối tượng nên đặt tên đặt tên số nhiều: vector points; int[] values; +Những biến số lượng đối tượng nên có tiền tố “n”: nPoints, nLines… • Tên class (và struct): Dùng chữ hoa tất chữ đầu từ, lại chữ thường Ví dụ: GameBoard, Game Định dạng • Lùi đầu dòng đoạn code, mức dùng ký tự, tốt dùng tab 5|Phong cách lập trình C++ o Phải thống nhất, ln dùng dùng ký tự o Chú ý không dùng lẫn lộn ký tự tab space để lùi đầu dịng, (các mơi trường soạn thảo quy ước khác độ dài tab) • Mỗi dịng chứa nhiều lệnh không dài 79 ký tự Một lệnh chia thành nhiều dịng, phần sau phải lùi đầu dịng hợp lý Ví dụ : cout ) > ) dịch phải bitoff bit Kết thu lại dịch trái bit Bởi bit cuối bitoff thay số Kết lại trừ giá trị ban đầu bitoff, kết phép trừ bit cuối giá trị ban đầu bitoff Ba bit dùng để dịch subkey sang phải Bởi vậy, biểu thức nói tương đương với biểu thức sau đây: subkeu = subkey >> ( bitoff & 0×7 ); Rõ ràng cách viết thứ hai dễ hiểu nhiều Một ví dụ khác cách viết biểu thức ngắn gọn làm phức tạp hóa vấn đề: child = ( ! LC && ! RC ) ? : ( ! LC ? RC : LC ); Cách viết dài hơn, dễ hiểu nhiều: if( LC == && RC == ) child = 0; else if( LC == ) child = RC; else child = LC; 10 | P h o n g c c h l ậ p t r ì n h C + + Toán tử ? : thích hợp cho biểu thức ngắn kiểu sau đây: max = ( a > b ) ? a : b; hoặc: printf( “The list has %d item%s\n”, n, n == ? “” : “s” ); Hãy nhớ mục tiêu viết đoạn mã dễ hiểu, đoạn mã ngắn gọn 8.Cẩn thận với dấu = = == toán tử gây nhần lẫn C, bạn tránh gặp thói quen viết r-value (biểu thức bên phải phép gán) sang bên trái phép so sánh: if ( a == 42 ) { }// Cách viết thông thường if ( 42 == a ) { }// Nên viết Và khác biệt, bạn nhầm if ( a = 42 ) { }// Chạy bình thường, khó tìm lỗi if ( 42 = a ) { }// Báo lỗi chỗ Các idiom Cũng giống ngôn ngữ tự nhiên, ngôn ngữ lập trình có idiom (thành ngữ !?), cách viết code tắc cho trường hợp thông dụng, tạm hiểu idiom chuẩn không bắt buộc đa số người dùng tuân theo Sử dụng idiom giúp giảm bớt khả mắc lỗi đồng thời làm chương trình dễ đọc “chuyên nghiệp” Sau số idiom phổ biến: 1.Các idiom cho mảng Để duyệt qua n phần tử mảng khởi tạo chúng, có cách viết sau đây: i = 0; while ( i = 0; ) array[ i ] = 1.0; Tất cách viết đúng, nhiên idiom cho trường hợp là: for( i = 0; i < n; ++i ) array[ i ] = 1.0; 11 | P h o n g c c h l ậ p t r ì n h C + + Một lưu ý nhỏ khác biệt i++ ++i: • i++ lấy giá trị i trước tăng lên • ++i tăng giá trị i lấy giá trị Do đếm vịng lặp (for(),while()) nên dùng ++i để tăng tốc độ Idiom vòng lặp duyệt qua phần tử danh sách (list) for( p = list; p != NULL; p = p->next ) Đối với container: vector::iterator it; for(it = v.begin(); it != v.end(); ++it) std::cout

Ngày đăng: 17/08/2012, 08:48

Hình ảnh liên quan

Bảng sau trong sách C Programming Language chỉ ra thứ tự ưu tiên các toán tử trong C. Hàng trên cùng có mức ưu tiên cao nhất - Phong cách lập trình C

Bảng sau.

trong sách C Programming Language chỉ ra thứ tự ưu tiên các toán tử trong C. Hàng trên cùng có mức ưu tiên cao nhất Xem tại trang 8 của tài liệu.
Dùng bảng này, có thể thấy rằng char *a[10]; làm ột mảng 10 con trỏ kí tự. Bạn cũng thấy rằng tại sao lại cần dấu - Phong cách lập trình C

ng.

bảng này, có thể thấy rằng char *a[10]; làm ột mảng 10 con trỏ kí tự. Bạn cũng thấy rằng tại sao lại cần dấu Xem tại trang 8 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan