国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Web-Frontend js-Tutorial JavaScript-Generatoren: Laden Sie Ihren Code mit Pausenleistung auf!

JavaScript-Generatoren: Laden Sie Ihren Code mit Pausenleistung auf!

Dec 30, 2024 pm 10:29 PM

JavaScript Generators: Supercharge Your Code with Pausing Power!

JavaScript-Generatoren sind ziemlich cool. Sie ?hneln regul?ren Funktionen, verfügen jedoch über Superkr?fte. Ich habe sie in letzter Zeit h?ufig verwendet und ich muss sagen, sie haben die Art und Weise ver?ndert, wie ich über den Kontrollfluss in meinem Code denke.

Beginnen wir mit den Grundlagen. Ein Generator ist eine Funktion, die angehalten und fortgesetzt werden kann. Es verwendet die Function*-Syntax und das Schlüsselwort yield. Hier ist ein einfaches Beispiel:

function* countToThree() {
  yield 1;
  yield 2;
  yield 3;
}

const counter = countToThree();
console.log(counter.next().value); // 1
console.log(counter.next().value); // 2
console.log(counter.next().value); // 3

Sehen Sie, wie wir die Funktion Ertrag für Ertrag durchlaufen k?nnen? Das ist die Magie von Generatoren.

Aber Generatoren k?nnen noch viel mehr als nur z?hlen. Sie eignen sich hervorragend zum Erstellen benutzerdefinierter Iteratoren. Angenommen, Sie m?chten eine Fibonacci-Folge generieren:

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

const fib = fibonacci();
for (let i = 0; i < 10; i++) {
  console.log(fib.next().value);
}

Dieser Generator wird für immer Fibonacci-Zahlen erzeugen. Es ist eine unendliche Folge, aber wir berechnen nur die Werte, die wir brauchen.

Das bringt uns zu einem der coolsten Dinge an Generatoren: Lazy Evaluation. Sie berechnen Werte nur, wenn wir danach fragen. Dies kann bei gro?en Datens?tzen oder komplexen Berechnungen sehr effizient sein.

Sehen wir uns ein praktischeres Beispiel an. Angenommen, Sie erstellen ein Paginierungssystem für einen gro?en Datensatz:

function* paginate(items, pageSize) {
  for (let i = 0; i < items.length; i += pageSize) {
    yield items.slice(i, i + pageSize);
  }
}

const allItems = Array.from({ length: 100 }, (_, i) => i + 1);
const pageSize = 10;
const pages = paginate(allItems, pageSize);

console.log(pages.next().value); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(pages.next().value); // [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

Mit diesem Generator k?nnen wir Datenseiten nach Bedarf abrufen, ohne alles auf einmal in den Speicher laden zu müssen.

Generatoren gl?nzen auch, wenn es um asynchrone Programmierung geht. Sie k?nnen dafür sorgen, dass asynchroner Code eher wie synchroner Code aussieht und sich so verh?lt. Hier ist ein Beispiel für die Verwendung der Co-Bibliothek:

const co = require('co');

function* fetchUserData() {
  const user = yield fetchUser();
  const posts = yield fetchPosts(user.id);
  const comments = yield fetchComments(posts[0].id);
  return { user, posts, comments };
}

co(fetchUserData).then(result => {
  console.log(result);
}).catch(error => {
  console.error(error);
});

Dieser Code sieht synchron aus, führt jedoch tats?chlich drei asynchrone Aufrufe durch. Der Generator pausiert bei jedem Ertrag, bis das Versprechen erfüllt ist.

Generatoren k?nnen auch für kooperatives Multitasking verwendet werden. Sie k?nnen mehrere Generatoren erstellen und zwischen ihnen wechseln und so die gleichzeitige Ausführung simulieren:

function* task1() {
  yield 'Start task 1';
  yield 'Middle of task 1';
  yield 'End task 1';
}

function* task2() {
  yield 'Start task 2';
  yield 'Middle of task 2';
  yield 'End task 2';
}

function run(tasks) {
  const iterations = tasks.map(task => task());
  while (iterations.length) {
    const [first, ...rest] = iterations;
    const { value, done } = first.next();
    if (!done) {
      console.log(value);
      iterations.push(first);
    }
    iterations.unshift(...rest);
  }
}

run([task1, task2]);

Dieser Code wechselt zwischen den beiden Aufgaben und führt jeweils einen Schritt nach dem anderen aus.

Generatoren eignen sich auch hervorragend zum Erstellen von Zustandsmaschinen. Jeder Ertrag kann einen anderen Zustand darstellen:

function* trafficLight() {
  while (true) {
    yield 'red';
    yield 'green';
    yield 'yellow';
  }
}

const light = trafficLight();
console.log(light.next().value); // red
console.log(light.next().value); // green
console.log(light.next().value); // yellow
console.log(light.next().value); // red

Diese Ampel wird auf unbestimmte Zeit durch ihre Zust?nde radeln.

