Tupleilla on erityinen merkitys tietokonealalla, nimi saattaa kuulostaa hieman oudolta, eikä koodin kirjoittamisessa käytännössä ole sovelluksia, mutta yllättävää kyllä, tuplet liittyvät läheisesti ohjelmointiin. Jotkut opiskelijat eivät ehkä tiedä, että toinen akateeminen nimi "tietueille" relaatiotietokannoissa on "tuples", tietue on tuple, taulukko on suhde, tietueet koostuvat taulukoista, tuplet luovat suhteita, tämä on relaatiotietokantojen ydinkäsite.
Tuplet ovat erottamaton osa relaatiotietokantaa, mutta ne eivät ole ohjelmoinnissa niin välttämättömiä. Joillakin ohjelmointikielillä on oma tuple-syntaksinsa, kuten python, F#, haskell, scala jne., kun taas toiset ovat suositumpia mutta niissä ei ole tuple-syntaksia, kuten Java, JavaScript, C++, C# jne.
Tuplet eivät ole välttämättömiä ohjelmointielementtejä kuten taulukot ja objektit, mutta niiden käyttö voi olla hyvin kätevää koodin kirjoittamisessa, erityisesti silloin kun funktio tarvitsee palauttaa useita arvoja. Tässä tapauksessa yleinen käytäntö on määritellä objekti, asettaa funktion palautettava arvo objektin attribuutiksi ja sitten asettaa funktion palautusarvotyyppi objektin tyypiksi. Tai voit antaa tämän funktion palauttaa karttatietorakenteen, jossa kyseinen data on olemassa. Kuitenkin molemmissa lähestymistavoissa on puutteensa, ja ensimmäinen menetelmä on luotettava, mutta koodi on poikkeuksellisen paisutettu. Vaatimukset itsessään ovat hyvin yksinkertaiset, kunhan funktio palauttaa useita arvoja, mutta tämä menetelmä vaatii tyypin määrittelyä etukäteen, sen instanssien asettamista, sitten instanssiominaisuuksien asettamista ja lopuksi palauttamista, mikä on liian tehotonta. Vaikka toinen menetelmä on nopea, mutta ei tarpeeksi turvallinen, funktion sisällä voi tietää, millainen arvo karttaan tallennetaan, mutta funktion ulkopuolella tiedetään vain, että tämän funktion palautusarvo on kartta, mitä arvoja karttaan tallennetaan, mikä tyyppi ei ole tiedossa, monihenkilön kehitysprojekteissa. Tämä haitta on erityisen ilmeinen, valitettavasti tämä käytäntö on suositeltu ratkaisu joissakin dynaamisesti tyypitetyissä kielissä, mikä on myös yksi perustavankeimmista syistä, miksi dynaamisesti tyypitetyt kielet valitetaan huonosta turvallisuudesta ja luettavuudesta. Siksi paras ratkaisu tällaiseen ongelmaan on käyttää tupleja.
Kielissä, joissa syntaksi itsessään tukee tupleja, tuplit esitetään sulkeissa, kuten (int, bool, string) on kolmoistyyppi, ja sen arvo voi olla (1, true, "abc"). On syytä huomata, että jokainen tupletyyppi on yksikäsitteinen, (int, bool), (bool, int), (string, double) ovat kaikki binäärejä, mutta ne ovat eri tupleja, jos otat tietyn tuplen tässä funktion palautusarvoksi, vaikka se ei ole yhtä hyvä kuin ensimmäinen ratkaisu, jossa käytetään aiemmin mainittuja mukautettuja tyyppejä luettavuuden ja turvallisuuden osalta, mutta se on paljon parempi kuin toinen ratkaisu, jossa käytetään mapia; ainakin tuplejen avulla voidaan tietää, kuinka monta arvoa funktio palauttaa, Minkälaisia arvoja nämä arvot ovat, ja etuna on se, että toisen skeeman koodaaminen mapin avulla on helppo ja nopea.
Onneksi nämä ohjelmointikielet tukevat nyt geneerisiä kieliä, ja ei-sisäänrakennettujen tuplien toteutus on muuttunut erittäin yksinkertaiseksi, mutta loppujen lopuksi kyseessä on ei-kielen sisäänrakennettu syntaksielementti, eikä se ole yhtä kätevä käyttää kuin natiivituplit.
Seuraavassa esitellään kolmannen osapuolen Java-tuples-kirjasto, nimeltään Javatuples, jolla on oma virallinen kotisivu ja satoja github-tähtiä, ja joka on lähes monopoliasemassa Java-tuplejen alalla.
Javatuplet määrittelevät tuplen, jonka enimmäispituus on 10, mutta mielestäni 10-tuplen alkioiden määrä on jo liikaa, eikä siinä käytännössä ole luettavuutta. Tuple-luokat määritellään seuraavasti:
Yksikkö<A> (1 elementti)
Pari<A,B> (2 elementtiä)
Kolmios<A,B,C> (3 elementtiä)
Kvartetto<A,B,C,D> (4 osaa)
Kvintetto<A,B,C,D,E> (5 elementtiä)
Sekstet<A,B,C,D,E,F> (6 elementtiä)
Septet<A,B,C,D,E,F,G> (7 elementtiä)
Oktetti<A,B,C,D,E,F,G,H> (8 elementtiä)
Ennead<A,B,C,D,E,F,G,H,I> (9 elementtiä)
Vuosikymmen<A,B,C,D,E,F,G,H,I,J> (10 alkiota) Nämä arkkityyppiset luokat ovat geneerisiä luokkia, joten kulmasulkeissa olevat kirjaimet voidaan korvata mielivaltaisilla tyypeillä. Alla on esimerkki binäärikoodista
Johtopäätöksiä tekemällä muut tuple-tyypit toimivat samalla tavalla.
Koska Javan tupleja ei tue itse kieli, koodi näyttää jaavalaiselta ja vähemmän elegantilta. Kuitenkin, kun koodin kirjoittaminen voi parantaa tehokkuutta, on tärkeämpää kiinnittää enemmän huomiota koodin itsensä ilmaisemaan merkitykseen, eli käyttää tuplen merkitystä (funktiota) koodin parantamiseen, ja sen kirjoittaminen on itse asiassa vain toissijaista.
Lopuksi on huomattava, että yleisissä kulmasulkeissa oleva tyyppi ei voi olla Javan perustyyppi; jos haluat käyttää perustyyppiä, sen täytyy myös olla se perustyyppi, joka on ruutuissa, esimerkiksi int-tyyppi täytyy muuntaa kokonaisluvuiksi, ja bool-tyyppi vastaa Boolean-tyyppiä. |