Bây giờ cafedev sẽ đã đề cập đến các hàm là gì và một số chức năng cơ bản của chúng, hãy cùng xem xét kỹ hơn tại sao chúng lại hữu ích.
Nội dung chính
1. Tại sao phải sử dụng các hàm?
Các lập trình viên mới thường hỏi, “Chúng ta không thể chỉ đặt tất cả code bên trong hàm main sao?” Đối với các chương trình đơn giản, bạn hoàn toàn có thể. Tuy nhiên, các hàm cung cấp một số lợi ích khiến chúng trở nên cực kỳ hữu ích trong các chương trình có độ dài hoặc độ phức tạp không nhỏ.
- Tổ chức – Khi các chương trình ngày càng phức tạp, việc viết tất cả code nằm bên trong hàm main() ngày càng trở nên phức tạp. Một hàm gần giống như một chương trình nhỏ mà chúng ta có thể viết tách biệt khỏi chương trình chính mà không cần phải suy nghĩ về phần còn lại của chương trình trong khi chúng ta viết nó. Điều này cho phép chúng ta chia chương trình thành các phần nhỏ hơn, dễ quản lý hơn, điều này làm giảm độ phức tạp tổng thể của chương trình.
- Khả năng tái sử dụng – Khi một hàm được viết, nó có thể được gọi nhiều lần từ bên trong chương trình. Điều này tránh trùng lặp code (“Không lặp lại chính những code đã viết”) và giảm thiểu xác suất lỗi sao chép / dán. Các hàm cũng có thể được chia sẻ với các chương trình khác, giảm số lượng code phải viết từ đầu (và kiểm tra lại) mỗi lần.
- Kiểm tra – Vì các hàm làm giảm sự dư thừa code, nên ngay từ đầu sẽ có ít code hơn để kiểm tra. Ngoài ra, vì các hàm là độc lập, sau khi chúng ta đã kiểm tra một hàm để đảm bảo nó hoạt động, chúng ta không cần phải kiểm tra lại nó trừ khi chúng ta thay đổi nó. Điều này làm giảm số lượng code chúng ta phải kiểm tra cùng một lúc, giúp dễ dàng tìm thấy lỗi (hoặc tránh chúng ngay từ đầu).
- Khả năng mở rộng – Khi chúng ta cần mở rộng chương trình của mình để xử lý một trường hợp mà nó không xử lý trước đây, các hàm cho phép chúng ta thực hiện thay đổi ở một nơi và thay đổi đó có hiệu lực mỗi khi hàm được gọi.
- Tính trừu tượng – Để sử dụng một hàm, bạn chỉ cần biết tên, đầu vào, đầu ra và vị trí của nó. Bạn không cần biết nó hoạt động như thế nào hoặc code nào khác mà nó phụ thuộc vào để sử dụng nó. Điều này làm giảm lượng kiến thức(không cần tìm hiểu kỹ về hàm đó) cần thiết để sử dụng code của người khác (bao gồm mọi thứ trong thư viện chuẩn).
Mặc dù trông không giống như vậy, nhưng mỗi khi bạn sử dụng toán tử << hoặc toán tử >> để thực hiện nhập hoặc xuất, bạn đang sử dụng một hàm do thư viện chuẩn cung cấp đáp ứng tất cả các tiêu chí trên.
2. Sử dụng hàm một cách hiệu quả
Một trong những thách thức lớn nhất mà các lập trình viên mới gặp phải (bên cạnh việc học ngôn ngữ) là hiểu khi nào và cách sử dụng các hàm một cách hiệu quả. Dưới đây là một số hướng dẫn cơ bản để viết hàm:
Các câu lệnh xuất hiện nhiều lần trong một chương trình thường phải được tạo thành một hàm. Ví dụ: nếu chúng ta đọc đầu vào từ người dùng nhiều lần theo cùng một cách, thì đó là một ứng cử viên tuyệt vời để viết hàm nhập. Nếu chúng ta xuất một thứ gì đó theo cùng một cách nhiều lần, thì đó cũng là một ứng cử viên sáng giá cho một hàm.
Code có một tập hợp đầu vào và đầu ra được xác định rõ ràng là một ứng cử viên tốt cho một hàm, đặc biệt nếu nó phức tạp. Ví dụ: nếu chúng ta có một danh sách các mục mà chúng ta muốn sắp xếp, thì code để thực hiện việc sắp xếp sẽ tạo nên một hàm tuyệt vời, ngay cả khi nó chỉ được thực hiện một lần. Đầu vào là danh sách chưa được sắp xếp và đầu ra là danh sách đã sắp xếp.
Một hàm thường phải thực hiện một (và chỉ một) công việc nào đó.
Khi một hàm trở nên quá dài, quá phức tạp hoặc khó hiểu, nó có thể được chia thành nhiều hàm con. Đây được gọi là tái cấu trúc.
Thông thường, khi học C ++, bạn sẽ viết rất nhiều chương trình liên quan đến 3 nhiệm vụ con:
- Đọc đầu vào từ người dùng
- Tính toán giá trị từ các đầu vào
- In giá trị được tính toán
Đối với các chương trình tầm thường (ví dụ: ít hơn 20 dòng code), một số hoặc tất cả những điều này có thể được thực hiện trong hàm main. Tuy nhiên, đối với các chương trình dài hơn (hoặc chỉ dành cho thực hành), mỗi chương trình này là một ứng cử viên tốt cho một chức năng riêng lẻ.
Các lập trình viên mới thường kết hợp tính toán một giá trị và in giá trị đã tính toán vào một hàm duy nhất. Tuy nhiên, điều này vi phạm quy tắc ngón tay cái “một nhiệm vụ” cho một hàm. Một hàm tính toán giá trị phải trả về giá trị cho người gọi và để người gọi quyết định phải làm gì với giá trị được tính (chẳng hạn như gọi một hàm để in giá trị).
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:
- Full series tự học C++ từ cơ bản tới nâng cao tại đây nha.
- Ebook về C++ tại đây.
- Các series tự học lập trình MIỄN PHÍ khác
- Nơi liên hệ hợp tác hoặc quảng cáo cùng Cafedevn tại đây.
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!