SlideShare a Scribd company logo
class             true
             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
                                                  operator           public             C++

 VCBB© 3.0
             PP LT HƯỚNG ĐỐI TƯỢNG
catch            cout             this                ThS. Đặng Bình Phương
                                                       dbphuong@fit.hcmus.edu.vn




                                            PHONG CÁCH LẬP TRÌNH




                                                  inline             private            OOP

 new                                       cin                try

        friend            bool                    virtual            throw

 STL             using                    false                                delete         1

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
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
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
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
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
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 Captital-lower)
          HumpBackNotation
          InterCaps, NerdCaps, InternalCapitalization
          WordsStrungTogether, WordsRunTogether
                                                           Phong cách lập trình
                                                                                  7
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
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
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: biến có kiểu là số nguyên dài
              (“l” – long integer)
            • arru8NumberList: biến là một mảng các số
              nguyên 8 bit không dấu
              (“arru8” – array of unsigned 8-bit integers)
            • szName: biến là một chuỗi có ký tự kết thúc
              (“sz” – zero-terminated string)
                                                             Phong cách lập trình
                                                                                    10
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 ứ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: biến thể hiện một dòng
              (“rw” – row)
            • usName: biến thể hiện một chuỗi “không an toàn”
              (“us” – unsafe), nghĩa là nó cần được “xử lý” trước
              khi sử dụng.
            • strName: biến thể hiện một chuỗi chứa một tên
              (“str” – string).
                                                             Phong cách lập trình
                                                                                    11
Quy ước đặt tên (naming convention)
     
VC
     BB
           Ký hiệu Hung-ga-ri

         Ví dụ
          bBusy: kiểu luận lý (“b” – boolean)
          cApples: số lượng (“c” – count)
          dwLightYears: kiểu từ kép (“dw” – double word)
          fBusy: cờ trạng thái (“f” – flag)
          nSize: kiểu số nguyên và lưu số lượng
            (“n” – count)
           iSize: kiểu số nguyên và lưu chỉ số
            (“i” – index)
           fpPrice: kiểu số chấm động (“fp” – floating-point)
                                                             Phong cách lập trình
                                                                                    12
Quy ước đặt tên (naming convention)
     
VC
     BB
           Ký hiệu Hung-ga-ri

         Ví dụ
          dbPi: kiểu số thực dài (“db” – double)
          pFoo: kiểu con trỏ (“p” – pointer)
          pfnFunc: con trỏ hàm (“pfn” – pointer to function)
          rgStudents: mảng hoặc một vùng (“rg” – range)
          szLastName: chuỗi có ký tự kết thúc
            (“sz” – zero-terminated string)
           u32Identifier: kiểu số nguyên 32-bit không
            dấu (“u32” – unsigned 32-bit integer)
           stTime: cấu trúc thời gian (“st” – structure)
                                                             Phong cách lập trình
                                                                                    13
Quy ước đặt tên (naming convention)
     
VC
     BB
           Ký hiệu Hung-ga-ri

         Đối với con trỏ và mảng thường có kiểu
         của phần tử đi kèm:
           pszOwner: con trỏ đến chuỗi ký tự có kết thúc
            (“psz” – pointer to zero-terminated string)
           rgfpBalances: mảng các số chấm động
            (“rgfp” – array/range of floating-point)
           aulColors: mảng các số nguyên dài không dấu
            (“aul” – array of unsigned long)




                                                             Phong cách lập trình
                                                                                    14
Quy ước đặt tên (naming convention)
     
VC
     BB
           Ký hiệu Hung-ga-ri

         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):
           wParam: tham số kiểu word (“w” – word-size)
           lParam: tham số kiểu số nguyên dài
            (“l” – long-integer)
           hwndFoo: biến quản lý cửa sổ
            (“hwnd” – handle to a window)
           lpszBar: biến con trỏ số nguyên dài đến một
            chuỗi có kết thúc (“lpsz” – long pointer to a
            zero-terminated string)
                                                             Phong cách lập trình
                                                                                    15
Quy ước đặt tên (naming convention)
     
VC
     BB
              Ký hiệu Hung-ga-ri

         Đôi khi được mở rộng trong C++ để cho biết
         phạm của biến, phân cách bởi dấu gạch dưới:
           g_nWheels: biến toàn cục (“g” – global) và là số
              nguyên (integer).
             _wheels: biến cục bộ (local) và không xác định
              kiểu.
             s_wheels: biến tĩnh (“s” – static).
             m_nWheels: thành viên (“m” – member) của một
              cấu trúc/lớp và là số nguyên (“n” – integer).
             m_wheels: thành viên (“m” – member) của một
              cấu trúc/lớp và không xác định kiểu.
                                                               Phong cách lập trình
                                                                                      16
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:
            iWidth, 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
                                                                                    17
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
                                                                                    18
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
                                                                                         19
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
                                                                                          20
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
                                                                                           21
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”.
                                                                       Phong cách lập trình
                                                                                            22
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ể (mô-đun), 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
                                                                                    23
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
                                                                                    24
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
                                                                                     25
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
                                                                                     26
Quy tắc trình bày tổng thể chương trình
     
VC
     BB
            Quy tắc 4

         Ví dụ
1         a[i++] = 1;
2         a[i] = 1;
3         i++;
4
5         if (doSomething() == false) …
6         bool bResult = doSomething();
7         if (bResult == false) …
8
9         *x += (*xp = (2*k < (n – m) ? c[k + 1] : d[k--]));
10        if (2 * k < n – m)
11               *xp = c[k + 1];
12        else
13               *xp = d[k--];
14        *x = *x + *xp;
                                                                           Phong cách lập trình
                                                                                                  27
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
                                                                                    28
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         x=a+b-c*d;for(int i=0; i<n; i++)              // Khó đọc!
2
3         x = a + b – c * d;                            // Viết thành 2 dòng
4         for (int i = 0; i < n; i++)                   // dễ đọc hơn
5
6         // Thực hiện bao nhiêu lần khi debug?
7         while (i < 100) i++;
8
9         // Phải theo dõi i để biết if có thực hiện không!
10        if (i < 100) i++;


                                                                        Phong cách lập trình
                                                                                               29
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        if (nCount == 0) printf(“No data!n”);
 2
 3        if (nCount == 0)
 4        printf(“No data!n”);
 5
 6        if (nCount == 0)
 7            printf(“No data!n”);




                                                           Phong cách lập trình
                                                                                  30
Quy tắc trình bày dòng lệnh
     
VC
     BB
              Quy tắc 8

     Các 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        // Cách 1                // Cách 2
 2        if (…)                   if (…) {
 3        {                              …
 4               …                 }
 5        }                        else {
 6        else                     …
 7        {                        }
 8               …
 9        }


     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
                                                                           31
Quy tắc trình bày dòng lệnh
     
VC
     BB
              Quy tắc 9

     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        if (a == 1)
 2        {
 3            printf(“Motn”);
 4            if (a == 2)
 5                   printf(“Hain”);
 6            else
 7                   printf(“Khac Mot va Hai!n”);
 8        }




                                                             Phong cách lập trình
                                                                                    32
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        a=b*c;       // Khó đọc!
 2        a = b * c;   // Dễ đọc hơn!
 3
 4        a = b ++;    // Không nên!
 5        a = b++;     // Nên!
 6
 7        a = - b;     // Không nên!
 8        a = -b;      // Nên!




                                                           Phong cách lập trình
                                                                                  33
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         // Khoảng trắng sau dấu , trong khai báo hàm
2         void hoanVi(int a,int b);
3         void hoanVi(int a, int b);
4
5         // Khoảng trắng sau dấu , trong lời gọi hàm
6         hoanVi(x,y);
7         hoanVi(x, y);
8
9         // Khoảng trắng sau dấu ; trong vòng lặp for
10        for (int i = 1;i < n;i++) …
11        for (int i = 1; i < n; i++) …


                                                          Phong cách lập trình
                                                                                 34
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         // Không nên có khoảng trắng giữa hoanVi và (
2         void hoanVi (int a, int b);
3         void hoanVi(int a, int b);
4
5         // Nên có khoảng trắng giữ if và (
6         // Không nên có khoảng trắng giữa strcmp và (
7         if(strcmp (strInput, “info”) == 0)
8             …
9         if (strcmp(strInput, “info”) == 0)
10            …


                                                          Phong cách lập trình
                                                                                 35
Quy tắc trình bày dòng lệnh
     
VC
     BB
            Quy tắc 13

     Nên sử dụng các dấu ( ) khi muốn tránh các lỗi về
     độ ưu tiên toán tử
 1        int i = a >= b && c < d && e <= g + h;
 2        int i = (a >= b) && (c < d) && (e <= (g + h));




                                                           Phong cách lập trình
                                                                                  36
Quy tắc trình bày dòng lệnh
     
VC
     BB
              Quy tắc 14

     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         void main()
