Veröffentlicht am 28-09-2019

Enumerable reduzieren - Teil 1: Die Reise beginnt

Titelfolie zu „Enumerable reduzieren - Ein illustriertes Abenteuer“

Erblicken! Die Lemuren haben sich dafür entschieden, auf einem textbasierten Medium zu erscheinen, und bringen den gesamten illustrierten Inhalt von „Reducing Enumerable - An Illustrated Adventure“ mit.

Wenn Sie die vollständige RubyConf-Version des Vortrags sehen möchten, finden Sie sie hier:

Da dies eine sehr bildintensive und geschichtsträchtige Präsentation war, werden wir sie aus Gründen der Verdaulichkeit in mehrere Artikel aufteilen.

Inhaltsverzeichnis

  1. Die Reise beginnt
  2. Chartreuse - Der Meister der Landkarte
  3. Indigo - Der Meister der Auserwählten
  4. Violet - Der Meister des Findens
  5. Cerulean - The Master of Tally Von
  6. Eine letzte Lektion von Scarlet

Weiter >>

Lerne Red kennen

Rot winkt hallo

Treffen Sie Red, den Maki. Er ist ein Schüler des großen Meisters Scarlet und lernt, wie man reduziert.

Er übt schon seit einiger Zeit, wie man Zahlen summiert und wie man funktionale Programmierung lernt.

Zu diesem Zeitpunkt glaubt er, ziemlich geschickt darin zu sein, wenn er nicht bereit ist, die Meisterschaftsprüfungen selbst zu versuchen.

Rot mit einem Hammer und dachte darüber nach, Dinge zu reduzieren

Jetzt liebt Rot es absolut, zu reduzieren und vor allem große Zahlenstapel in einfache Summen zu reduzieren. Er ist in der Tat ziemlich gut darin geworden.

Rot träumt davon, große Zahlenstapel abzubauen

In der Tat so gut, dass er ziemlich besessen davon ist, und er möchte uns die Grundlagen zeigen, wie Reduction funktioniert. Sollen wir einen Blick darauf werfen?

Ein Blick in Reduce

Jetzt ist Reduzieren eine sehr interessante Funktion in Enumerable, und es ist sehr häufig schwer zu verstehen, was es tut.

Werfen wir einen Blick darauf, wie es funktioniert.

Liste von 1, 2 und 3 Summen zu 6

Reduzieren nimmt im Fall einer Summe eine Liste von Zahlen auf und gibt die Summe dieser Zahlen zurück.

[1,2,3] .reduce (0) {| a, v | a + v} # => 6

Der Code dafür könnte ungefähr so ​​aussehen, aber das ist ein bisschen schwer zu verstehen. Lassen Sie uns ihn also etwas aufschlüsseln, oder?

Akkus

Betrachtet man den Akkumulator, wird 0 in der Funktion als a dargestellt und mit dem Wert 6 zurückgegeben

Wir beginnen mit einem Akku. Ein Akkumulator beginnt als erstes Argument zum Reduzieren und ist in diesem Fall 0. Warum 0? Wenn wir etwas zu 0 addieren, erhalten wir diese Zahl zurück. Das macht es zu einem guten „leeren“ Element.

Wenn die Liste leer ist, bekommen wir unser leeres Element zurück!

In diesem Artikel wird unser Akku als angezeigt.

Listen und Werte

Betrachten Sie die Liste von 1, 2 und 3, die in der Funktion als v dargestellt ist

Als nächstes sehen Sie unsere Liste, die in diesem Artikel als v angezeigt wird. Jedes Element unserer Liste wird beim Reduzieren durchlaufen und in die Funktion als v übergehen.

Werte und Akkumulatoren verbinden

Betrachten Sie den Plus-Operator, der zum Verknüpfen eines Akkumulators und eines Werts zum Erstellen eines neuen Akkumulators verwendet wurde

Zuletzt und vielleicht am wichtigsten ist, wie wir unseren Wert und unseren Akkumulator zu einem neuen Akkumulator verbinden. In diesem Fall +.

Das Interessante hier ist, dass die Art und Weise, wie wir Dinge zusammenfügen, sich auch auf unseren leeren Wert auswirkt. Es wäre wenig sinnvoll, eine Zahl mit Multiplikation zu verbinden, wenn unser angeblich leerer Wert 0 ist, nein ?:

[1, 2, 3] .reduce (0) {| a, v | ein V }
=> 0

Es würde immer 0 zurückgeben! Stattdessen möchten wir 1 für diese bestimmte Paarung verwenden.

Jetzt alle zusammen

0 + 1, 2, 3

Alles in allem könnten wir also etwas haben, das ein bisschen so aussieht. Reduzieren Sie die Liste von 1, 2, 3 auf den Startwert 0, indem Sie + verwenden, um die Werte miteinander zu verbinden.

Häufiger könnte das so aussehen:

0 + 1 + 2 + 3

Aber wie genau funktioniert das? Wie verfolgen wir diesen Datenfluss? Werfen wir einen Blick darauf.

Wie reduziert reduziert

Jeder Reduzierungsschritt, wie im folgenden Text erläutert

Für jede Reduktionsschleife geben wir unseren Akkumulator und unseren nächsten Wert in die Funktion ein. Was von dieser Funktion zurückgegeben wird, wird beim nächsten Reduzierungslauf zum neuen Akkumulator.

  1. Wir beginnen mit einem Anfangswert von 0 und addieren 1 dazu, wodurch wir einen neuen Akkumulator von 1 erhalten.
  2. Das bedeutet, dass wir in der nächsten Schleife mit 1 beginnen und den nächsten Wert in unserer Liste hinzufügen, 2, was uns 3 ergibt.
  3. In unserer letzten Schleife haben wir einen Akkumulator von 3 und einen letzten Wert von 3.
  4. Nun, da Reduce keine Zahlen mehr hat, um zu reduzieren, gibt es den endgültigen Akkumulator zurück, den es hatte. In diesem Fall lautet unsere Antwort 6.

