Tuplitel on arvutite valdkonnas eriline tähendus, see nimi võib tunduda veidi võõras ning koodi kirjutamisel praktiliselt puuduvad rakendusstsenaariumid, kuid üllatuslikult on tuplid tihedalt seotud programmeerimisega, mõned tudengid ei pruugi teada, et teine akadeemiline nimetus "kirjetele" relatsioonilistes andmebaasides on "tuples", kirje on tuple, tabel on suhe, kirjed koosnevad tabelitest, tuplid genereerivad seoseid, see on relatsiooniliste andmebaaside põhikontseptsioon.
Tuplid on lahutamatu osa relatsioonilisest andmebaasist, kuid programmeerimises ei ole nad nii asendamatud. Mõnel programmeerimiskeelel on oma tuple-süntaks, nagu python, F#, haskell, scala jne, samas kui teised on populaarsemad, kuid neil puudub tuple-süntaks, näiteks Java, JavaScript, C++, C# jne.
Tuplid ei ole hädavajalikud programmeerimiselemendid nagu massiivid ja objektid, kuid nende kasutamine võib olla väga mugav koodi kirjutamiseks, eriti kui funktsioon peab tagastama mitu väärtust. Sellisel juhul on tavapärane praktika määratleda objekt, määrata väärtus, mida funktsioon peab tagastama, objekti atribuudiks ja seejärel määrata funktsiooni tagastusväärtuse tüüp objekti tüübiks. Või võib see funktsioon tagastada kaardi andmestruktuuri, milles konkreetne info eksisteerib. Kuid mõlemal lähenemisel on omad puudused ning esimene meetod on usaldusväärne, kuid kood on ebatavaliselt liialdatud. Nõuded ise on väga lihtsad, kui funktsioon tagastab mitu väärtust, kuid see meetod nõuab tüübi eelnevalt määratlemist, selle instantsimist, seejärel instantsi omaduste seadistamist ja lõpuks tagastamist, mis on liiga ebaefektiivne. Kuigi teine meetod on kiire, kuid mitte piisavalt turvaline, võib funktsiooni sees teada, millist tüüpi väärtust kaardil salvestatakse, kuid väljaspool funktsiooni on teada ainult, et selle funktsiooni tagastusväärtus on kaardistus, mis väärtused kaardile salvestatakse, millist tüüpi pole teada, mitme inimese arendusprojektides. See puudus on eriti ilmne, kahjuks on see praktika eelistatud lahendus mõnes dünaamiliselt tüübistatud keeles, mis on ka üks põhipõhjuseid, miks dünaamiliselt tüübistatud keelte üle kurdetakse kehva turvalisuse ja loetavuse pärast. Seetõttu on selle probleemi parim lahendus kasutada tupleid.
Keeltes, kus süntaks ise toetab tupleid, esitatakse tupleid sulgudena, näiteks (int, bool, string) on kolmekordne tüüp ja selle väärtus võib olla (1, true, "abc"). Tuleb märkida, et iga tupli tüüp on unikaalne, (int, bool), (bool, int), (string, double) on kõik binaarsed, kuid need on erinevad tuplid, kui võtta siin teatud tupli funktsiooni tagastusväärtuseks, kuigi see pole nii hea kui esimene lahendus, kasutades eelnevalt mainitud kohandatud tüüpe loetavuse ja turvalisuse osas, kuid see on palju parem kui teine lahendus mapiga – vähemalt tuplite abil saab teada, mitu väärtust funktsioon tagastab, Mis tüüpi väärtused need väärtused on, ja selle eeliseks on see, et teise skeemi kirjutamine kaardi abil on lihtne ja kiire.
Õnneks toetavad need programmeerimiskeeled nüüd üldisi ning mitte-sisseehitatud tuplite rakendamine on muutunud äärmiselt lihtsaks, kuid lõppude lõpuks on see mitte-keele sisseehitatud süntaksielement ning kindlasti mitte nii mugav kasutada kui natiivseid tupleid.
Järgnev tutvustab kolmanda osapoole Java tuplede teeki, nimega Javatuples, millel on oma ametlik koduleht ja sadu githubi tähti, mis mängib peaaegu monopoolset positsiooni Java tuplede valdkonnas.
Javatuples määratlevad tuple'i maksimaalse pikkusega 10, kuid minu arvates on 10-tuple'i elementide arv juba liiga suur ja loetavus puudub. Tuple-klassid on defineeritud järgmiselt:
Üksus<A> (1 element)
Paar<A,B> (2 elementi)
Triplet<A,B,C> (3 elementi)
Kvartett<A,B,C,D> (4 elementi)
Kvintett<A,B,C,D,E> (5 elementi)
Sekstet<A,B,C,D,E,F> (6 elementi)
Septet<A,B,C,D,E,F,G> (7 elementi)
Oktet<A,B,C,D,E,F,G,H> (8 elementi)
Ennead<A,B,C,D,E,F,G,H,I> (9 elementi)
Kümnend<A,B,C,D,E,F,G,H,I,J> (10 elementi) Need arhetüüpsed klassid on üldised klassid, seega saab nurksulgudes olevad tähed asendada suvaliste tüüpidega. Allpool on näide binaarkoodist
Järeldusi tehes kasutatakse teisi tuple tüüpe samamoodi.
Kuna Java tupleid ei toeta keel ise, näeb kood välja jaava ja vähem elegantne. Kuid kui koodi kirjutamine võib lisaks kirjutamise mugavusele parandada efektiivsust, on olulisem pöörata rohkem tähelepanu koodi enda väljendatud tähendusele, mis tähendab tuple tähenduse (funktsiooni) kasutamist koodi täiustamiseks, ning selle kirjutamise viis on tegelikult vaid teisejärguline.
Lõpuks tuleb märkida, et üldistes nurksulgudes olev tüüp ei saa olla Java põhitüüp, kui tahad kasutada põhitüüpi, peab see olema ka see põhitüüp, mis on kastis, näiteks int tüüp tuleb teisendada täisarvuks ning bool-tüüp vastab Boole'i tüübile. |