Tham số và đối số

Khái niệm

Tham số là tên xuất hiện trong phần định nghĩa hàm để nhận dữ liệu. Đối số là giá trị thực tế được truyền vào khi gọi hàm. Việc phân biệt hai khái niệm này giúp đọc và thiết kế hàm rõ ràng hơn.

Ví dụ tính diện tích hình chữ nhật

def rectangle_area(width, height):
    return width * height


print(rectangle_area(4, 6))
program FunctionParameters;

function RectangleArea(width, height: Integer): Integer;
begin
  RectangleArea := width * height;
end;

begin
  Writeln(RectangleArea(4, 6));
end.
#include <stdio.h>

int rectangle_area(int width, int height) {
    return width * height;
}

int main(void) {
    printf("%d\n", rectangle_area(4, 6));
    return 0;
}
#include <iostream>
using namespace std;

int rectangle_area(int width, int height) {
    return width * height;
}

int main() {
    cout << rectangle_area(4, 6) << endl;
    return 0;
}
static int RectangleArea(int width, int height) {
    return width * height;
}

Console.WriteLine(RectangleArea(4, 6));
function rectangleArea(width, height) {
    return width * height;
}

console.log(rectangleArea(4, 6));
function rectangleArea(width: number, height: number): number {
    return width * height;
}

console.log(rectangleArea(4, 6));
package main

import "fmt"

func rectangleArea(width, height int) int {
    return width * height
}

func main() {
    fmt.Println(rectangleArea(4, 6))
}
fn rectangle_area(width: i32, height: i32) -> i32 {
    width * height
}

fn main() {
    println!("{}", rectangle_area(4, 6));
}

Nguyên tắc thiết kế

  • Chỉ truyền những dữ liệu thực sự cần thiết.
  • Giữ thứ tự tham số ổn định và hợp lý.
  • Ưu tiên tên tham số phản ánh đúng ý nghĩa dữ liệu.

Ghi chú theo ngôn ngữ

Thông tin</div>

Python hỗ trợ truyền đối số theo vị trí hoặc theo tên ở mức nâng cao. Trong các ví dụ cơ bản, nên bắt đầu bằng truyền theo vị trí.

Pascal có thể gom nhiều tham số cùng kiểu trong một nhóm như width, height: Integer. Cách viết này làm phần khai báo ngắn hơn.

Ngoài ra, Pascal còn có thể dùng từ khóa var trước tham số để cho phép hàm hoặc thủ tục thay đổi trực tiếp biến được truyền vào.

C truyền dữ liệu cơ bản theo giá trị. Muốn thay đổi trực tiếp dữ liệu ở bên ngoài hàm, thường phải dùng con trỏ ở các bài nâng cao.

C++ bổ sung tham chiếu (&) giúp truyền tham số trực tiếp mà không cần sấ chép. Đây là cách phổ biến để sửa giá trị từ bên trong hàm.

C# dùng refout để truyền tham số theo tham chiếu. Từ khóa out yêu cầu hàm phải gán giá trị cho tham số trước khi kết thúc.

JavaScript truyền hẳng nguyên thủy (số, chuỗi, boolean) theo giá trị. Đối tượng và mảng được truyền theo tham chiếu đến đối tượng, nhưng không thể gán lại biến ngoài từ bên trong hàm.

TypeScript kế thừa cơ chế truyền tham số của JavaScript. Kiểu tường minh giúp tránh gọi hàm với kiểu đối số không hợp lệ.

Go truyền tham số theo giá trị mặc định. Để thay đổi biến bên ngoài, cần truyền con trỏ (*int, *string, v.v.) tương tự C.

Rust phân biệt rõ giữa mượn không thay đổi (&T) và mượn có thể thay đổi (&mut T). Đây là phần quan trọng của hệ thống quyền sở hữu của Rust.

Bình luận