Bản ghi

Trong khoa học máy tính, một bản ghi (còn được gọi là mẫu tin, cấu trúc, struct hoặc dữ liệu phức hợp, tiếng Anh: record) là một cấu trúc dữ liệu cơ bản. Bản ghi trong cơ sở dữ liệu hoặc bảng tính thường được gọi là một "hàng".
Một bản ghi là một tập hợp các "trường", có thể thuộc các loại dữ liệu khác nhau, thường là theo số lượng và chuỗi cố định. Các trường của một bản ghi cũng có thể được gọi là "thành viên", đặc biệt là trong lập trình hướng đối tượng; các trường cũng có thể được gọi là các "phần tử", mặc dù các "phần tử" này gây ra sự nhầm lẫn với các phần tử của tập hợp.
Ví dụ: một ngày có thể được lưu trữ dưới dạng bản ghi chứa trường năm dưới dạng số, trường tháng được biểu thị dưới dạng chuỗi và trường ngày của tháng. Một hồ sơ nhân sự có thể chứa tên, mức lương và cấp bậc. Bản ghi về hình tròn có thể chứa tâm và bán kính - trong trường hợp này, bản thân tâm của đường tròn có thể được biểu diễn dưới dạng bản ghi điểm chứa các tọa độ x và y.
Các bản ghi được phân biệt với các mảng bởi thực tế là số lượng trường của chúng thường được cố định, mỗi trường có một tên và mỗi trường có thể có một loại dữ liệu khác nhau.
"Kiểu bản ghi" là kiểu dữ liệu mô tả các giá trị và biến đó. Hầu hết các ngôn ngữ máy tính hiện đại cho phép lập trình viên xác định các loại bản ghi mới. Định nghĩa bao gồm chỉ định loại dữ liệu của từng trường và một mã định danh (tên hoặc nhãn) mà theo đó nó có thể được truy cập. Trong lý thuyết loại, các loại sản phẩm (không có tên trường) thường được ưa thích do tính đơn giản của chúng, nhưng các loại bản ghi thích hợp được nghiên cứu bằng các ngôn ngữ như System F-sub. Vì các bản ghi lý thuyết loại có thể chứa các trường được phân loại lớp thứ nhất ngoài dữ liệu, chúng có thể thể hiện nhiều tính năng của lập trình hướng đối tượng.
Bản ghi có thể tồn tại trong bất kỳ phương tiện lưu trữ nào, bao gồm bộ nhớ chính và thiết bị lưu trữ lớn như băng từ hoặc đĩa cứng. Bản ghi là một thành phần cơ bản của hầu hết các cấu trúc dữ liệu, đặc biệt là cấu trúc dữ liệu liên kết. Nhiều tệp máy tính được tổ chức dưới dạng các mảng của các bản ghi logic, thường được nhóm thành các bản ghi vật lý lớn hơn hoặc các khối để đạt hiệu quả.
Các tham số của hàm hoặc thủ tục thường có thể được xem như các trường của biến bản ghi; và các đối số được truyền cho hàm đó có thể được xem như một giá trị bản ghi được gán cho biến đó tại thời điểm cuộc gọi. Ngoài ra, trong ngăn xếp cuộc gọi thường được sử dụng để thực hiện các cuộc gọi thủ tục, mỗi mục nhập là một "bản ghi kích hoạt" hoặc "khung cuộc gọi", chứa các tham số thủ tục và các biến cục bộ, địa chỉ trả về và các trường cục bộ khác.
Một đối tượng trong ngôn ngữ hướng đối tượng về cơ bản là một bản ghi có chứa các quy trình chuyên biệt để xử lý bản ghi đó; và các loại đối tượng là một liệt kê chi tiết của các loại bản ghi. Thật vậy, trong hầu hết các ngôn ngữ hướng đối tượng, các bản ghi chỉ là trường hợp đặc biệt của các đối tượng và được gọi là cấu trúc dữ liệu cũ đơn giản (PODS), để tương phản với các đối tượng sử dụng các tính năng hướng đối tượng (OO).
Một bản ghi có thể được xem như là một máy tính tương tự của một bộ (tuple) toán học, mặc dù một bộ có thể hoặc không thể được coi là một bản ghi, và ngược lại, tùy thuộc vào quy ước và ngôn ngữ lập trình cụ thể. Trong cùng một hướng, một loại bản ghi có thể được xem là tương tự ngôn ngữ máy tính của tích Descartes của hai hoặc nhiều tập hợp toán học hoặc việc thực hiện một loại tích trừu tượng trong một ngôn ngữ cụ thể.