0
0
Posts
HN
Hậu Nguyễnhauhonguyen2001

Generator Function trong JavaScript

Đăng vào 3 months ago

• 3 phút đọc

Chủ đề:

Javascript

Trong lập trình JavaScript, generator function là một tính năng mạnh mẽ được giới thiệu từ phiên bản ECMAScript 2015 (ES6). Các hàm này cho phép bạn viết code có khả năng tạm dừng và tiếp tục thực thi, một cách linh hoạt và hiệu quả. Bài viết này sẽ cung cấp một cái nhìn sâu sắc về generator functions, cách chúng hoạt động, và một số ví dụ thực tế để hiểu rõ hơn về cách sử dụng chúng.

Khái Niệm Cơ Bản về Generator Function

Generator function là một loại hàm đặc biệt trong JavaScript, được định nghĩa bằng cách thêm một dấu sao (*) ngay sau từ khóa functionKhi được gọi, hàm này không thực thi toàn bộ code ngay lập tức, mà trả về một Generator object. Điều này tạo điều kiện cho việc tạm dừng và tiếp tục thực thi hàm tại bất kỳ điểm nào trong code mà không mất trạng thái thực thi hiện tại

Cú Pháp Cơ Bản

function* generatorFunction() {
    // Code goes here
}

Generator function có thể chứa một hoặc nhiều lệnh yield. Lệnh yield tạm dừng thực thi của hàm và trả về một giá trị (nếu có). Khi hàm generator được tiếp tục, nó bắt đầu thực thi ngay sau lệnh yield cuối cùng đã thực thi

Ví Dụ Đơn Giản

function* idGenerator() {
    let id = 1;
    while (true) {
        yield id;
        id++;
    }
}

const gen = idGenerator(); // Khởi tạo generator
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3

Trong ví dụ trên, idGenerator là một generator function tạo ra một ID mới mỗi khi được gọi. Lệnh yield tạm dừng hàm và trả về giá trị của id.

Ứng Dụng Thực Tế của Generator Functions

Generator functions có nhiều ứng dụng trong thực tế, từ việc xử lý các tác vụ bất đồng bộ cho đến việc tạo ra các chuỗi dữ liệu phức tạp mà không cần tải trước toàn bộ dữ liệu vào bộ nhớ.

Quản Lý Các Tác Vụ Bất Đồng Bộ

Generator functions có thể được sử dụng để quản lý các hoạt động bất đồng bộ một cách hiệu quả, giúp code dễ đọc và dễ bảo trì hơn. Ví dụ, bạn có thể sử dụng thư viện như co để làm việc với Promises trong một cách tiếp cận tuần tự mà không cần sử dụng callback hoặc chain các Promises

Tạo Dữ Liệu Phức Tạp

Generator functions cũng rất hữu ích trong việc tạo ra các chuỗi dữ liệu phức tạp. Ví dụ, bạn có thể tạo một generator function để tạo ra một chuỗi Fibonacci:

function* fibonacci() {
    let [prev, curr] = [0, 1];
    while (true) {
        [prev, curr] = [curr, prev + curr];
        yield curr;
    }
}

const sequence = fibonacci();
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 2
console.log(sequence.next().value); // 3
console.log(sequence.next().value); // 5

Kết Hợp Với Các Generator Khác

Bạn có thể sử dụng yield* để "ủy quyền" thực thi cho một generator khác hoặc một iterable object khác. Điều này cho phép bạn tạo các luồng xử lý dữ liệu phức tạp mà không làm rối code

function* generator1() {
    yield* [1, 2, 3];
    yield* generator2();
}

function* generator2() {
    yield 4;
    yield 5;
}

const gen = generator1();
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
console.log(gen.next().value); // 4
console.log(gen.next().value); // 5

Kết Luận

Generator functions mang lại một cách tiếp cận mới và mạnh mẽ trong việc xử lý các tác vụ trong JavaScript. Với khả năng tạm dừng và tiếp tục thực thi, cùng với việc quản lý trạng thái thực thi, generator functions mở ra nhiều khả năng mới cho các nhà phát triển để xây dựng các ứng dụng hiệu quả và hiệu suất cao.

Gợi ý câu hỏi phỏng vấn
entry

What is the return type of a function that doesn't return anything?

entry

So sánh ===== trong Javascript?

entry

Sự khác biệt của biến dùng var, letconst trong javascript là gì?

entry

Sự khác nhau giữa nullundefined trong Javascript?

Bài viết cùng tác giả

Không có kết quả

Không có kết quả

Bình luận

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

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