2         {
3             // (Các) Đoạn lệnh nhập ở đây
4             …
5
6             // (Các) Đoạn lệnh xử lý ở đây
7             …
8
9             // (Các) Đoạn lệnh xuất Xuất
10            …
11        }
                                                          Phong cách lập trình
                                                                                 37
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        int myComplexFuncuntion(unsigned int uiValue, int iValue, …
 2
 3        int myComplexFuncuntion(unsigned int uiValue,
 4                                 int iValue,
 5                                 char cValue,
 6                                 int *piValue);

                                                              Phong cách lập trình
                                                                                     38
Quy tắc liên quan đến hằng số
     
VC
     BB
            Quy tắc 16

     Tên hằng không theo quy tắc PascalCase,
     camelCase hay ký hiệu Hung-ga-ri mà được viết in
     toàn bộ và giữa các từ cách nhau bằng dấu _
 1        const int NumberOfElements 100;
 2
 3        const int NUMBEROFELEMENTS 100;
 4
 5        const int NUMBER_OF_ELEMENTS 100;




                                                            Phong cách lập trình
                                                                                   39
Quy tắc liên quan đến hằng số
     
VC
     BB
          Quy tắc 17

     Các hằng số không nên viết trực tiếp 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
                                                                           40
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 định nghĩa bằng 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
                                                                                     41
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        int ntuso, nmauso;
 2
 3        int nTuso, nMauso;
 4
 5        int nTuSo, nMauSo;




                                                            Phong cách lập trình
                                                                                   42
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ố.
 1        CPhanSo psPhanSo;
 2
 3        CPhanSo PhanSo;
 4
 5        CPhanSo phanSo;




                                                           Phong cách lập trình
                                                                                  43
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.


                                                       44
Quy tắc liên quan đến biến
     
VC
     BB
            Quy tắc 22

     Mỗi biến 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        float fHeSoA, fHeSoB, fNghiem;       // …!
 2
 3        float fHeSoA, fHeSoB;     // Hệ số a, b của pt bậc 1
 4        float fNghiem;            // Nghiệm của pt bậc 1




                                                                 Phong cách lập trình
                                                                                        45
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        for (i = 0; i < n; i++)        // n là số lần lặp
 2            …
 3
 4        for (n = 0; n < 10; n++)       // n là biến điều khiển
 5            …




                                                                   Phong cách lập trình
                                                                                          46
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        int SoLonNhat(int a[], int n);            // Không rõ hành động
 2
 3        int TimSoLonNhat(int a[], int n);         // Sai quy tắc đặt tên
 4
 5        int timSoLonNhat(int a[], int n);         // OK




                                                                   Phong cách lập trình
                                                                                          47
Quy tắc chú thích chương trình
     
VC
     BB
          Quy tắc 25

                Nên sử dụng dấu // 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
                                                                           48
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
                                                                           49
Quy tắc chú thích chương trình
     
VC
     BB
              Quy tắc 26

     Ví dụ
1         if (a == 2)
2                return true;                      // Trường hợp đặc biệt
3         else
4                return laSoNguyenTo(a));          // Trường hợp khác
5
6         if (argc > 1)
7         {
8                // Mở và xử lý tập tin…
9                FILE *fp = fopen(argv[1], “rb”);
10               if (fp != NULL)
11                   …
12               fclose(fp);
13        }

                                                                        Phong cách lập trình
                                                                                               50
Quy tắc chú thích chương trình
     
VC
     BB
            Quy tắc 27

     Không nên lạm dụng chú thích, cố gắng giữ cho
     chương trình của bạn dễ đọc, dễ hiểu.
 1        i++;   // Câu lệnh này nhằm tăng i thêm 1 đơn vị!!!




                                                            Phong cách lập trình
                                                                                   51
Quy tắc chú thích chương trình
     
VC
     BB
              Quy tắc 28

     Viết chú thích cho từng hàm và cho từng tập tin
     mã nguồn (.h và .cpp).
1         // Mô tả         : Chương trình xử lý mảng một chiều
2         // Tác giả       : Đặng Bình Phương
3         // Email         : dbphuong@fit.hcmus.edu.vn
4         // Ngày cập nhật : 15/06/2011
5
6         // Tên hàm       : timSoLonNhat
7         // Mô tả         : Tìm số lớn nhất trong mảng cho trước
8         // Kiểu tra về   : int
9         // Tham số: int a[] – Mảng một chiều các phần tử kiểu int
10        // Tham số: int n    – Số lượng phần tử
11        int timSoLonNhat(int a[], int n);
12        …

                                                                 Phong cách lập trình
                                                                                        52

More Related Content

What's hot

Công nghệ yêu cầu requirements engineering (re)
Công nghệ yêu cầu requirements engineering (re)Công nghệ yêu cầu requirements engineering (re)
Công nghệ yêu cầu requirements engineering (re)
nataliej4
 
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
 
Chương trình dịch nguyễn văn linh[bookbooming.com]
Chương trình dịch   nguyễn văn linh[bookbooming.com]Chương trình dịch   nguyễn văn linh[bookbooming.com]
Chương trình dịch nguyễn văn linh[bookbooming.com]bookbooming1
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHai Rom
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
MasterCode.vn
 
400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2
400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2
400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2
Nhận Viết Đề Tài Trọn Gói ZALO 0932091562
 
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đĐề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Dịch vụ viết bài trọn gói ZALO 0917193864
 
Các bài toán xử lý ngôn ngữ tự nhiên trong phát triển hệ thống chatbot
Các bài toán xử lý ngôn ngữ tự nhiên trong phát triển hệ thống chatbotCác bài toán xử lý ngôn ngữ tự nhiên trong phát triển hệ thống chatbot
Các bài toán xử lý ngôn ngữ tự nhiên trong phát triển hệ thống chatbot
Minh Pham
 
Xác Suất Thống Kê của Tống Đình Quỳ
Xác Suất Thống Kê của Tống Đình QuỳXác Suất Thống Kê của Tống Đình Quỳ
Xác Suất Thống Kê của Tống Đình Quỳ
hiendoanht
 
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
 
Bài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu SốBài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu Số
viethung094
 
chuong 4. dai so boole
chuong 4.  dai so boolechuong 4.  dai so boole
chuong 4. dai so boole
kikihoho
 
