01/10/2018, 09:24

Khái niệm "tham biến", "tham số", "tham chiếu", "tham trị" là gì

Anh chị cho em hỏi “tham biến,tham số,tham chiếu,tham trị” trong C# là gì e hình dung không ra.

Hoàng Trung viết 11:39 ngày 01/10/2018

Ngày xưa mình hình dung thế này, không biết có giúp bạn dễ hiểu hơn không :p. Tham biến là khi truyền nó vào hàm, nó tạo ra một biến khác rồi gán giá trị truyền vào cho biến đó, sau khi kết thúc hàm thì biến mình truyền dữ liệu vào chả thay đổi gì cả. Tham chiếu là khi mình truyền một biến vào thì nó dùng biến đó để tính toán các kiểu trong hàm luôn, khi ra khỏi hàm thì biến được truyền vào đó bị thay đổi giá trị (do mình xài nó để tính toán trong hàm luôn mà :p)

Tynk Huynk viết 11:31 ngày 01/10/2018

Khi học lập trình hạn chế dịch ra tiếng Việt, gây bối rối lúc khi học.

Mình xin giải thích 1 số khái niệm dựa trên kiến thức Java
Tham số (parameter): là biến được khai báo trong signature phương thức. VD:

public void  say(String message){
     System.out.println(message); // in message ra màn hình
}

Ở đây: message là tham số

Tham trị (Agrument): là giá trị khi truyền vào tham số của phương thức khi được gọi. VD:

String message = "Hello";
say(message);

Hoặc

say("Hello");

message và “Hello” là tham trị

Tham biến và Tham chiếuthì có lẽ thiên về C và C++ nên mình tạm dừng ở đây, mong các cao nhân khác giúp đỡ

Trần Hoàn viết 11:25 ngày 01/10/2018

một phương thức có tham số sẽ có cấu trúc tối thiểu giống như một hàm số f(x) mà bạn học hồi cấp 3:

<Kiểu dữ liệu T> <Tên phương thức N>(<Tham số thứ nhất P1>, <Tham số thứ 2 P2>....)//trong toán THPT thì kiểu dữ liệu lúc nào cũng hiểu ngầm định là số thực hoặc số phức nên không giải thích :))
{
    ...code...
    return (<Kiểu dữ liệu T>)<Kết quả trả về>;//Nếu kết quả đã thuộc kiểu dữ liệu T rồi thì không cần ép kiểu
}

ví dụ, phương thức luỹ thừa Pow(x,y) của class System.Math được khai báo như sau:

double Pow(double x, double y)
{
    ...double KetQua = x ^ y;...
    return KetQua;
}

Và khi đó, ta có thể dùng phương thức này kiểu như

double a;
a = System.Math.Pow(2, 5);

Trong trường hợp sử dụng phương thức có tham số, các tham số có thể là “tham chiếu địa chỉ”/“tham chiếu biến” (tham biến) hoặc “tham chiếu giá trị” (tham trị).

Khi sử dụng tham số dưới dạng tham trị, bản thân biến không được truyền vào phương thức mà chỉ có giá trị của biến đó được sử dụng làm tham số của phương thức (ví dụ phương thức Pow mình vừa nói ở trên). Một ví dụ khác thể hiện rõ đặc tính của tham trị:

void swap(int A, int B)
{
    var TrungGian = A;
    A = B;
    B = TrungGian;
}

Nếu X == 5Y == 7 thì sau khi swap(X, Y); ta vẫn có X == 5Y == 7 vì phương thức swap viết như thế kia thì AB chỉ là các biến tạm, có giá trị đầu vào của XY, ta chỉ đổi giá trị của các biến cục bộ, chạy phương thức xong thì các biến cục bộ bị xoá, XY hoàn toàn không bị ảnh hưởng.

Muốn đổi giá trị của XY thì tham số của phương thức phải là tham biến (ví dụ dùng từ khoá ref-referrence):

void swap(int ref A, int ref B)
{
    var TrungGian = A;
    A = B;
    B = TrungGian;
}

Như vậy khi gọi phương thức swap(ref X, ref Y); thì XY sẽ được sử dụng làm tham số phương thức và phương thức này sẽ thực sự đổi giá trị của XY

Tổng kết lại:
“Tham số” là dữ liệu đầu vào của phương thức.
“Tham chiếu” là cách để phương thức lấy dữ liệu.
“Tham trị” là cách tham chiếu để sử dụng khi không có nhu cầu thay đổi giá trị của biến đầu vào.
“Tham biến” là cách tham chiếu để sử dụng khi có nhu cầu thay đổi giá trị của biến đầu vào.

Văn Dương viết 11:24 ngày 01/10/2018

Nó liên quan đến việc truyền giá trị của một biến bên ngoài hàm vào trong hàm(function)/ phương thức (method) để xử lý.
để truyền được vào hàm thì phải khai báo các kiểu dữ liệu và tên biến đầu vào. Và các biến ầu vào đó gọi là Tham số

Khi truyền tham số cho hàm có 2 kiểu:

  1. Truyền trực tiếp giá trị của biến vào hàm. Trước khi sử dung, dữ liệu đó được copy ra một bản sao và mọi tác động đều không thể ảnh hưởng tới dữ liệu gốc. Kiểu truyền đó là Truyền tham trị và biến khi truyền vào hàm gọi là Tham trị.
void Func(int input); // khai báo để truyền tham trị
int a =0;
Func(a)// Truyền tham trị. a là tham trị

2.Truyền bí danh (alias - nickname ). Kiểu truyền này không có copy cái gì cả mà chơi thẳng với dữ liệu của biến gốc-> có thể thay đổi dữ liệu gốc.
Tham số khi khai báo hàm lúc này gọi là Tham biến , giá trị truyền vào hàm lúc này là Tham chiếu

void Func(int *intput); // khai báo tham số vào là *input gọi là tham biến, chú ý có thêm dấu *)
int a=0;
void Func(&a); // biến truyền vào lúc này gọi là &a là một tham chiếu- bí danh/nickname của a :smile:

Chém gió một hồi chắc là sai

Tâm Ninja viết 11:33 ngày 01/10/2018

Hi Nhox Namby!
Cảm ơn bạn vì đã đóng góp cho DayNhauHoc.
Mình đã sửa lại bài viết của bạn vì nó vi phạm nội duy khi tạo topic mới.
Bạn hãy đọc lại quy định của diễn đàn để các lần tạo topic tiếp theo chất lượng hơn nhé:
https://daynhauhoc.com/faq

Nơi để nhận giải đáp cho mọi câu hỏi, nơi để chia sẻ kiến thức, nơi để đọc, để suy ngẫm và để vui
Hãy cùng nhau xây dựng diễn đàn thành một diễn đàn thảo luận chất lượng nhé
Thanks,

Nhox Namby viết 11:27 ngày 01/10/2018

cảm ơn bạn nhiều nhé…

Nhox Namby viết 11:27 ngày 01/10/2018

cản ơn bạn nhiều nhé,mình hiểu rồi

Nhox Namby viết 11:37 ngày 01/10/2018

hj,cản ơn bạn nhiều nhé,mình hiểu rồi

Quan viết 11:34 ngày 01/10/2018

Thực ra dùng tham chiếu lại chính là truyền “giá trị” của con trỏ, nhưng chẳng qua giá trị của con trỏ đó lại là địa chỉ ô nhớ.

Khi dùng hàm ta gọi void Func(&a); chính &a lại chính là giá trị địa chỉ ô nhớ (mà có thể con trỏ khác trỏ tới, nó chính lá giá trị của con trỏ).

Bài liên quan
0