✨Tham số (lập trình máy tính)

Tham số (lập trình máy tính)

Trong lập trình, tham số là biến được thu nhận bởi một chương trình con. Tại thời gian chạy, chương trình con sử dụng các giá trị được gán cho các tham số để thay đổi cách ứng xử của mình. Hầu hết các ngôn ngữ lập trình có thể định nghĩa các chương trình con không có tham số hoặc chấp nhận một vài tham số.

Tham số hình thức và tham số thực sự:

Tham số hình thức là biến được liệt kê trong danh sách tham số (thường nằm tại phần đầu của định nghĩa chương trình con). Còn tham số thực sự là giá trị cụ thể của biến đó tại thời gian chạy.

Để phân biệt rõ hai khái niệm trên, xét ví dụ dưới đây (viết bằng C):

 int sum(int addend_1, int addend_2)
 {
    return (addend_1 + addend_2);
 }
Hàm sum nhận hai _tham số hình thức_: addend_1addend_2. Nó lấy tổng của các giá trị được truyền vào các tham số này và trả về kết quả cho nơi gọi hàm (bằng cách sử dụng một kỹ thuật được cung cấp tự động bởi trình biên dịch C). Mã gọi hàm sum có thể trông như dưới đây:
 int sumValue;
 int value_1 = 40;
 int value_2 = 2;

sumValue = sum(value1, value2);;

Các biến value_1value_2 được khởi tạo với các giá trị 40 và 2. Các biến này không phải tham số hình thức hay tham số thực sự. Tại thời gian chạy, giá trị đã được gán cho các biến này được truyền vào cho hàm sum. Trong hàm sum, các tham số hình thức addend_1addend_2 được tính giá trị và lần lượt cho kết quả là hai tham số thực sự 402. Giá trị của các tham số thực sự được cộng lại, kết quả được trả về cho nơi gọi hàm - nơi nó được gán cho biến sumValue.

Tham số hình thức thường được gọi tắt là tham số. Tham số thực sự còn được gọi là tham số thực, tham đối hoặc đối số.

Truyền tham số

Cơ chế chính xác cho việc gán đối số cho một tham số, được gọi là cơ chế truyền tham số, phụ thuộc vào chiến lược đánh giá được sử dụng cho tham số đó (thông thường là truyền giá trị (call-by-value)). Lập trình viên có thể dùng các từ khóa để đánh dấu chiến lược được lựa chọn cho từng tham số.

Truyền bằng giá trị

Trong cơ chế truyền tham số bằng giá trị (gọi tắt là truyền trị), khi chương trình con được chạy, một bản sao của tham số thực sự được gán cho tham số hình thức (sao chép giá trị). Nghĩa là mọi sửa đổi của chương trình con đối với tham số hình thức không gây ảnh hưởng tới biến được truyền vào chương trình con theo kiểu truyền tham trị.

Các tham số được truyền bằng giá trị được gọi là tham trị. Do chỉ có giá trị được truyền vào chương trình con, tham số thực sự không nhất thiết phải là một biến thông thường mà có thể là hằng giá trị, hằng biến, biểu thức trả về giá trị,...

Truyền bằng biến

Trong cơ chế truyền tham số bằng biến (gọi tắt là truyền biến), khi chương trình con được chạy, tham số hình thức trở thành một tham chiếu tham số thực sự. Nghĩa là mọi sửa đổi của chương trình con đối với tham số hình thức sẽ có tác dụng với tham số thực sự. Đây được gọi là hiệu ứng phụ của chương trình con.

Các tham số được truyền bằng biến được gọi là tham biến. Ngược lại với cơ chế truyền bằng giá trị, cơ chế truyền bằng biến đòi hỏi tham số thực sự phải là một biến.

Các đối số mặc định

Một số ngôn ngữ lập trình cho phép một đối số mặc định (default argument) được cho trước một cách tường mình hay ngầm định trong phần khai báo của một chương trình con. Điều này cho phép nơi gọi bỏ qua đối số này khi gọi chương trình con đó. Nếu đối số mặc định được cho một cách tường mình, thì giá trị đó được sử dụng mỗi khi nó không được cung cấp bởi nơi gọi. Nếu đối số mặc định là ngầm định (mà đôi khi được khai báo bởi từ khóa như là "Optional" (không bắt buộc)) thì ngôn ngữ sẽ cung ứng một giá trị "ban đầu" thông dụng (như là null, tập rỗng, giá trị 0, xâu ký tự rỗng,...) nếu giá trị (của tham số) không được nơi gọi cung cấp.