Was ist Reduzieren?

Erläutern der Kernelemente von

Reduzieren ist eine Möglichkeit, eine Liste mit vielen Dingen zu erstellen und sie mithilfe eines Anfangswerts in eine Sache zu reduzieren und Werte zu einem neuen Akkumulator zusammenzufügen.

Meister der funktionalen Programmierung

Red träumt von sich selbst als weiser Meister mit großen Kräften

Dies macht uns jetzt zu Meistern der funktionalen Programmierung, zu Trinkern der Quelle des Wissens, die über unsere Jahre hinaus weise und über die irdische Grenze hinaus mächtig sind! Die vollen Kräfte von Ruby sind an unseren Fingerspitzen und nichts kann uns aufhalten!

Nun, bis auf eine Sache ...

Enumerable # sum

[1,2,3] .sum # => 6

Ruby 2.4+ hat eine neue Funktion eingeführt, sum, die das Gleiche bewirkt.

Als er das merkt, ist Red merklich verstört. Alles, was er zuvor gelernt hatte, schien angesichts dieser neuen Funktion völlig irrelevant zu sein, was ihn zu einer sehr schwierigen Frage veranlasste:

Ist reduzieren unnötig?

War reduzieren unnötig? Er beschloss, zu der einen Quelle zu gehen, von der er wusste, dass sie eine Antwort auf seine Frage haben würde, seinem Meister Scarlet.

Nach Hilfe fragen

Red schrieb einen Brief und fragte sie ganz einfach:

Roter Brief an den Meister: „Reduziert sich die Summe der Tötungen? - Rot

Reduziert sich die Summe der Tötungen? Mit dem Brief ging Red auf und ab und wartete gespannt auf eine Antwort. Endlich war es soweit, sein Herr hatte auf seinen Brief geantwortet!

Rot erhält versiegelten Umschlag von seinem Meister.

... und in dem Brief stand einfach: "Komm zu mir, wenn du lernen willst".

Damit entschied Red, dass es Zeit war, ein Abenteuer zu beginnen.

Reise nach Master Scarlet

Rotes Reisen, um seinen Meister zu sehen, wie im folgenden Text erklärt.

Also wagte sich Red durch die Ebenen und über die Hügel in die Berge, vorbei an Wäldern und Bächen, und dort vor ihm war ein Zeichen. Das Schild zeigte auf die Burg seines Herrn, die hoch über den Bergspitzen hinter den Wolken versteckt war.

Ringsum kreisten riesige Lichtkugeln, als wollten sie diejenigen einladen, die es gewagt hatten, sie zu finden.

Mit diesem Rot drückte auf und betrat die Burg.

Master Scarlet

Red erklärt seinem Meister seine missliche Lage.

Also traf Red Master Scarlet in ihrem Schloss und erzählte ihr von all den Dingen, die er in seiner Zeit seit seiner Abreise gelernt und getan hatte. Er hatte viel gelernt und war gewachsen, aber dennoch hatte er das Gefühl, dass etwas fehlte, etwas, das nur sie ihm zeigen konnte, also fragte Red:

"Weiser Meister, macht die Summe das Reduzieren nutzlos?", Fragte Rot.

Scharlachrot leuchtendes Rot

"Ah Red. Denken Sie für einen Moment vielleicht daran, dass Sie mit redu mehr tun können, als nur zu summieren. Was wäre, wenn wir subtrahieren würden? Multiplikation? Einteilung? Was ist, wenn wir überhaupt keine Zahlen verwenden? ", Erwiderte Scarlet.

Scharlachrot zeigt Rot ein leeres Array und eine Verbindungsfunktion, drücke

„Vielleicht haben wir stattdessen ein leeres Array und drücken, um Elemente hinzuzufügen. Was könnte man damit anfangen? “, Fragte Scarlet.

Scarlet schickt Red in ein Abenteuer

„Ich kenne genau das Richtige. Sie finden drei Meister im Land von Enumerable. Lernen Sie von ihnen, welche Funktionen sie haben, und versuchen Sie herauszufinden, wie Sie reduct verwenden können, um dasselbe zu tun. “

Damit ließ Scarlett Red mit viel Nachdenken und einer Karte zurück, die ihm auf seinem Weg half.

Ins Land der Unzähligen

Roter Blick auf die Karte, Blick auf das gesamte Land von Enumerable

Damit ging er in die Ecken der Karte, um von den Meistern zu lernen, die er dort finden würde. Das Land von Enumerable war ein riesiger Ort voller Überraschungen und Kuriositäten, aber mit Hilfe seines Meisters und seiner vertrauenswürdigen Karte würde Red genau das finden, was er brauchte.

Rot mit einer Nahaufnahme der Karte mit einem Pfad zu

Der erste Meister, den Red treffen sollte, war der Meister von Map, Chartreuse.

Weiter >>

Siehe auch

5 Dinge, die Sie tun müssen, um einen qualitativ hochwertigen Blog-Beitrag zu erstellenSocial Media und der digitale BlickThe Evil Hippie Cult 011-Art Modell VertraulichWunderkind, Regelbrecher, depressives visuelles Genie: Ein Blick auf die Kunst von Pablo PicassoWie man um eine "Hexe" trauertKritik: Raúl Esparza spielt in einem unheimlich relevanten „Arturo Ui“ die Hauptrolle