Lassen Sie uns nun über einige fortgeschrittenere Techniken sprechen. Durch die Generatordelegation k?nnen Sie einem anderen Generator nachgeben:

function* innerGenerator() {
  yield 'inner 1';
  yield 'inner 2';
}

function* outerGenerator() {
  yield 'outer 1';
  yield* innerGenerator();
  yield 'outer 2';
}

const gen = outerGenerator();
console.log(gen.next().value); // outer 1
console.log(gen.next().value); // inner 1
console.log(gen.next().value); // inner 2
console.log(gen.next().value); // outer 2

Die yield*-Syntax wird an innerGenerator delegiert und gibt alle seine Werte aus, bevor mit ?u?eremGenerator fortgefahren wird.

Erw?hnenswert ist auch die Fehlerbehandlung in Generatoren. Mit der throw()-Methode k?nnen Sie Fehler in einen Generator werfen:

function* errorGenerator() {
  try {
    yield 'Start';
    yield 'Middle';
    yield 'End';
  } catch (error) {
    console.error('Caught:', error);
    yield 'Error handled';
  }
}

const gen = errorGenerator();
console.log(gen.next().value); // Start
console.log(gen.throw(new Error('Oops!')).value); // Caught: Error: Oops!
                                                  // Error handled

Dies erm?glicht einige ziemlich ausgefeilte Fehlerbehandlungsstrategien.

Generatoren k?nnen auch zur Implementierung von Backtracking-Algorithmen verwendet werden. Hier ist ein einfaches Beispiel, das alle m?glichen Kombinationen von Elementen generiert:

function* countToThree() {
  yield 1;
  yield 2;
  yield 3;
}

const counter = countToThree();
console.log(counter.next().value); // 1
console.log(counter.next().value); // 2
console.log(counter.next().value); // 3

Dieser Generator erzeugt alle 2-Element-Kombinationen der angegebenen Elemente.

Ein Bereich, in dem Generatoren wirklich gl?nzen, ist die Verarbeitung gro?er Datenmengen. Sie k?nnen effiziente Datenverarbeitungspipelines erstellen, die nur das berechnen, was ben?tigt wird. Hier ist ein Beispiel, das eine gro?e Datei Zeile für Zeile verarbeitet:

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

const fib = fibonacci();
for (let i = 0; i < 10; i++) {
  console.log(fib.next().value);
}

Dieser Generator liest die Datei Zeile für Zeile, sodass Sie gro?e Dateien verarbeiten k?nnen, ohne sie vollst?ndig in den Speicher zu laden.

Generatoren k?nnen auch zur Implementierung des Observable-Musters verwendet werden. Hier ist eine einfache Implementierung:

function* paginate(items, pageSize) {
  for (let i = 0; i < items.length; i += pageSize) {
    yield items.slice(i, i + pageSize);
  }
}

const allItems = Array.from({ length: 100 }, (_, i) => i + 1);
const pageSize = 10;
const pages = paginate(allItems, pageSize);

console.log(pages.next().value); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(pages.next().value); // [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

Dieser Generator fungiert als Beobachter und verarbeitet jedes Datenelement, das er empf?ngt.

Eine weitere coole Verwendung von Generatoren ist die Erstellung benutzerdefinierter Kontrollstrukturen. Hier ist ein Beispiel für eine Wiederholungsfunktion, die Generatoren verwendet:

const co = require('co');

function* fetchUserData() {
  const user = yield fetchUser();
  const posts = yield fetchPosts(user.id);
  const comments = yield fetchComments(posts[0].id);
  return { user, posts, comments };
}

co(fetchUserData).then(result => {
  console.log(result);
}).catch(error => {
  console.error(error);
});

Diese Wiederholungsfunktion wird die angegebene Funktion bis zu max. Versuche lang versuchen, bevor sie aufgibt.

Zusammenfassend l?sst sich sagen, dass Generatoren eine leistungsstarke Funktion von JavaScript sind, die Ihnen dabei helfen kann, aussagekr?ftigeren, effizienteren und wartbareren Code zu schreiben. Sie eignen sich hervorragend für die Handhabung komplexer Kontrollflüsse, die Verwaltung asynchroner Vorg?nge und die Verarbeitung gro?er Datens?tze. Auch wenn sie auf den ersten Blick vielleicht etwas seltsam erscheinen, werden Sie, sobald Sie den Dreh raus haben, alle m?glichen kreativen M?glichkeiten finden, sie in Ihren Projekten zu verwenden. Probieren Sie Generatoren also in Ihrem n?chsten JavaScript-Projekt aus. Sie werden überrascht sein, wie sehr sie Ihren Code vereinfachen k?nnen!


Unsere Kreationen

Schauen Sie sich unbedingt unsere Kreationen an:

Investor Central | Intelligentes Leben | Epochen & Echos | R?tselhafte Geheimnisse | Hindutva | Elite-Entwickler | JS-Schulen