Báo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thốngBáo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thốngJojo Kim
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Nguyễn Công Hoàng
 
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
The Boss
 
Lap trinh-huong-doi-tuong-bang-c#
Lap trinh-huong-doi-tuong-bang-c#Lap trinh-huong-doi-tuong-bang-c#
Lap trinh-huong-doi-tuong-bang-c#
Thanhlanh nguyen
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Nguyễn Danh Thanh
 
Co so du lieu t sql
Co so du lieu t sqlCo so du lieu t sql
Co so du lieu t sqlANHMATTROI
 
Hướng dẫn trình bày báo cáo đề tài, báo cáo nhóm
Hướng dẫn trình bày báo cáo đề tài, báo cáo nhómHướng dẫn trình bày báo cáo đề tài, báo cáo nhóm
Hướng dẫn trình bày báo cáo đề tài, báo cáo nhóm
Chiến Phan
 

What's hot (20)

Công nghệ yêu cầu requirements engineering (re)
Công nghệ yêu cầu requirements engineering (re)Công nghệ yêu cầu requirements engineering (re)
Công nghệ yêu cầu requirements engineering (re)
 
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)
 
Chương trình dịch nguyễn văn linh[bookbooming.com]
Chương trình dịch   nguyễn văn linh[bookbooming.com]Chương trình dịch   nguyễn văn linh[bookbooming.com]
Chương trình dịch nguyễn văn linh[bookbooming.com]
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanh
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
 
400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2
400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2
400 câu hỏi thi trắc nghiệm ASP.NET có đáp án - Thiết kế website kinh doanh 2
 
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đĐề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
 
Các bài toán xử lý ngôn ngữ tự nhiên trong phát triển hệ thống chatbot
Các bài toán xử lý ngôn ngữ tự nhiên trong phát triển hệ thống chatbotCác bài toán xử lý ngôn ngữ tự nhiên trong phát triển hệ thống chatbot
Các bài toán xử lý ngôn ngữ tự nhiên trong phát triển hệ thống chatbot
 
bai tap co loi giai xac suat thong ke
bai tap co loi giai xac suat thong kebai tap co loi giai xac suat thong ke
bai tap co loi giai xac suat thong ke
 
Xác Suất Thống Kê của Tống Đình Quỳ
Xác Suất Thống Kê của Tống Đình QuỳXác Suất Thống Kê của Tống Đình Quỳ
Xác Suất Thống Kê của Tống Đình Quỳ
 
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
 
Bài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu SốBài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu Số
 
chuong 4. dai so boole
chuong 4.  dai so boolechuong 4.  dai so boole
chuong 4. dai so boole
 
Báo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thốngBáo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thống
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
 
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
 
Lap trinh-huong-doi-tuong-bang-c#
Lap trinh-huong-doi-tuong-bang-c#Lap trinh-huong-doi-tuong-bang-c#
Lap trinh-huong-doi-tuong-bang-c#
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
 
Co so du lieu t sql
Co so du lieu t sqlCo so du lieu t sql
Co so du lieu t sql
 
Hướng dẫn trình bày báo cáo đề tài, báo cáo nhóm
Hướng dẫn trình bày báo cáo đề tài, báo cáo nhómHướng dẫn trình bày báo cáo đề tài, báo cáo nhóm
Hướng dẫn trình bày báo cáo đề tài, báo cáo nhóm
 

Viewers also liked

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
 
Nmlt c01 cac_khainiemcoban_#ref
Nmlt c01 cac_khainiemcoban_#refNmlt c01 cac_khainiemcoban_#ref
Nmlt c01 cac_khainiemcoban_#refvitbau1412
 
Nmlt c12 mang2_chieu
Nmlt c12 mang2_chieuNmlt c12 mang2_chieu
Nmlt c12 mang2_chieuvitbau1412
 
Nmlt c00 gioi_thieumonhoc
Nmlt c00 gioi_thieumonhocNmlt c00 gioi_thieumonhoc
Nmlt c00 gioi_thieumonhocvitbau1412
 
Nmlt c01 cac_khainiemcobanvelaptrinh_in
Nmlt c01 cac_khainiemcobanvelaptrinh_inNmlt c01 cac_khainiemcobanvelaptrinh_in
Nmlt c01 cac_khainiemcobanvelaptrinh_in
Huy Nguyễn
 
Nmlt c02 gioi_thieunnltc_in
Nmlt c02 gioi_thieunnltc_inNmlt c02 gioi_thieunnltc_in
Nmlt c02 gioi_thieunnltc_in
Huy Nguyễn
 
Nmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_inNmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_in
Huy Nguyễn
 
THCS_W10_BaiGiang_TẠO LẬP ĐỒ THỊ TRONG EXCEL
THCS_W10_BaiGiang_TẠO LẬP ĐỒ THỊ TRONG EXCELTHCS_W10_BaiGiang_TẠO LẬP ĐỒ THỊ TRONG EXCEL
THCS_W10_BaiGiang_TẠO LẬP ĐỒ THỊ TRONG EXCELCNTT-DHQG
 
