Câu lệnh ghép (còn được gọi là khối lệnh, hoặc câu lệnh khối) là một nhóm không hoặc nhiều câu lệnh được trình biên dịch xử lý như thể nó là một câu lệnh đơn lẻ.

Các khối bắt đầu bằng ký hiệu {, kết thúc bằng ký hiệu}, với các câu lệnh được thực thi được đặt ở giữa. Các khối có thể được sử dụng ở bất cứ đâu cho phép một câu lệnh duy nhất. Không cần dấu chấm phẩy ở cuối khối.

Bạn đã thấy một ví dụ về các khối khi viết hàm, vì thân hàm là một khối:

int add(int x, int y)
{ // start block
    return x + y;
} // end block (no semicolon)
 
int main()
{ // start block
 
    // multiple statements
    int value {}; // this is initialization, not a block
    add(3, 4);
 
    return 0;
 
} // end block (no semicolon)

1. Các khối bên trong các khối khác

Mặc dù các hàm không thể được lồng vào bên trong các hàm khác, nhưng các khối có thể được lồng vào bên trong các khối khác:

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

int add(int x, int y)
{ // block
    return x + y;
} // end block
 
int main()
{ // outer block
 
    // multiple statements
    int value {};
 
    { // inner/nested block
        add(3, 4);
    } // end inner/nested block
 
    return 0;
 
} // end outer block

Khi các khối được lồng vào nhau, khối bao quanh thường được gọi là khối ngoài và khối được bao bọc được gọi là khối bên trong hoặc khối lồng nhau.

2. Sử dụng các khối để thực thi nhiều câu lệnh có điều kiện

Một trong những trường hợp sử dụng phổ biến nhất cho các khối là kết hợp với câu lệnh if. Theo mặc định, một câu lệnh if thực hiện một câu lệnh duy nhất nếu điều kiện đánh giá là true. Tuy nhiên, chúng ta có thể thay thế câu lệnh đơn này bằng một khối câu lệnh nếu chúng ta muốn nhiều câu lệnh thực thi khi điều kiện đánh giá là true.

Ví dụ:

#include <iostream>
 
int main()
{ // start of outer block
    std::cout << "Enter an integer: ";
    int value {};
    std::cin >> value;
    
    if (value >= 0)
    { // start of nested block
        std::cout << value << " is a positive integer (or zero)\n";
        std::cout << "Double this number is " << value * 2 << '\n';
    } // end of nested block
    else
    { // start of another nested block
        std::cout << value << " is a negative integer\n";
        std::cout << "The positive of this number is " << -value << '\n';
    } // end of another nested block
 
    return 0;
} // end of outer block

Nếu người dùng nhập số 3, chương trình này sẽ in:

Enter an integer: 3
3 is a positive integer (or zero)
Double this number is 6

Nếu người dùng nhập số -4, chương trình này sẽ in:

Enter an integer: -4
-4 is a negative integer
The positive of this number is 4

3. Các khối lệnh lồng nhau

Thậm chí có thể đặt các khối bên trong khối bên trong khối nào đó:

int main()
{ // nesting level 1
    std::cout << "Enter an integer: ";
    int value {};
    std::cin >> value;
    
    if (value >  0)
    { // nesting level 2
        if ((value % 2) == 0)
        { // nesting level 3
            std::cout << value << " is positive and even\n";
        }
        else
        { // also nesting level 3
            std::cout << value << " is positive and odd\n";
        }
    }
 
    return 0;
}

Mức độ lồng (còn được gọi là độ sâu lồng) của một hàm là số khối tối đa bạn có thể ở bên trong tại bất kỳ điểm nào trong hàm (bao gồm cả khối bên ngoài). Trong hàm trên, có 4 khối, nhưng cấp độ lồng là 3 vì bạn không bao giờ có thể ở bên trong nhiều hơn 3 khối tại bất kỳ điểm nào.

Bạn nên giữ mức lồng của mình ở mức 3 trở xuống. Cũng giống như các hàm quá dài là ứng cử viên tốt để tái cấu trúc lại code (chia thành các hàm nhỏ hơn), các hàm quá lồng nhau cũng là ứng cử viên tốt để tái cấu trúc (với các khối được lồng ghép nhiều nhất trở thành các hàm riêng biệt).

Bạn nên:

Giữ mức lồng ghép các hàm của bạn ở mức 3 hoặc ít hơn. Nếu hàm của bạn có nhu cầu nhiều hơn, hãy xem xét tái cấu trúc.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!