# TypeScript - Tuples: Hướng dẫn cho người mới bắt đầu

Xin chào các bạn, những siêu sao lập trình tương lai! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới kỳ diệu của TypeScript tuples. Đừng lo lắng nếu bạn chưa từng nghe đến tuples trước đây - đến cuối bài hướng dẫn này, bạn sẽ thành thạo tuples! Hãy lấy饮料 yêu thích của bạn, ngồi thoải mái, và cùng nhau bắt đầu hành trình thú vị này.

## Tuples Là Gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu tuples là gì. Hãy tưởng tượng bạn có một hộp nhỏ nơi bạn có thể để các vật phẩm khác nhau, nhưng có một điều kiện, bạn cần phải nhớ chính xác thứ tự của những vật phẩm đó. Đó chính là tuples trong TypeScript - một mảng có độ dài cố định mà mỗi phần tử có thể có một kiểu khác nhau, và thứ tự rất quan trọng.

## Cú Pháp

Hãy bắt đầu từ những điều cơ bản. Đây là cách bạn khai báo một tuples trong TypeScript:

```typescript
let myTuple: [string, number, boolean] = ['Hello', 42, true];

Trong ví dụ này, chúng ta đã tạo một tuples名叫 myTuple chứa ba phần tử: một chuỗi, một số và một boolean. Thứ tự rất quan trọng ở đây - phần tử đầu tiên phải là một chuỗi, phần tử thứ hai là một số và phần tử thứ ba là một boolean.

TypeScript - Tuples

Truy Cập Giá Trị Trong Tuples

Bây giờ chúng ta đã tạo ra tuples của mình, làm thế nào để truy cập các giá trị trong nó? Nó rất đơn giản! Chúng ta sử dụng ký hiệu chỉ mục, giống như với các mảng. Nhớ rằng, trong lập trình, chúng ta bắt đầu đếm từ 0.

let myTuple: [string, number, boolean] = ['Hello', 42, true];

console.log(myTuple[0]); // Output: 'Hello'
console.log(myTuple[1]); // Output: 42
console.log(myTuple[2]); // Output: true

Trong ví dụ này, myTuple[0] cho chúng ta phần tử đầu tiên, myTuple[1] phần tử thứ hai, và vân vân. Nó giống như reaching vào hộp của chúng ta và lấy ra các vật phẩm một cách từng cái.

Các thao tác trên Tuples

Tuples hỗ trợ nhiều thao tác tương tự như các mảng. Hãy cùng nhìn vào một vài thao tác:

1. Độ Dài

Chúng ta có thể biết có bao nhiêu phần tử trong tuples của mình bằng cách sử dụng thuộc tính length:

let myTuple: [string, number, boolean] = ['Hello', 42, true];
console.log(myTuple.length); // Output: 3

2. Push

Chúng ta có thể thêm các phần tử vào cuối tuples của mình bằng cách sử dụng phương thức push:

let myTuple: [string, number] = ['Hello', 42];
myTuple.push(true);
console.log(myTuple); // Output: ['Hello', 42, true]

Tuy nhiên, hãy cẩn thận! Mặc dù TypeScript cho phép điều này, nó có thể dẫn đến hành vi không mong muốn vì chúng ta đang thay đổi cấu trúc của tuples.

3. Pop

Chúng ta có thể loại bỏ phần tử cuối cùng khỏi tuples của mình bằng cách sử dụng phương thức pop:

let myTuple: [string, number, boolean] = ['Hello', 42, true];
myTuple.pop();
console.log(myTuple); // Output: ['Hello', 42]

Lại một lần nữa, hãy sử dụng phương thức này một cách cẩn thận vì nó thay đổi cấu trúc của tuples.

Cập Nhật Tuples

Chúng ta có thể cập nhật các giá trị trong tuples của mình bằng cách gán các giá trị mới cho các chỉ mục cụ thể:

let myTuple: [string, number] = ['Hello', 42];
myTuple[0] = 'Hi';
myTuple[1] = 100;
console.log(myTuple); // Output: ['Hi', 100]

Nhớ rằng, bạn cần phải tuân thủ các kiểu đã xác định trong tuples. Ví dụ, bạn không thể làm điều này:

let myTuple: [string, number] = ['Hello', 42];
myTuple[0] = 100; // Lỗi: Kiểu 'number' không thể gán cho kiểu 'string'.

Giải Rối Tuples

Giải rối là một cách nói khác cho "unpacking" các giá trị từ tuples vào các biến riêng lẻ. Nó giống như mở hộp của chúng ta và trải ra tất cả các vật phẩm trên bàn. Dưới đây là cách nó hoạt động:

let myTuple: [string, number, boolean] = ['Hello', 42, true];
let [greeting, theAnswer, isAwesome] = myTuple;

console.log(greeting);    // Output: 'Hello'
console.log(theAnswer);   // Output: 42
console.log(isAwesome);   // Output: true

Trong ví dụ này, chúng ta đã tạo ba biến mới (greeting, theAnswer, và isAwesome) và gán chúng các giá trị từ tuples của chúng ta theo thứ tự.

Tham Số và Kiểu Tuples

Tuples có thể rất hữu ích khi làm việc với các hàm. Hãy tưởng tượng chúng ta muốn tạo một hàm nhận tên và tuổi của một người, và trả về một lời chào. Chúng ta có thể sử dụng tuples cho điều này:

function greetPerson(person: [string, number]): string {
    const [name, age] = person;
    return `Xin chào, ${name}! Bạn ${age} tuổi.`;
}

let person: [string, number] = ['Alice', 30];
console.log(greetPerson(person)); // Output: "Xin chào, Alice! Bạn 30 tuổi."

Trong ví dụ này, hàm greetPerson của chúng ta mong đợi một tuples với một chuỗi (tên) và một số (tuổi). Chúng ta sau đó sử dụng giải rối để unpack các giá trị này và tạo lời chào.

Các Phương Thức của Tuples

Dưới đây là bảng các phương thức phổ biến bạn có thể sử dụng với tuples:

Phương Thức Mô Tả Ví Dụ
push() Thêm một hoặc nhiều phần tử vào cuối tuples myTuple.push(4)
pop() Loại bỏ phần tử cuối cùng khỏi tuples myTuple.pop()
concat() Kết hợp hai hoặc nhiều tuples let newTuple = tuple1.concat(tuple2)
slice() Trả về một phần của tuples let portion = myTuple.slice(1, 3)
indexOf() Trả về chỉ mục đầu tiên tại phần tử có thể tìm thấy let index = myTuple.indexOf(42)

Nhớ rằng, trong khi các phương thức này hoạt động với tuples, sử dụng chúng có thể thay đổi cấu trúc của tuples, dẫn đến hành vi không mong muốn trong mã của bạn. Hãy sử dụng chúng một cách cẩn thận!

Và thế là bạn đã hoàn thành khóa học nhanh về TypeScript tuples. Từ việc tạo ra chúng đến việc truy cập các giá trị, từ việc cập nhật chúng đến việc sử dụng chúng trong các hàm, bạn bây giờ đã có tất cả các công cụ cần thiết để bắt đầu làm việc với tuples trong các dự án TypeScript của bạn.

Nhớ rằng, thực hành làm nên完美. Vậy đừng ngại thử nghiệm với tuples trong mã của riêng bạn. Ai biết được? Bạn có thể sẽ tìm thấy chúng là tính năng yêu thích mới của bạn trong TypeScript!

Chúc các bạn lập trình vui vẻ, và tuples của bạn luôn được sắp xếp đúng thứ tự!

Credits: Image by storyset