Bài 1: Khái niệm lập trình và ngôn ngữ lập trình
Bài 1: Khái niệm lập trình và ngôn ngữ lập trìnhBài 1: Khái niệm lập trình và ngôn ngữ lập trình
Bài 1: Khái niệm lập trình và ngôn ngữ lập trìnhChâu Trần
 
Phần 1: Các khái niệm cơ bản về lập trình
Phần 1: Các khái niệm cơ bản về lập trìnhPhần 1: Các khái niệm cơ bản về lập trình
Phần 1: Các khái niệm cơ bản về lập trìnhHuy Rùa
 
Kỹ thuật lập trình C++ cơ sở và nâng cao GS.phạm văn ất 546 trang
Kỹ thuật lập trình C++ cơ sở và nâng cao   GS.phạm văn ất  546 trangKỹ thuật lập trình C++ cơ sở và nâng cao   GS.phạm văn ất  546 trang
Kỹ thuật lập trình C++ cơ sở và nâng cao GS.phạm văn ất 546 trang
Dat Ngo
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++
ptquang160492
 

Viewers also liked (12)

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)
 
Nmlt c01 cac_khainiemcoban_#ref
Nmlt c01 cac_khainiemcoban_#refNmlt c01 cac_khainiemcoban_#ref
Nmlt c01 cac_khainiemcoban_#ref
 
Nmlt c12 mang2_chieu
Nmlt c12 mang2_chieuNmlt c12 mang2_chieu
Nmlt c12 mang2_chieu
 
Nmlt c00 gioi_thieumonhoc
Nmlt c00 gioi_thieumonhocNmlt c00 gioi_thieumonhoc
Nmlt c00 gioi_thieumonhoc
 
Nmlt c01 cac_khainiemcobanvelaptrinh_in
Nmlt c01 cac_khainiemcobanvelaptrinh_inNmlt c01 cac_khainiemcobanvelaptrinh_in
Nmlt c01 cac_khainiemcobanvelaptrinh_in
 
Nmlt c02 gioi_thieunnltc_in
Nmlt c02 gioi_thieunnltc_inNmlt c02 gioi_thieunnltc_in
Nmlt c02 gioi_thieunnltc_in
 
Nmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_inNmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_in
 
THCS_W10_BaiGiang_TẠO LẬP ĐỒ THỊ TRONG EXCEL
THCS_W10_BaiGiang_TẠO LẬP ĐỒ THỊ TRONG EXCELTHCS_W10_BaiGiang_TẠO LẬP ĐỒ THỊ TRONG EXCEL
THCS_W10_BaiGiang_TẠO LẬP ĐỒ THỊ TRONG EXCEL
 
Bài 1: Khái niệm lập trình và ngôn ngữ lập trình
Bài 1: Khái niệm lập trình và ngôn ngữ lập trìnhBài 1: Khái niệm lập trình và ngôn ngữ lập trình
Bài 1: Khái niệm lập trình và ngôn ngữ lập trình
 
Phần 1: Các khái niệm cơ bản về lập trình
Phần 1: Các khái niệm cơ bản về lập trìnhPhần 1: Các khái niệm cơ bản về lập trình
Phần 1: Các khái niệm cơ bản về lập trình
 
Kỹ thuật lập trình C++ cơ sở và nâng cao GS.phạm văn ất 546 trang
Kỹ thuật lập trình C++ cơ sở và nâng cao   GS.phạm văn ất  546 trangKỹ thuật lập trình C++ cơ sở và nâng cao   GS.phạm văn ất  546 trang
Kỹ thuật lập trình C++ cơ sở và nâng cao GS.phạm văn ất 546 trang
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++
 

Similar to Phong cách lập trình - Đặng Bình Phương

Pplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09aPplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09aPix Nhox
 
Phần 2: Giới thiệu ngôn ngữ lập trình C
Phần 2: Giới thiệu ngôn ngữ lập trình CPhần 2: Giới thiệu ngôn ngữ lập trình C
Phần 2: Giới thiệu ngôn ngữ lập trình CHuy Rùa
 
Nmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltcNmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltc
Minh Ngoc Tran
 
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
 
Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892
HaiNguyen870
 
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
 

Similar to Phong cách lập trình - Đặng Bình Phương (8)

Pplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09aPplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09a
 
Phần 2: Giới thiệu ngôn ngữ lập trình C
Phần 2: Giới thiệu ngôn ngữ lập trình CPhần 2: Giới thiệu ngôn ngữ lập trình C
Phần 2: Giới thiệu ngôn ngữ lập trình C
 
Nmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltcNmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltc
 
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)
 
Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892
 
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
 
C fast food
C fast foodC fast food
C fast food
 
C# coban
C# cobanC# coban
C# coban
 

More from Nguyễn Công Hoàng

Dieubatngochoem
DieubatngochoemDieubatngochoem
Dieubatngochoem
Nguyễn Công Hoàng
 
Kruskal algorithm
Kruskal algorithmKruskal algorithm
Kruskal algorithm
Nguyễn Công Hoàng
 