Wir sind auf Medium

Tech Koala Insights | Epochs & Echoes World | Investor Central Medium | Puzzling Mysteries Medium | Wissenschaft & Epochen Medium | Modernes Hindutva

Das obige ist der detaillierte Inhalt vonJavaScript-Generatoren: Laden Sie Ihren Code mit Pausenleistung auf!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

JavaScript vs. Java: Welche Sprache sollten Sie lernen? JavaScript vs. Java: Welche Sprache sollten Sie lernen? Jun 10, 2025 am 12:05 AM

JavaScriptisidealforwebDevelopment, w?hrend JavasuitSlarge-ScaleApplications-und-und -entwicklung.1) JavascriptexcelsincreatinginteractiveWebexperiencesandful-StackDevelopmentwitHnode.js.2) javaisroboBusthernprispribies

Welcher Kommentar symboliert in JavaScript: Eine klare Erkl?rung Welcher Kommentar symboliert in JavaScript: Eine klare Erkl?rung Jun 12, 2025 am 10:27 AM

In JavaScript h?ngt die Auswahl eines Einzelzeilen-Kommentars (//) oder eines Mehrzeilungskommentars (//) von den Zweck- und Projektanforderungen des Kommentars ab: 1. Verwenden Sie Einzelzeilen-Kommentare für eine schnelle und Inline-Interpretation; 2. Verwenden Sie Multi-Line-Kommentare für detaillierte Dokumentation. 3.. Behalten Sie die Konsistenz des Kommentarstils bei; 4. Vermeiden Sie überankünfte; 5. Stellen Sie sicher, dass die Kommentare synchron mit dem Code aktualisiert werden. Die Auswahl des richtigen Annotationsstils kann dazu beitragen, die Lesbarkeit und Wartbarkeit Ihres Codes zu verbessern.

Die ultimative Anleitung zu JavaScript -Kommentaren: Verbesserung der Code -Klarheit Die ultimative Anleitung zu JavaScript -Kommentaren: Verbesserung der Code -Klarheit Jun 11, 2025 am 12:04 AM

Ja, JavaScriptComents isten -n?tig und schuldiert, 1) sie haben sich entwickeln, die Codelogicandintent, 2) ArevitalIncomplexProjects und 3) ShoeNeClarity Gloutclutterthecode.

Java vs. JavaScript: Die Verwirrung beseitigen Java vs. JavaScript: Die Verwirrung beseitigen Jun 20, 2025 am 12:27 AM

Java und JavaScript sind unterschiedliche Programmiersprachen, die jeweils für verschiedene Anwendungsszenarien geeignet sind. Java wird für die Entwicklung gro?er Unternehmen und mobiler Anwendungen verwendet, w?hrend JavaScript haupts?chlich für die Entwicklung von Webseiten verwendet wird.

JavaScript -Kommentare: Kurzer Erl?uterung JavaScript -Kommentare: Kurzer Erl?uterung Jun 19, 2025 am 12:40 AM

JavaScriptComents AreseessentialFormaintaining, Lesen und GuidingCodeexexecution.1) einzelne Linecommments Arequickickexplanationen.2) Multi-LindexplainComproxlogicorProvedetailedDocumentation.3) InlinecommentsclarifyspecificPartsosensofCode.BestPracticic

Mastering JavaScript -Kommentare: Ein umfassender Leitfaden Mastering JavaScript -Kommentare: Ein umfassender Leitfaden Jun 14, 2025 am 12:11 AM

CommentareAtecrucialinjavaScriptFormaintainingClarity und FosteringCollaboration.1) thehelpindebugging, Onboarding, und die Verst?rkung vonCodeevolution.2) Verwendungsle-Linien- und Verst??en für FosterquickexPlanations und Multi-LinecomMentSfordsetaileddescriptions.3) Bestpraktiziert

JavaScript -Datentypen: Ein tiefer Tauchgang JavaScript -Datentypen: Ein tiefer Tauchgang Jun 13, 2025 am 12:10 AM

JavascripThasseveralprimitedatatypes: Zahl, String, Boolean, undefined, Null, Symbol und Bigint und Non-Primitivetypes LikeObjectandArray.Ververst?ndnisTheSeisScricialForwritingEffiction, Bug-Freecode: 1) numberusesa64-Bitformat, führend, führend, führend, pointofointofloatieren-pointoinssli

JavaScript vs. Java: Ein umfassender Vergleich für Entwickler JavaScript vs. Java: Ein umfassender Vergleich für Entwickler Jun 20, 2025 am 12:21 AM

JavaScriptispreferredforwebdevelopment,whileJavaisbetterforlarge-scalebackendsystemsandAndroidapps.1)JavaScriptexcelsincreatinginteractivewebexperienceswithitsdynamicnatureandDOMmanipulation.2)Javaoffersstrongtypingandobject-orientedfeatures,idealfor

See all articles