C++ Mạnh Chỗ Nào Và Yếu Ở Đâu?

C++ Mạnh Chỗ Nào Và Yếu Ở Đâu?

C++ là một ngôn ngữ khá lâu đời (ra đời vào năm 1979), tuy nhiên nó đã từng là một ngôn ngữ khuôn mẫu cho những ngôn ngữ khác như Java và C#. Với cú pháp đơn giản, dễ hiểu, C++ đã từng là một ngôn ngữ rất phổ biến trong thập niên 90. Tuy nhiên cũng như bao ngôn ngữ khác, C++ cũng có những điểm mạnh và điểm yếu riêng. Cùng tìm hiểu trong bài viết dưới đây nhé.

Trong cộng đồng developer mọi người hay đùa với nhau rằng nếu bạn master C++ thì bạn có thể học mọi ngôn ngữ khác :D. Thực sự thì C++ là một ngôn ngữ khá khó chịu và rất khó để master nó. Việc nắm được điểm mạnh và điểm yếu của nó giúp bạn dễ dàng tiếp cận hơn. Mình đã từng viết Java trước khi chuyển qua C++ nên bài viết này chủ yếu dựa trên những kinh nghiệm cá nhân của bản thân mình, và đặc biệt bài viết này dành cho anh em newbie mới chập chững bước vào C++.

1. Điểm mạnh

C++ là một ngôn ngữ lập trình hướng đối tượng

Well, đây là một trong những lí do anh em có thể dùng C++ để học lập trình hướng đối tượng mặc dù tôi không khuyến khích cho lắm. Nhưng thật sự hướng đối tượng là một tính chất mà một ngôn ngữ lập trình hiện đại nên có và thật may mắn C++ cung cấp đầy đủ những tính chất của hướng đối tượng như tính đóng gói, tính đa hình, tính trừu tượng và tính kế thừa.

C++ cho phép bạn thoải mái quản lý vùng nhớ

Thật vậy, trong C++ chúng ta không có Garbage Collectors để dọn dẹp vùng nhớ như một số ngôn ngữ bậc cao khác. Một vùng nhớ có thể sử dụng lại nhiều lần, điều này giúp cải thiện hiệu suất chương trình C++. Vì thế những chương trình đòi hỏi chạy được trên một tài nguyên hạn chế thì đều ưu tiên viết bằng C++.

C++ là một ngôn ngữ low-level để dễ dàng gia tiếp với phần cứng

Một chương trình phần mềm dùng để giao tiếp với phần cứng hay một Embedded System đều được ưu tiên dùng C++. C++ có một hiệu suất cao cùng khả năng tiêu tốn ít tài nguyên phần cứng khiến chương trình chạy nhanh hơn. Cũng vì hiệu suất cao nên C++ cũng được dùng để phát triển game. Nói chung một chương trình đòi hỏi hiệu suất cao thì phần core lúc nào cũng sẽ được ưu tiên viết bằng C++.

2. Điểm yếu

Tràn vùng nhớ

Như đã đề cập ở trên C++ cho phép bạn tự quản lý vùng nhớ, giúp cho việc tái sử dụng vùng nhớ một cách hiệu quả nhưng nếu như anh em quản lý không tốt việc tràn vùng nhớ sẽ xảy ra. Ví dụ anh em cấp phát một vùng nhớ cho một pointer nhưng lại quên xóa vùng nhớ thì sao, cùng tôi demo nhé.

Code của tôi đang dùng hàm malloc() để cấp phát 1000000 ô nhớ có kiểu int, sizeof(int) là 4 bytes tương đương tôi đã cấp phát 4000000 bytes cho con trỏ ptr. Tôi dùng vòng lập for vô hạn với mỗi lần lặp tôi lại cấp phát 4000000 bytes vùng nhớ nữa. Điều này chắc chắn sẽ làm tràn RAM và chỉ có cách shutdown máy thôi :D

Vì thế C++ cung cấp cho bạn hàm free() và hàm delete để giải phóng vùng nhớ cho con trỏ khi không cần dùng tới nữa

OOP trong C++ khá phức tạp và khó hiểu

Thật vậy, trong C++ chúng ta không có khái niệm Interface. Chúng ta có thêm khái niệm hàm thuần ảo, hàm bạn, lớp bạn, hàm hủy(destructor), đa kế thừa,... Đối với cá nhân tôi thì OOP trong C++ khá phức tạp và khó hiểu. Trong C++ chúng ta phải khai báo phạm vi truy cập của class, phương thức, biến trong file header(file .h) và implement chúng trong file .cpp. Một số anh em nếu quen với OOP trong Java như tôi thì khi chuyển qua C++ sẽ khá bỡ ngỡ vì có một số khái niệm mới.

Con trỏ là một cái gì đó rất chi là... khó

Con trỏ là một biến mang địa chỉ của một vùng nhớ mà biến đó trỏ tới. Những anh em ban đầu tiếp cận với C++ thì khi học tới con trỏ rất dễ nản vì với những ngôn ngữ bậc cao khác chúng đã lược bỏ khái niệm này để làm ngôn ngữ thân thiện và dễ hiểu hơn. Nhưng cái gì cũng có cái lý do của nó, con trỏ sinh ra để giúp cho việc thao tác trực tiếp với vùng nhớ, tăng tốc độ thực thi của chương trình với tốc độ bàn thờ :D nên khó học thì cũng đi đôi với lợi ích đó

Tạm kết

Ngày nay có vẻ mọi người thường bắt đầu với một ngôn ngữ dễ học dễ hiểu, nhiều thư viện như Python, Java hay C# hơn là bắt đầu với C++. Những điểm mạnh và điểm yếu trong bài viết này chắc chắn còn thiếu sót, nó chỉ là một phần để giúp anh em nào muốn dấn thân vào con đường trở thành C++ developer hiểu rõ hơn về ngôn ngữ thú vị này. Cảm ơn anh em đã theo dõi bài viết. Thanks ~