0
0
Lập trình
Admin Team
Admin Teamtechmely

Khám Phá Sức Mạnh Của Generators Trong JavaScript: Tối Ưu Hóa Mã Lệnh Và Tạo Ra Khả Năng Mới

Đăng vào 11 tháng trước

• 3 phút đọc

Chủ đề:

Javascript

Generators Trong JavaScript: Khái Niệm Và Ứng Dụng

Generators là một loại hàm đặc biệt trong JavaScript, cho phép lập trình viên tạm dừng và tiếp tục quá trình thực thi mã theo ý muốn. Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách mà Generators có thể tối ưu hóa mã lệnh và mở ra những khả năng mới cho việc lập trình trong JavaScript.

Generators Là Gì?

Nói một cách đơn giản, Generators là những hàm có khả năng "tạm dừng" và "tiếp tục" quá trình thực thi. Không giống như các hàm thông thường chạy từ đầu đến cuối, Generators mang đến sự kiểm soát linh hoạt hơn cho lập trình viên nhờ cú pháp function* và từ khóa yield.

Ví Dụ:

javascript Copy
function* myFirstGenerator() {
  yield "Hello 🌟";
  yield "Generators are awesome!";
  yield "Goodbye 👋";
}

// Sử dụng hàm Generators
const gen = myFirstGenerator();

console.log(gen.next()); // { value: 'Hello 🌟', done: false }
console.log(gen.next()); // { value: 'Generators are awesome!', done: false }
console.log(gen.next()); // { value: 'Goodbye 👋', done: false }
console.log(gen.next()); // { value: undefined, done: true }

Giải Thích:

  • Từ khóa yield hoạt động như một điểm tạm dừng trong hàm của bạn.
  • Mỗi lần gọi gen.next() sẽ di chuyển hàm tới câu lệnh yield tiếp theo.
  • Khi không còn câu lệnh yield nào nữa, trình tạo sẽ trả về { done: true }.

Ứng Dụng Thực Tế Của Generators

1. Tạo Chuỗi Vô Hạn

Một trong những ứng dụng phổ biến của Generators là việc tạo ra chuỗi số vô hạn mà không gây tràn bộ nhớ.

Ví Dụ:

javascript Copy
function* infiniteNumbers() {
  let num = 1;
  while (true) {
    yield num++;
  }
}

const numbers = infiniteNumbers();

console.log(numbers.next().value); // 1
console.log(numbers.next().value); // 2
console.log(numbers.next().value); // 3
// ... và tiếp tục

2. Kiểm Soát Việc Lặp Trong Lấy Dữ Liệu

Generators cũng rất hữu ích trong việc kiểm soát quá trình lặp để lấy dữ liệu.

Ví Dụ:

javascript Copy
function* fetchInChunks(data) {
  for (let i = 0; i < data.length; i += 2) {
    yield data.slice(i, i + 2);
  }
}

const chunks = fetchInChunks([1, 2, 3, 4, 5, 6, 7, 8]);

console.log(chunks.next().value); // [1, 2]
console.log(chunks.next().value); // [3, 4]
console.log(chunks.next().value); // [5, 6]

3. Generators Lồng Nhau

Một tính năng thú vị khác của Generators là khả năng gọi các Generators khác bằng từ khóa yield*. Điều này cho phép kết hợp nhiều Generators để tạo thành các luồng xử lý phức tạp hơn.

Ví Dụ:

javascript Copy
function* innerGenerator() {
  yield "Tôi là hàm Generators bên trong 🎯";
}

function* outerGenerator() {
  yield "Tôi là hàm Generators bên ngoài 🌟";
  yield* innerGenerator();
  yield "Quay lại hàm Generators bên ngoài 👋";
}

const gen = outerGenerator();

for (const value of gen) {
  console.log(value);
}

Kết Quả:

Copy
Tôi là hàm Generators bên ngoài 🌟  
Tôi là hàm Generators bên trong 🎯  
Quay lại hàm Generators bên ngoài 👋  

Tại Sao Nên Sử Dụng Generators?

  • Thứ nhất, Generators hỗ trợ lazy evaluation, chỉ tạo ra giá trị khi cần thiết, tiết kiệm tài nguyên.
  • Thứ hai, Generators giúp cải thiện hiệu suất bằng cách tránh tính toán tất cả kết quả cùng một lúc.
  • Cuối cùng, Generators có thể kết hợp với async/await để viết mã bất đồng bộ một cách rõ ràng và dễ đọc hơn.

Kết Luận

Generators là một công cụ mạnh mẽ trong JavaScript, mặc dù ban đầu có thể khó hiểu. Tuy nhiên, với việc luyện tập và sử dụng thường xuyên, bạn sẽ nhanh chóng làm chủ được công nghệ này. Hãy bắt đầu với những ví dụ nhỏ và khám phá các khả năng mới mà Generators mang lại cho lập trình JavaScript của bạn.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào