[Khóa học C++] Bài 6 - A first look at functions and return values

Share:
Các bài học trước, bạn đã biết rằng, trong chương trình C++, bạn chắc chắn phải có một function là main(). Trong thực tế, một chương trình C++ được viết ra, chúng ta sẽ có rất nhiều function, mỗi function sẽ thực hiện một chức năng nào đó.
Vì sao bạn phải dùng function? Một lý do đơn giản, ví dụ bạn có một đoạn code thực hiện chức năng đếm số ký tự trong một file text, và mỗi khi bạn thực hiện chức năng này, bạn sẽ phải viết đoạn code này ra, vậy trong chương trình giả sử bạn cần sử dụng chức năng này 100 lần, bạn sẽ viết 100 lần đoạn code này?

Điều đó đúng nếu mục đích cho bạn chỉ là cho chương trình chạy đúng. Nhưng ở đây, bạn là một lập trình viên chuyên nghiệp, bạn sẽ sử dụng một function để làm chức năng trên, và mỗi lần bạn cần thực hiện chức năng này, bạn chỉ cần gọi function ra. Việc sử dụng function giúp chương trình bạn dễ hiểu hơn, dễ update và bảo trì hơn.



Chúng ta cùng xem ví dụ về cách khai báo và sử dụng function trong C++:


Chương trình sẽ in ra:
Starting main()
In doPrint()
Ending main()

Khi một chương trình C++ chạy, chương trình sẽ chạy ngay tại dòng đầu tiên của hàm main. Cho nên dòng số 13 chạy trước và in ra màn hình Starting main().  Tiếp theo dòng 14, chương trình sẽ gọi hàm doPrint(), ngay tại đây, hàm main sẽ bị ngắt (interrupt) và chương trình sẽ thực hiện những gì có trong hàm doPrint(). Và khi thực hiện hàm này, In doPrint() sẽ được in ra màn hình. Sau khi thực hiện xong hàm doPrint(), chương trình sẽ quay lại hàm main ngay tại vị trí ngắt hồi nảy và tiếp tục thực hiện dòng 15 để in ra dòng Ending main().


Chú ý khi gọi hàm, bạn sẽ sử dụng tên hàm và dấu ngoặc đơn. Bạn sẽ tìm hiểu sâu hơn về function trong các bài học sau.

Return values

Khi hàm main chạy xong, nó sẽ trả về một giá trị integer (thường là 0) bằng cách sử dụng lênh return

Khi bạn viết một function, bạn có quyền quyết định rằng function của bạn có return một giá trị hay là không. Chúng ta cùng xem ví dụ:

Bạn hãy nhìn hàm return5(), dòng số 2 nói rằng hàm này sẽ trả về một kiểu integer, và ngay dòng số 5, hàm này trả về đúng một số integer là 5.
Vậy mỗi khi chương trình chính (main) gọi và thực thi hàm này, giá trị 5 sẽ được trả về, điều đó giải thích cho kết quả in ra cho chương trình này là:
5
7

Return values of type void


Bạn nhớ lại hàm doPrint() hồi nảy, hàm này không return một giá trị gì cả, vì vậy, trong C++, một hàm không nhất thiết phải return giá trị.

Trong hàm doPrint này, bạn sẽ dùng void là kiểu trả về cho hàm, để nói lên rằng hàm này không trả về một giá trị nào cả.

Returning to main


Bạn có thắc mắc là tại sao hàm main lại return một giá trị integer không? Giá trị này chúng ta có thiểu hiểu là một trạng thái (status code), giá trị này sẽ nói với hệ điều hành rằng, chương trình này thực thi thành công hay không. Thông thường, khi hàm main trả về giá trị 0, hệ điều hành sẽ hiểu chương trình này thực thi thành công, và khi hàm main trả về một số dương nghĩa là không thành công.

Nếu bạn không cung cấp một giá trị integer để trả về cho hàm main, các compiler sẽ return 0 thay cho bạn.


A few additional notes about return values


Thứ nhất, nếu một function có kiểu trả về không phải là kiểu void, bạn bắt buộc phải dùng lệnh return để trả về một giá trị cho hàm.

Thứ 2, trong một hàm, khi chương trình gặp lệnh return, thì hàm này sẽ kết thúc ngay lập tức, và những lệnh đằng sau nó sẽ được compiler bỏ qua.


Thứ 3, một function chỉ có thể return một giá trị duy nhất, nó có thể là một biến, một kết quả của một biểu thức, vv.

Thứ 4, bạn có tùy ý thiết kết hàm với bất kì kiểu trả về, miễn là hợp lý.

Thứ 5, bạn có thể gọi một hàm nhiều lần trong hàm main.

Nested functions


Bạn không thể định nghĩa một hàm trong một hàm khác (điều này gọi là nesting) trong C++. Điều này là hoàn toàn không được phép:

Bạn có thể sửa chương trình trên thành như sau:


Kết thúc!



Không có nhận xét nào