Cơ bản về Hàm và Giá trị trả về (Basic of functions and return values)

Khóa học lập trình C++ căn bản

5.0 (17 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 23:44 27-08-2020 197.587 lượt xem 6 bình luận
Tác giả/Dịch giả: Kteam
Học nhanh

Danh sách bài học

Cơ bản về Hàm và Giá trị trả về (Basic of functions and return values)

Dẫn nhập

Ở bài học trước, bạn đã nắm được tổng quan về ép kiểu dữ liệu và kỹ thuật ÉP KIỂU TƯỜNG MINH TRONG C++ (Explicit type conversion).

Hôm nay, mình sẽ giới thiệu cho các bạn về Cơ bản về Hàm và Giá trị trả về (Basics of Functions and Return values), một phần không thể thiếu trong hầu hết các ngôn ngữ lập trình.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài ta sẽ cùng tìm hiểu các vấn đề:

  • Tổng quan về hàm (functions overview)
  • Giá trị trả về (return values)
  • Giá trị trả về của kiểu void (return values of type void)

Tổng quan về hàm (functions overview)

Giả sử có một chương trình yêu cầu tính tuổi của người dùng với năm sinh được nhập từ bàn phím.

#include <iostream>
using namespace std;
int main()
{
	int year;
	cout << "Input your year of birth: ";
	cin >> year;

	int age = 2016 - year;
	cout << "Your ages: " << age << endl;

	return 0;
}

Outputs:

Cơ bản về Hàm và Giá trị trả về (Basics of Functions and Return values)

Chương trình bên trên dùng để tính tuổi của 1 người. Giả sử bây giờ bài toán cần được mở rộng thêm, yêu cầu tính tuổi của 3 người.

Vấn đề phát sinh từ đây, bạn phát hiện ra mình phải lặp lại những dòng code tương tự bên trên để tính tuổi cho 2 người tiếp theo. Dẫn đến tình trạng trùng lắp codemất nhiều thời gian xây dựng chương trình. Để khắc phục vấn đề đó, khái niệm Hàm (Function) trong lập trình được ra đời.

Hàm (function) là một dãy các câu lệnh có thể tái sử dụng, được thiết kế để thực hiện một công việc cụ thể trong chương trình.

Cú pháp của hàm trong C++:

<kiểu trả về> <tên hàm>([<danh sách tham số>])
{
    <các câu lệnh>
    [return <giá trị>;]
}

Trong đó:

  • <kiểu trả về>: kiểu bất kỳ của C++ (bool, char, int, double,…). Nếu không trả về thì là void.
  • <tên hàm>: theo quy tắc đặt tên định danh.
  • <danh sách tham số>: tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu phẩy “,”. (Có thể không có)
  • <giá trị>: trả về cho hàm qua lệnh return. (Có thể không có)

Ở bài CẤU TRÚC MỘT CHƯƠNG TRÌNH C++ (Structure of a program), bạn đã biết mỗi chương trình C++ đều có một hàm tên là main(), hàm này là nơi bắt đầu của chương trình. Trong thực tế, một chương trình thường sẽ có rất nhiều hàm bên trong.

Ví dụ về chương trình đơn giản có 2 hàm: main() và sayHello()

#include <iostream>
using namespace std;

// Definition of function sayHello()
void sayHello() // sayHello() is the called function in this example
{
	cout << "Hello Howkteam.com!" << endl;
}

// Definition of function main()
int main()
{
	cout << "Starting main()" << endl;

	// Interrupt main() by making a function call to sayHello().  main() is the caller.
	sayHello();

	cout << "Ending main()" << endl;

	return 0;
}

Outputs:

Cơ bản về Hàm và Giá trị trả về (Basics of Functions and Return values)

Chương trình sẽ thực thi các câu lệnh một cách tuần tự bên trong một hàm. Khi gặp một lời gọi hàm, CPU sẽ gián đoạn hàm hiện tại để thực thi các câu lệnh bên trong hàm được gọi. Khi hàm được gọi kết thúc, CPU sẽ lại tiếp tục thực thi hàm hiện tại.

Chú ý: Hàm có thể được gọi nhiều lần trong một chương trình (tính tái sử dụng), và bất kỳ hàm nào cũng đều có thể gọi hàm khác.

Hiện tại, bạn nên đặt hàm main()vị trí cuối cùng trong file code của chương trình. Lý do tại sao sẽ được đề cập cụ thể trong bài TIỀN KHAI BÁO & ĐỊNH NGHĨA HÀM (Forward declarations and Definitions of Functions).


Giá trị trả về (return values)

Ở bài CẤU TRÚC MỘT CHƯƠNG TRÌNH C++ (Structure of a program), bạn đã biết hàm main() có kiểu int nên bắt buộc phải có một câu lệnh return giá trị kiểu int. Khi chương trình thực thi kết thúc, hàm main() sẽ return một giá trị cho hệ điều hành, để thông báo là nó chạy thành công hay không.

Khi tạo ra một hàm mới, tùy vào mục đích của hàm mà bạn có thể quyết định hàm đó có trả về một giá trị nào đó hay không.

Để tạo ra một hàm có giá trị trả về, bạn cần:

  1. Thiết lập kiểu trả về trong định nghĩa của hàm
  2. Sử dụng câu lệnh return để trả về một giá trị.

Chú ý: Khi gặp câu lệnh return, hàm sẽ trả về giá trị ngay tại thời điểm đó. Tất cả câu lệnh trong hàm, sau dòng lệnh return sẽ được bỏ qua.

Ví dụ về chương trình có hàm trả về một số nguyên:

#include <iostream>
using namespace std;

// int means the function returns an integer value to the caller
int return69()
{
	// this function returns an integer, so a return statement is needed
	return 69; // we're going to return integer value 69 back to the caller of this function
}

int main()
{
	cout << return69() << endl; // prints 69

	int sum = return69() + 1;
	cout << sum << endl; // prints 70

	return69(); // okay: the value 69 is returned, but is discarded

	return 0;
}

Outputs:

Cơ bản về Hàm và Giá trị trả về (Basics of Functions and Return values)

Hàm có giá trị trả về có thể đặt riêng biệt, hoặc bên trong một biểu thức như ở ví dụ trên.

Một câu hỏi thường được hỏi là: "Hàm có thể trả về nhiều giá trị thông qua câu lệnh return?". Câu trả lời là không. Khi sử dụng câu lệnh returnhàm chỉ có thể trả về một giá trị duy nhất

Tuy nhiên, bạn có thể sử dụng phương pháp truyền tham chiếu hoặc truyền địa chỉ cho hàm để có thể lấy được nhiều giá trị:


Giá trị trả về của kiểu void (return values of type void)

Những hàm có mục đích tính toán thường sẽ return một giá trị khi kết thúc hàm. Đối với những hàm không có mục đích tính toán (Vd: hàm setter, hàm print, …), C++ hỗ trợ sử dụng kiểu dữ liệu void cho những hàm không có giá trị trả về.

#include <iostream>
using namespace std;

// void means the function does not return a value to the caller
void sayHello()
{
	cout << "Hello Howkteam.com!" << endl;
	cout << "Free Education" << endl;

	// This function does not return a value so no return statement is needed
}

int main()
{
	sayHello(); // okay: function sayHello() is called, no value is returned

	cout << sayHello(); // error: this line will not compile.  You'll need to comment it out to continue.

	return 0;
}

Outputs: “binary '<<': no operator found which takes a right-hand operand of type 'void' (or there is no acceptable conversion)”

Trong chương trình trên, hàm sayHello()kiểu void nên sẽ không trả về giá trị. Nên compiler sẽ thông báo lỗi không thể in giá trị của hàm sayHello() ra màn hình trong lần gọi hàm thứ 2.

Chú ý:

  • Hàm có kiểu void sẽ không có giá trị trả về.
  • Có thể sử dụng câu lệnh return trong hàm void để kết thúc hàm ngay lập tức.

Kết luận

Qua bài học này, bạn đã nắm được Cơ bản về Hàm và Giá trị trả về (Basics of Function and Return values) trong C++. Mình tóm tắt lại một số nội dung quan trọng các bạn cần nắm:

  • Hàm có thể được gọi nhiều lần trong một chương trình (tính tái sử dụng).
  • Khi gặp câu lệnh return, hàm sẽ trả về giá trị ngay tại thời điểm đó. Tất cả câu lệnh trong hàm, sau dòng lệnh return sẽ được bỏ qua.
  • Hàm có kiểu void sẽ không có giá trị trả về.

Ở bài tiếp theo, mình sẽ chia sẻ cho các bạn về kỹ thuật TRUYỀN GIÁ TRỊ TRONG C++ (Passing Arguments by Value in C++).

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Cơ bản về Hàm và Giá trị trả về (Basic of functions and return values) dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

Khóa học

Khóa học lập trình C++ căn bản

Hiện nay, C++ đã là cái tên rất quen thuộc trong ngành lập trình. Mặc dù C++ là ngôn ngữ lập trình đã ra đời khá lâu, nhưng không phải ai cũng có cơ hội để tìm hiểu về nó.

Vì vậy, Kteam đã xây dựng lên khóa học LẬP TRÌNH C++ CĂN BẢN để cung cấp một lượng kiến thức về ngôn ngữ C++ nói riêng, và các khái niệm khác trong lập trình nói chung.

Nội dung khóa học sẽ được phân tách một cách chi tiết, nhằm giúp các bạn dễ hiểu và thực hành được ngay. Serial dành cho những bạn chưa có bất kỳ kiến thức gì về lập trình, hoặc những bạn mất căn bản muốn lấy lại kiến thức nền tảng lập trình, cụ thể là C++.

Đánh giá

win1702 đã đánh giá 21:08 15-07-2024

Khanh19 đã đánh giá 13:40 29-01-2024

good

rarl123 đã đánh giá 22:47 03-07-2023

nguyentanhai đã đánh giá 16:35 23-06-2023

GojoSatoru đã đánh giá 21:22 22-06-2023

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
SnakeTZZO đã bình luận 22:15 07-04-2020

Bên trên anh có nói: "hàm main() sẽ return một giá trị cho hệ điều hành, để thông báo là nó chạy thành công hay không.", vậy tại sao lại return giá trị 0 mà không phải một giá trị khác ạ?, vài lần em thử return 1 đáp án vẫn ra đúng

 

Kter DDoS đã bình luận 11:13 10-07-2018

làm sao để đóng góp * cho kteam ạ

adquang199x đã bình luận 17:40 10-03-2018

mình là đối tượng học lại c++ và mình cảm thấy bạn(anh) dạy rất cơ bản và dễ hiểu.

xcotang đã bình luận 15:14 30-10-2017

Các bác cho em hỏi trong c++ có thủ tục ko? Liệu hàm void có phải là thủ tục??

nphats đã bình luận 14:52 29-05-2017

Rất tâm huyết và hữu ích, cảm ơn các bạn

Không có video.