Hỏi về return trong hàm

Các anh chị có thể giải thích giúp em return trả về giá trị của hàm là sao không ạ? Em vẫn không hiểu được. Em cám ơn ạ

  • Ví dụ hàm trong toán học f(x) = 2 * x.
    Nếu x bằng 2 thì f(x) trả về 4.
  • Trong C, f(x) được viết là:

    double f(double x) 
    {
        return 2 * x;
    }

  • Trong hàm main bạn gọi f(x) như này:
    double y = f(2);
    thì y có giá trị 4.
3 Likes

Mình thấy anh @ltd có ghi

  void setname(string name){
        name=asd}
  string getname(){
        return name;}

tức là sao bạn?

Bạn đi mua bánh mì, đưa tiệm bánh mì 10k, người ta đưa bạn ổ bánh mì.
Thì ổ bánh mì là giá trị trả về của hàm tiệm bánh mì… Và 10k là argument (tham số) của hàm.
Từ đó có thể xây dựng lại thành

int muabanhmi(int vnd) {
 int sobanhmi = vnd/10000; // 10k 1 ổ
 return sobanhmi;
}

int sobanhmidangco = muabanhmi(10000);
-> bây giờ bạn có 1 ổ bánh mì và nó được lưu trong biến sobanhmidangco

Hoặc bạn nhờ thằng bạn tính giùm phép cộng. Bạn đưa nó 2 số a và b. Nó trả lại kết quả a + b cho bạn.
Thì a+b là giá trị trả về của hàm nhờ_thằng_bạn_làm_phép_cộng với 2 tham số là a và b.

Hàm ko cần tham số cũng có giá trị trả về. Như hàm int main(). Nó return 0 để báo biết rằng ko có lỗi.
Hoặc gần gũi với ngoài đời hơn là bạn gọi thằng bạn, nó chào lại mình.
Thì lời chào lại là kết quả trả về của hàm hello_thằng_bạn. Bạn chỉ cần gọi nó là nó trả về giá trị, ko cần nhờ nó làm gì cả.
ví dụ

string hello_thang_ban() {
  return "hello huy";
}

string a = hello_thang_ban(); //gọi thằng bạn và nó trả về lại chuỗi "hello huy"

Mình giải thích có lẽ hơi khó hiểu, nên… ko hiểu chỗ nào cứ hỏi nha

6 Likes

edit: 2 hàm này gọi là accessor, sử dụng trong Class thôi. mới học bạn không nên quan tâm làm gì.

1 Like

Cám ơn bạn. Bạn giải thích thì mình hiểu nhưng vẫn còn hơi mơ hồ lắm

Mơ hồ chỗ nào thì show ra cho mọi người giải đáp để hết mơ hồ :stuck_out_tongue:

5 Likes

Hiểu rồi bạn. Cám ơn bạn nhiều nhé <3

Vậy bạn cho mình hỏi một cái nữa nhe. Anh @ltd có ghi

class Lophoclaptrinh{
   public:
       void setname(string tengi){
          name = tengi;
          }
       string getname(){
             return name;
          }
  private:
       string name;
 };

Như vậy thì return đó là return gì vậy bạn? Mình cảm ơn nhiều nhe ^^

ủa vậy bạn cho mình hỏi nếu viết ntn thì return về gì nhe

class xinchao{
     public: 
        void setname(string hello){
             chaocacban=hello;
        }
        string getname(){
             return chaocacban;
    private:
             string chaocacban;
};

Cái hàm getname return về name.
tức tên của học sinh.

2 Likes

Cho em hỏi: sao em thấy trong C nhiều người dùng int abc () { return 0;} mà lại không dùng void ạ?

anh nghĩ là cho “đúng”, vì chương trình cần trả về một giá trị nào đó thể hiện trạng thái của chương trình. Ví dụ như chạy ổn không lỗi thì return 0,…

2 Likes

vậy cái giá trị trả về đó là dùng để làm gì vậy bác, nó có để hiển thị, hay để làm điều gì không??

Làm gì thì tùy bạn thôi :stuck_out_tongue:
Hiển thị cũng đc, lấy cái đó tính toán tiếp cũng được.
Thường dùng hàm để tách phần tính toán, xử lý phức tạp ra cho dễ sử dụng lại, dễ debug.
Lấy ví dụ, mình có hàm today là về ngày của hôm nay.
Vậy mình có thể

  1. In ra màn hình để biết hnay ngày nào
Date t = today();
print t
  1. Còn ko mình xem là mình đã già bao nhiêu ngày rồi
Date birthday = 29/2/1996
Date t = today()
print 'Bạn đã già ' + (t - birthday) + ' ngày tuổi'
3 Likes

cảm ơn bác, chỗ đấy thì hiểu rồi, cơ mà viết code í, return 0; hay return 1; hay return cái gì gì đấy, thì mục đích của câu lệnh đấy là làm gì? (lỡ có hỏi ngu thì mấy bác cũng giải thích hộ cho em với, em cảm ơn nhiều lắm ạ <3)

À ý bạn là hàm main?
Thực chất nó báo là chương trình chạy bị lỗi thôi.
Nếu bạn xài linux, một số terminal hiển thị error code trả về khi chạy xong chương trình. Lúc đó bạn biết là à, chương trình tui bị gì mà chạy nó trả về mã lỗi này. :3 Rồi tim cách khắc phục. Nếu nó return 0 thì ko có gì, tung tăng thôi.

Một số hàm cũng học tập theo. Mượn ý tưởng đó return error code để biết hàm chạy bị lỗi gì lỗi gì chẳng hạn.
Lấy ví dụ là kiểm tra thông tin đăng ký

int validateRegisterInformation() {
 if (validatePassword == false) return 1;
 if (validateUsername == false) return 2;
 return 0;
}

int errorCode = validateRegisterInformation();
if (errorCode == 0) // ayy, không có lỗi
if (errorCode == 1) print("Bồ ơi password yêu cầu 8-32 ký tự nha");
if (errorCode == 2) print("Bồ ơi username nhập tào lao rồi nha");

3 Likes

À, đã hiểu rồi, đa tạ bác nhiều lắm. Mà có thể thì có thể cho em xin thông tin gì đó để có gì em hỏi được không ạ

Bạn cứ reply ở đây hoặc tham gia discord của DNH sẽ được mọi người giúp đỡ.
https://discord.gg/ap2uWr2

4 Likes

Em cảm ơn ạ!!!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?