Chiều dài biến đổi được của danh sách tham số

Một số ngôn ngữ cho phép các chương trình con được định nghĩa với số các đối số thay đổi được. Đối với các ngôn ngữ như vậy, các chương trình con phải duyệt qua danh mục của các đối số

Các tham số danh định

Một số ngôn ngữ lập trình cho phép các chương trình con có các tham số danh định (named parameter). Điều này cho phép mã nơi gọi chương trình con có tính tự mô tả (self-documenting) cao hơn. Nó cũng cung cấp cho nơi gọi khả năng uyển chuyển cao hơn, thường cho phép thay đổi thứ tự của các đối số hay bỏ qua một số đối số nếu cần thiết.

👁️ 1 | 🔗 | 💖 | ✨ | 🌍 | ⌚
Trong lập trình, **tham số** là biến được thu nhận bởi một chương trình con. Tại thời gian chạy, chương trình con sử dụng các giá trị được gán cho các tham số để thay
nhỏ| Chương trình máy tính "Xin chào, thế giới" của [[Brian Kernighan (1978) ]] **Chương trình máy tính** là tập hợp các câu lệnh thực hiện một tác vụ cụ thể khi được máy tính
Trong lập trình hướng đối tượng, **lớp** (**class**) là một chương trình-mã-khuôn mẫu có thể mở rộng được để tạo các đối tượng, cung cấp giá trị khởi tạo cho trạng thái (biến thành viên)
Trong lập trình hướng đối tượng, **hàm hủy** (tiếng Anh: _destructor_, viết tắt: _dtor_) là một phương thức được gọi tự động để hủy bỏ một đối tượng. Điều này xảy ra khi thời gian
phải|nhỏ|402x402px|[[Mã nguồn của một chương trình máy tính đơn giản được viết bằng ngôn ngữ lập trình C. Khi được biên dịch và chạy, nó sẽ cho kết quả "Hello, world!".]] **Ngôn ngữ lập trình**
thumb|Minh họa mã nguồn [[Java (programming language)|Java với comment **mở đầu** được biểu thị bằng màu **đỏ** và comment **nội dòng** bằng màu **lục**. **Mã chương trình** là bằng màu **lam**.]]Trong lập
Trong lập trình máy tính, một **triển khai của ngôn ngữ lập trình** là một hệ thống để thực thi chương trình máy tính. Có hai cách tiếp cận chung để triển khai một ngôn
Trong khoa học máy tính, **bao đóng** (closure) là một hàm hay một tham chiếu tới một hàm cùng với môi trường tham chiếu - một bảng chứa tham chiếu đến mỗi biến không phải
Trong lập trình hướng đối tượng, một **Đối tượng thượng đế** (tiếng Anh: God object) là một đối tượng _biết quá nhiều_ hoặc _làm quá nhiều_. Đối tượng thượng đế là một ví dụ về
Trong công nghệ phần mềm và lý thuyết ngôn ngữ lập trình, **nguyên tắc trừu tượng** (tiếng Anh: _abstraction principle_ hay _principle of abstraction_) là một phương châm cơ bản nhằm giảm sự trùng lặp
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
[[Phần cứng|Phần cứng máy tính là nền tảng cho xử lý thông tin (sơ đồ khối). ]] **Lịch sử phần cứng máy tính** bao quát lịch sử của phần cứng máy tính, kiến trúc của
thumb|right|upright=1.2|Trẻ em được dạy cách sử dụng máy tính xách tay cá nhân; màn hình CRT, bàn phím và chuột máy tính để bàn cũ hơn (thời 1990) có thể nhìn thấy trong nền. **Máy
Khoa học máy tính nghiên cứu các cơ sở lý thuyết của thông tin và tính toán, cùng với các kỹ thuật thực tiễn để thực hiện và
**Hacker** là người hiểu rõ hoạt động của hệ thống máy tính, mạng máy tính, có thể viết hay chỉnh sửa phần mềm, phần cứng máy tính để làm thay đổi, chỉnh sửa nó với
Đây là danh sách các thuật ngữ tìm thấy trong lập trình hướng đối tượng. Một số có liên quan đến lập trình hướng đối tượng và một số thì không. Lưu ý rằng, các
Trong lập trình máy tính, **tầm vực** (tiếng Anh: _scope_) của một ràng buộc tên – liên kết tên với một thực thể, ví dụ như biến – là một vùng của chương trình máy
Trong khoa học máy tính, một hàm hay biểu thức được cho là có **hiệu ứng lề** hay **tác dụng phụ** (_side effect_) nếu nó thay đổi một số trạng thái ngoài tầm vực của
thumb|Con trỏ **'a**' chỉ đến địa chỉ bộ nhớ liên kết tới biến **'b**'. Trong sơ đồ này, kiến trúc điện toán sử dụng cùng [[không gian địa chỉ và dữ liệu nguyên thủy cho
Trong khoa học máy tính, **tham chiếu** (tiếng Anh: _reference_) là một giá trị cho phép chương trình truy xuất gián tiếp tới một số liệu cụ thể, như một biến hay một bản ghi,
Trong lập trình máy tính, một **biến** (_variable_) hay **vô hướng** (_scalar_) là một vị trí lưu trữ gắn liền với một tên tượng trưng (_định danh_) liên quan, chứa một số lượng thông tin
**Lập trình tổng quát** (tiếng Anh: _generic programming_) là một dạng lập trình máy tính mà trong đó thuật toán được viết theo cách kiểu _được-xác-định-sau_ và sau đó được _khởi tạo_ (_instantiate_) nếu cần
Trong lập trình máy tính, **kết dính** (tiếng Anh: _cohesion_) đề cập đến _mức độ mà các yếu tố bên trong một mô đun thuộc về nhau_. Do vậy, sự kết dính đo lường sức
phải|nhỏ|277x277px| Minh họa của một ứng dụng sử dụng libvorbisfile để phát file Ogg Vorbis Trong khoa học máy tính, **thư viện** là tập hợp các tài nguyên không biến động được sử dụng bởi
**Lập trình hướng đối tượng** () là một mẫu hình lập trình dựa trên khái niệm "đối tượng", mà trong đó, đối tượng chứa đựng các dữ liệu trong các trường, thường được gọi là
nhỏ|300x300px| [[Petr Mitrichev (trái) và Gennady Korotkevich (phải), hai lập trình viên thi đấu nổi tiếng trong một cuộc thi.]] **Lập trình thi đấu** () là một môn thể thao trí tuệ trong đó những
**John McCarthy** (4 tháng 9 năm 1927 - 24 tháng 10 năm 2011) là một nhà khoa học máy tính và nhà khoa học nhận thức người Mỹ. McCarthy là một trong những người sáng
phải|nhỏ|325x325px|[[Kết xuất hex của sâu Blaster, hiển thị một thông điệp lập trình viên sâu này để lại cho Giám đốc điều hành Microsoft Bill Gates]] nhỏ|325x325px|Sự lây lan của [[Conficker|sâu Conficker]] **Sâu máy tính**
Biểu trưng chính thức nhỏ|250x250px|Một biển báo điện tử hiển thị ngày 3 tháng 1 năm 1900 vào ngày 3 tháng 1 năm 2000 ở [[Pháp.]] **Sự cố máy tính năm 2000** (còn được gọi
**Máy tính cá nhân IBM**, thường được gọi là **IBM PC**, là máy tính vi tính đầu tiên của IBM và là nền tảng của tiêu chuẩn de facto tương thích IBM PC. Được phát
**Python** () là ngôn ngữ lập trình bậc cao đa năng. Triết lý thiết kế của nó nhấn mạnh khả năng đọc mã bằng cách sử dụng thụt lề đáng kể. Python có kiểu động
nhỏ|Một chiếc laptop [[Lenovo "thời hiện đại"]] **Máy tính xách tay** hay **máy vi tính xách tay** (Tiếng Anh: **laptop computer** hay **laptop PC**) là một chiếc máy tính cá nhân nhỏ gọn có thể
nhỏ|Ảnh chụp màn hình tài liệu [[API web viết bởi NASA]] Một **giao diện lập trình ứng dụng** (, viết tắt: _API_) là một giao diện mà một hệ thống máy tính hay ứng dụng
Đây là các **trận đấu cờ vua giữa con người và máy tính** quan trọng. Máy tính lần đầu tiên có thể đánh bại những người chơi cờ mạnh vào cuối những năm 1980. nổi
**Máy tính bảng** (Tiếng Anh: Tablet computer hay tablet PC), là một thiết bị di động, thông thường có hệ điều hành di động và mạch xử lý, màn hình cảm ứng và viên pin
**Lập trình đôi** (tiếng Anh: _Pair Programming_) là kiểu lập trình đòi hỏi hai kỹ sư phần mềm cùng tham gia một nỗ lực lập trình chung trên một máy trạm, nghĩa là chỉ có
**Kotlin** là một ngôn ngữ lập trình kiểu tĩnh chạy trên máy ảo Java (JVM) và có thể được biên dịch sang mã nguồn Java hay sử dụng cơ sở hạ tầng trình biên dịch
**Nền tảng máy tính**,** Nền tảng điện toán** hoặc **nền tảng** **kỹ thuật số** là môi trường trong đó một phần mềm được thực thi. Nó có thể là phần cứng hoặc hệ điều hành,
**C** là một ngôn ngữ mệnh lệnh được phát triển từ đầu thập niên 1970 bởi Dennis Ritchie để dùng trong hệ điều hành UNIX. Từ đó, ngôn ngữ này đã lan rộng ra nhiều
**Java** (phiên âm Tiếng Việt: "_Gia-va_") là một ngôn ngữ lập trình hướng đối tượng, dựa trên lớp được thiết kế để có càng ít phụ thuộc thực thi càng tốt. Nó là ngôn ngữ
thumb|right|[[Hunter Biden năm 2014]] Vào tháng 10 năm 2020, một cuộc tranh cãi nổ ra liên quan đến một chiếc máy tính xách tay được cho là thuộc về Hunter Biden. Chủ một cửa hàng
nhỏ|Cbmain Trong khoa học máy tính, một **ngôn ngữ lập trình bậc cao** (tiếng Anh: _high-level programming language_) là một ngôn ngữ lập trình có sự trừu tượng hóa mạnh mẽ khỏi các chi tiết
**C#** (**C Sharp**, đọc là _"xi-sáp"_) là một ngôn ngữ lập trình hướng đối tượng đa năng, mạnh mẽ được phát triển bởi Microsoft, C# là phần khởi đầu cho kế hoạch .NET của họ.
nhỏ|phải|243x243px|Ảnh chụp giao diện [[phần mềm diệt virus có tên FireLion- FastHelper]] Trong khoa học máy tính viễn thông, **virus máy tính** hay **virus tin học** (thường được người sử dụng gọi tắt là **virus**)
Class trong **C++** là khái niệm được người dùng định nghĩa như một kiểu dữ liệu đơn giản hay một cấu trúc dữ liệu, được khai báo bằng từ khóa **class, **nó chứa các biến
**Kiểm tra thâm nhập** còn gọi là _kiểm thử thâm nhập_ (tiếng Anh: _Penetration test_, _pen test_ hay _ethical hacking_) là quá trình thực thiện mô phỏng tấn công an ninh mạng vào một hệ
Trong ngành khoa học máy tính, **lập trình hàm** (**lập trình chức năng**) là một mô hình lập trình xem việc tính toán là sự đánh giá các hàm toán học và tránh sử dụng
**PC game** còn gọi là **trò chơi máy tính**, là thể loại trò chơi video được chơi trên các máy tính cá nhân (PC), thay vì chơi trên máy chơi trò chơi điện tử tại
Trong lập trình máy tính, **callback** là một đoạn code chạy được (thường là một hàm A) được sử dụng như tham số truyền vào của hàm B nào đó. Hàm A được gọi ngay
**Ruby** là một ngôn ngữ lập trình hướng đối tượng, có khả năng phản ứng. Theo tác giả, Ruby chịu ảnh hưởng bởi Perl, Smalltalk, Eiffel, Ada và Lisp. Ruby cung cấp nhiều mẫu hình