Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 28269|Antwort: 1

[Quelle] Die Verwendung von Tupeln in Java

[Link kopieren]
Veröffentlicht am 31.08.2021 11:22:41 | | | |
Tupel haben eine besondere Bedeutung im Bereich der Computer, dieser Name mag etwas fremd klingen, und es gibt im Grunde keine Anwendungsszenarien beim Schreiben von Code. Überraschenderweise sind Tupel jedoch eng mit Programmierung verwandt. Einige Studierende wissen vielleicht nicht, dass ein anderer akademischer Begriff für "Datensätze" in relationalen Datenbanken "Tupel" ist, ein Datensatz ein Tupel ist, eine Tabelle eine Beziehung, Datensätze bestehen aus Tabellen, Tupel erzeugen Beziehungen – das ist das Kernkonzept relationaler Datenbanken.

Tupel sind ein untrennbarer Bestandteil einer relationalen Datenbank, aber sie sind in der Programmierung nicht so unverzichtbar. Einige Programmiersprachen haben ihre eigene Tupelsyntax, wie Python, F#, Haskell, Scala usw., während andere beliebter sind, aber keine Tupelsyntax haben, wie Java, JavaScript, C++, C# usw.

Tupel sind keine unverzichtbaren Programmierelemente wie Arrays und Objekte, aber ihre Verwendung kann sehr praktisch zum Schreiben von Code sein, besonders wenn eine Funktion mehrere Werte zurückgeben muss. In diesem Fall ist es üblich, ein Objekt zu definieren, den Wert, den die Funktion zurückgeben muss, als Attribut des Objekts festzulegen und dann den Rückgabewerttyp der Funktion auf den Typ des Objekts zu setzen. Oder du lässt diese Funktion eine Map-Datenstruktur zurückgeben, in der die spezifischen Daten existieren. Beide Ansätze haben jedoch ihre Schwächen, und die erste Methode ist zuverlässig, aber der Code ist ungewöhnlich aufgebläht. Die Anforderungen selbst sind sehr einfach, solange die Funktion mehrere Werte zurückgibt, aber diese Methode erfordert, einen Typ im Voraus zu definieren, ihn dann zu instanziieren, dann die Instanzeigenschaften zu setzen und schließlich zurückzugeben, was zu ineffizient ist. Obwohl die zweite Methode schnell, aber nicht sicher genug ist, kann innerhalb der Funktion wissen, welcher Wert in der Abbildung gespeichert ist, aber außerhalb der Funktion nur wissen, dass der Rückgabewert dieser Funktion eine Abbildung ist, also welche Werte in der Abbildung gespeichert sind und welcher Typ nicht bekannt ist; dieser Nachteil ist besonders offensichtlich, leider ist diese Praxis in einigen dynamisch typisierten Sprachen die bevorzugte Lösung, was auch einer der grundlegenden Gründe ist, warum dynamisch typisierte Sprachen wegen schlechter Sicherheit und Lesbarkeit kritisiert werden. Daher ist die beste Lösung für diese Art von Problem die Verwendung von Tupeln.

In Sprachen, in denen die Syntax selbst Tupel unterstützt, werden Tupel durch Klammern dargestellt, wie zum Beispiel (int, bool, string) ein Triple-Typ, und sein Wert kann (1, wahr, "abc") sein. Es sollte beachtet werden, dass jeder Tupeltyp eindeutig ist (int, bool), (bool, int), (String, Double) sind alles Binären, aber es sind unterschiedliche Tupel, wenn man hier ein bestimmtes Tupel als Rückgabewert der Funktion nimmt, obwohl es in Bezug auf Lesbarkeit und Sicherheit nicht so gut ist wie die erste Lösung mit benutzerdefinierten Typen, was Lesbarkeit und Sicherheit betrifft, aber sie ist viel besser als die zweite Lösung mit Map, zumindest kann man mit Tupeln wissen, wie viele Werte die Funktion zurückgibt, Welche Art von Wert sind diese Werte? Es hat den Vorteil, dass es einfach und schnell ist, ein zweites Schema mit Map zu programmieren.

Glücklicherweise unterstützen diese Programmiersprachen heute Generika, und die Implementierung von nicht eingebauten Tupeln ist äußerst einfach geworden, aber schließlich handelt es sich um ein nicht-sprachliches eingebautes Syntaxelement und definitiv nicht so praktisch zu verwenden wie native Tupel.

Im Folgenden wird eine Drittanbieter-Java-Tupel-Bibliothek namens Javatuples eingeführt, mit eigener offizieller Homepage und Hunderten von Github-Stars, die im Bereich der Java-Tupel fast eine Monopolstellung einnimmt.

Javatuples definieren ein Tupel mit maximaler Länge von 10, aber ich denke, die Anzahl der Elemente in einem 10-Tupel ist bereits zu hoch, und es gibt praktisch keine Lesbarkeit. Tuple-Klassen sind wie folgt definiert:

Einheit<A> (1 Element)

Paar<A,B> (2 Elemente)

Triplet<A,B,C> (3 Elemente)

Quartett<A,B,C,D> (4 Elemente)

Quintett<A,B,C,D,E> (5 Elemente)

Sextett<A,B,C,D,E,F> (6 Elemente)

Septett<A,B,C,D,E,F,G> (7 Elemente)

Oktett<A,B,C,D,E,F,G,H> (8 Elemente)

Ennead<A,B,C,D,E,F,G,H,I> (9 Elemente)

Dekade<A,B,C,D,E,F,G,H,I,J> (10 Elemente)

Diese archetypischen Klassen sind generische Klassen, daher können die Buchstaben in Winkelklammern durch beliebige Typen ersetzt werden. Nachfolgend ein Beispiel für einen Binärcode





Durch das ziehen von Schlussfolgerungen werden die übrigen Tupeltypen auf die gleiche Weise verwendet.

Da Javas Tupel nicht von der Sprache selbst unterstützt werden, wirkt der Code javanisch und weniger elegant. Beim Schreiben von Code kann das Schreiben jedoch neben der Bequemlichkeit des Schreibens die Effizienz verbessern, sondern auch wichtiger, mehr auf die vom Code ausgedrückte Bedeutung zu achten, nämlich die Bedeutung (Funktion) des Tupels selbst zu nutzen, um den Code zu verbessern, und wie man ihn schreibt, ist tatsächlich nur sekundär.

Abschließend sollte beachtet werden, dass der Typ in den generischen Winkelklammern nicht der Grundtyp von Java sein kann; wenn man den Grundtyp verwenden will, muss er auch der grundlegende Typ sein, der geboxt wurde, zum Beispiel muss der Int-Typ in Integer umgewandelt werden und der Bool-Typ dem Boolesche Typ entspricht.




Vorhergehend:POI CellStyle setzt die Hintergrundfarbe der Zelle
Nächster:.NET/C# MailKit-Anleitung zum Versenden von E-Mails [mit Quellcode]
 Vermieter| Veröffentlicht am 15.09.2021 10:55:08 |
Du musst Maven verwenden, um Abhängigkeiten wie diese einzuführen:


Javatuples ermöglichen es uns, bis zu zehn Rückgabewerte zu erstellen


Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com