Lap trinh huong doi tuong voi java tran dinh que
Lap trinh huong doi tuong voi java   tran dinh queLap trinh huong doi tuong voi java   tran dinh que
Lap trinh huong doi tuong voi java tran dinh que
Nguyễn Công Hoàng
 
Timkiem&sapxep
Timkiem&sapxepTimkiem&sapxep
Timkiem&sapxep
Nguyễn Công Hoàng
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 8
Giáo trình Phân tích và thiết kế giải thuật - CHAP 8Giáo trình Phân tích và thiết kế giải thuật - CHAP 8
Giáo trình Phân tích và thiết kế giải thuật - CHAP 8
Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 7
Giáo trình Phân tích và thiết kế giải thuật - CHAP 7Giáo trình Phân tích và thiết kế giải thuật - CHAP 7
Giáo trình Phân tích và thiết kế giải thuật - CHAP 7
Nguyễn Công Hoàng
 
Lời khuyên
Lời khuyênLời khuyên
Lời khuyên
Nguyễn Công Hoàng
 

More from Nguyễn Công Hoàng (13)

Dieubatngochoem
DieubatngochoemDieubatngochoem
Dieubatngochoem
 
Kruskal algorithm
Kruskal algorithmKruskal algorithm
Kruskal algorithm
 
Lap trinh huong doi tuong voi java tran dinh que
Lap trinh huong doi tuong voi java   tran dinh queLap trinh huong doi tuong voi java   tran dinh que
Lap trinh huong doi tuong voi java tran dinh que
 
Timkiem&sapxep
Timkiem&sapxepTimkiem&sapxep
Timkiem&sapxep
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 8
Giáo trình Phân tích và thiết kế giải thuật - CHAP 8Giáo trình Phân tích và thiết kế giải thuật - CHAP 8
Giáo trình Phân tích và thiết kế giải thuật - CHAP 8
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 7
Giáo trình Phân tích và thiết kế giải thuật - CHAP 7Giáo trình Phân tích và thiết kế giải thuật - CHAP 7
Giáo trình Phân tích và thiết kế giải thuật - CHAP 7
 
Lời khuyên
Lời khuyênLời khuyên
Lời khuyên
 

Recently uploaded

Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nguyen Thanh Tu Collection
 
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdfGIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
LngHu10
 
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
https://www.facebook.com/garmentspace
 
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nayẢnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
chinhkt50
 
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptxCÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
CNGTRC3
 
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdfDS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
thanhluan21
 
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdfBAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
phamthuhoai20102005
 
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfGIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
Điện Lạnh Bách Khoa Hà Nội
 
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
Nguyen Thanh Tu Collection
 
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
ngocnguyensp1
 
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
Nguyen Thanh Tu Collection
 

Recently uploaded (11)

Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
 
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdfGIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
 
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
 
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nayẢnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
 
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptxCÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
CÁC BIỆN PHÁP KỸ THUẬT AN TOÀN KHI XÃY RA HỎA HOẠN TRONG.pptx
 
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdfDS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
 
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdfBAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
 
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfGIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
 
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
 
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
 
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
 

Phong cách lập trình - Đặng Bình Phương

  • 1. class true 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 operator public C++ VCBB© 3.0 PP LT HƯỚNG ĐỐI TƯỢNG catch cout this ThS. Đặng Bình Phương dbphuong@fit.hcmus.edu.vn PHONG CÁCH LẬP TRÌNH inline private OOP new cin try friend bool virtual throw STL using false delete 1
  • 2.  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. 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. 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. 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. 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. 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 Captital-lower)  HumpBackNotation  InterCaps, NerdCaps, InternalCapitalization  WordsStrungTogether, WordsRunTogether Phong cách lập trình 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. 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. 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: biến có kiểu là số nguyên dài (“l” – long integer) • arru8NumberList: biến là một mảng các số nguyên 8 bit không dấu (“arru8” – array of unsigned 8-bit integers) • szName: biến là một chuỗi có ký tự kết thúc (“sz” – zero-terminated string) Phong cách lập trình 10
  • 11. 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 ứ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: biến thể hiện một dòng (“rw” – row) • usName: biến thể hiện một chuỗi “không an toàn” (“us” – unsafe), nghĩa là nó cần được “xử lý” trước khi sử dụng. • strName: biến thể hiện một chuỗi chứa một tên (“str” – string). Phong cách lập trình 11
  • 12. Quy ước đặt tên (naming convention)  VC BB Ký hiệu Hung-ga-ri Ví dụ  bBusy: kiểu luận lý (“b” – boolean)  cApples: số lượng (“c” – count)  dwLightYears: kiểu từ kép (“dw” – double word)  fBusy: cờ trạng thái (“f” – flag)  nSize: kiểu số nguyên và lưu số lượng (“n” – count)  iSize: kiểu số nguyên và lưu chỉ số (“i” – index)  fpPrice: kiểu số chấm động (“fp” – floating-point) Phong cách lập trình 12
  • 13. Quy ước đặt tên (naming convention)  VC BB Ký hiệu Hung-ga-ri Ví dụ  dbPi: kiểu số thực dài (“db” – double)  pFoo: kiểu con trỏ (“p” – pointer)  pfnFunc: con trỏ hàm (“pfn” – pointer to function)  rgStudents: mảng hoặc một vùng (“rg” – range)  szLastName: chuỗi có ký tự kết thúc (“sz” – zero-terminated string)  u32Identifier: kiểu số nguyên 32-bit không dấu (“u32” – unsigned 32-bit integer)  stTime: cấu trúc thời gian (“st” – structure) Phong cách lập trình 13
  • 14. Quy ước đặt tên (naming convention)  VC BB Ký hiệu Hung-ga-ri Đối với con trỏ và mảng thường có kiểu của phần tử đi kèm:  pszOwner: con trỏ đến chuỗi ký tự có kết thúc (“psz” – pointer to zero-terminated string)  rgfpBalances: mảng các số chấm động (“rgfp” – array/range of floating-point)  aulColors: mảng các số nguyên dài không dấu (“aul” – array of unsigned long) Phong cách lập trình 14
  • 15. Quy ước đặt tên (naming convention)  VC BB Ký hiệu Hung-ga-ri 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):  wParam: tham số kiểu word (“w” – word-size)  lParam: tham số kiểu số nguyên dài (“l” – long-integer)  hwndFoo: biến quản lý cửa sổ (“hwnd” – handle to a window)  lpszBar: biến con trỏ số nguyên dài đến một chuỗi có kết thúc (“lpsz” – long pointer to a zero-terminated string) Phong cách lập trình 15
  • 16. Quy ước đặt tên (naming convention)  VC BB Ký hiệu Hung-ga-ri Đôi khi được mở rộng trong C++ để cho biết phạm của biến, phân cách bởi dấu gạch dưới:  g_nWheels: biến toàn cục (“g” – global) và là số nguyên (integer).  _wheels: biến cục bộ (local) và không xác định kiểu.  s_wheels: biến tĩnh (“s” – static).  m_nWheels: thành viên (“m” – member) của một cấu trúc/lớp và là số nguyên (“n” – integer).  m_wheels: thành viên (“m” – member) của một cấu trúc/lớp và không xác định kiểu. Phong cách lập trình 16
  • 17. 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: iWidth, 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 17
  • 18. 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 18
  • 19. 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 19
  • 20. 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 20
  • 21. 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 21
  • 22. 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”. Phong cách lập trình 22
  • 23. 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ể (mô-đun), 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 23
  • 24. 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 24
  • 25. 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 25
  • 26. 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 26
  • 27. Quy tắc trình bày tổng thể chương trình  VC BB Quy tắc 4 Ví dụ 1 a[i++] = 1; 2 a[i] = 1; 3 i++; 4 5 if (doSomething() == false) … 6 bool bResult = doSomething(); 7 if (bResult == false) … 8 9 *x += (*xp = (2*k < (n – m) ? c[k + 1] : d[k--])); 10 if (2 * k < n – m) 11 *xp = c[k + 1]; 12 else 13 *xp = d[k--]; 14 *x = *x + *xp; Phong cách lập trình 27
  • 28. 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 28
  • 29. 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 x=a+b-c*d;for(int i=0; i<n; i++) // Khó đọc! 2 3 x = a + b – c * d; // Viết thành 2 dòng 4 for (int i = 0; i < n; i++) // dễ đọc hơn 5 6 // Thực hiện bao nhiêu lần khi debug? 7 while (i < 100) i++; 8 9 // Phải theo dõi i để biết if có thực hiện không! 10 if (i < 100) i++; Phong cách lập trình 29
  • 30. 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 if (nCount == 0) printf(“No data!n”); 2 3 if (nCount == 0) 4 printf(“No data!n”); 5 6 if (nCount == 0) 7 printf(“No data!n”); Phong cách lập trình 30
  • 31. Quy tắc trình bày dòng lệnh  VC BB Quy tắc 8 Các 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 // Cách 1 // Cách 2 2 if (…) if (…) { 3 { … 4 … } 5 } else { 6 else … 7 { } 8 … 9 } 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 31
  • 32. Quy tắc trình bày dòng lệnh  VC BB Quy tắc 9 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 if (a == 1) 2 { 3 printf(“Motn”); 4 if (a == 2) 5 printf(“Hain”); 6 else 7 printf(“Khac Mot va Hai!n”); 8 } Phong cách lập trình 32
  • 33. 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 a=b*c; // Khó đọc! 2 a = b * c; // Dễ đọc hơn! 3 4 a = b ++; // Không nên! 5 a = b++; // Nên! 6 7 a = - b; // Không nên! 8 a = -b; // Nên! Phong cách lập trình 33
  • 34. 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 // Khoảng trắng sau dấu , trong khai báo hàm 2 void hoanVi(int a,int b); 3 void hoanVi(int a, int b); 4 5 // Khoảng trắng sau dấu , trong lời gọi hàm 6 hoanVi(x,y); 7 hoanVi(x, y); 8 9 // Khoảng trắng sau dấu ; trong vòng lặp for 10 for (int i = 1;i < n;i++) … 11 for (int i = 1; i < n; i++) … Phong cách lập trình 34
  • 35. 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 // Không nên có khoảng trắng giữa hoanVi và ( 2 void hoanVi (int a, int b); 3 void hoanVi(int a, int b); 4 5 // Nên có khoảng trắng giữ if và ( 6 // Không nên có khoảng trắng giữa strcmp và ( 7 if(strcmp (strInput, “info”) == 0) 8 … 9 if (strcmp(strInput, “info”) == 0) 10 … Phong cách lập trình 35
  • 36. Quy tắc trình bày dòng lệnh  VC BB Quy tắc 13 Nên sử dụng các dấu ( ) khi muốn tránh các lỗi về độ ưu tiên toán tử 1 int i = a >= b && c < d && e <= g + h; 2 int i = (a >= b) && (c < d) && (e <= (g + h)); Phong cách lập trình 36
  • 37. Quy tắc trình bày dòng lệnh  VC BB Quy tắc 14 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 void main() 2 { 3 // (Các) Đoạn lệnh nhập ở đây 4 … 5 6 // (Các) Đoạn lệnh xử lý ở đây 7 … 8 9 // (Các) Đoạn lệnh xuất Xuất 10 … 11 } Phong cách lập trình 37
  • 38. 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 int myComplexFuncuntion(unsigned int uiValue, int iValue, … 2 3 int myComplexFuncuntion(unsigned int uiValue, 4 int iValue, 5 char cValue, 6 int *piValue); Phong cách lập trình 38
  • 39. Quy tắc liên quan đến hằng số  VC BB Quy tắc 16 Tên hằng không theo quy tắc PascalCase, camelCase hay ký hiệu Hung-ga-ri mà được viết in toàn bộ và giữa các từ cách nhau bằng dấu _ 1 const int NumberOfElements 100; 2 3 const int NUMBEROFELEMENTS 100; 4 5 const int NUMBER_OF_ELEMENTS 100; Phong cách lập trình 39
  • 40. Quy tắc liên quan đến hằng số  VC BB Quy tắc 17 Các hằng số không nên viết trực tiếp 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 40
  • 41. 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 định nghĩa bằng 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 41
  • 42. 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 int ntuso, nmauso; 2 3 int nTuso, nMauso; 4 5 int nTuSo, nMauSo; Phong cách lập trình 42
  • 43. 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ố. 1 CPhanSo psPhanSo; 2 3 CPhanSo PhanSo; 4 5 CPhanSo phanSo; Phong cách lập trình 43
  • 44. 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. 44
  • 45. Quy tắc liên quan đến biến  VC BB Quy tắc 22 Mỗi biến 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 float fHeSoA, fHeSoB, fNghiem; // …! 2 3 float fHeSoA, fHeSoB; // Hệ số a, b của pt bậc 1 4 float fNghiem; // Nghiệm của pt bậc 1 Phong cách lập trình 45
  • 46. 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 for (i = 0; i < n; i++) // n là số lần lặp 2 … 3 4 for (n = 0; n < 10; n++) // n là biến điều khiển 5 … Phong cách lập trình 46
  • 47. 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 int SoLonNhat(int a[], int n); // Không rõ hành động 2 3 int TimSoLonNhat(int a[], int n); // Sai quy tắc đặt tên 4 5 int timSoLonNhat(int a[], int n); // OK Phong cách lập trình 47
  • 48. Quy tắc chú thích chương trình  VC BB Quy tắc 25 Nên sử dụng dấu // 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 48
  • 49. 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 49
  • 50. Quy tắc chú thích chương trình  VC BB Quy tắc 26 Ví dụ 1 if (a == 2) 2 return true; // Trường hợp đặc biệt 3 else 4 return laSoNguyenTo(a)); // Trường hợp khác 5 6 if (argc > 1) 7 { 8 // Mở và xử lý tập tin… 9 FILE *fp = fopen(argv[1], “rb”); 10 if (fp != NULL) 11 … 12 fclose(fp); 13 } Phong cách lập trình 50
  • 51. Quy tắc chú thích chương trình  VC BB Quy tắc 27 Không nên lạm dụng chú thích, cố gắng giữ cho chương trình của bạn dễ đọc, dễ hiểu. 1 i++; // Câu lệnh này nhằm tăng i thêm 1 đơn vị!!! Phong cách lập trình 51
  • 52. Quy tắc chú thích chương trình  VC BB Quy tắc 28 Viết chú thích cho từng hàm và cho từng tập tin mã nguồn (.h và .cpp). 1 // Mô tả : Chương trình xử lý mảng một chiều 2 // Tác giả : Đặng Bình Phương 3 // Email : dbphuong@fit.hcmus.edu.vn 4 // Ngày cập nhật : 15/06/2011 5 6 // Tên hàm : timSoLonNhat 7 // Mô tả : Tìm số lớn nhất trong mảng cho trước 8 // Kiểu tra về : int 9 // Tham số: int a[] – Mảng một chiều các phần tử kiểu int 10 // Tham số: int n – Số lượng phần tử 11 int timSoLonNhat(int a[], int n); 12 … Phong cách lập trình 52