Tuples turi ypatingą reikšmę kompiuterių srityje, šis pavadinimas gali skambėti šiek tiek nepažįstamai, o rašant kodą iš esmės nėra taikymo scenarijų, tačiau, keista, tuples yra glaudžiai susiję su programavimu, kai kurie studentai gali nežinoti, kad kitas akademinis "įrašų" pavadinimas reliacinėse duomenų bazėse yra "tuples", įrašas yra tuple, lentelė yra ryšys, įrašai susideda iš lentelių, tuples generuoja ryšius, tai yra pagrindinė reliacinių duomenų bazių koncepcija.
Tuples yra neatsiejama reliacinės duomenų bazės dalis, tačiau jie nėra tokie būtini programuojant. Kai kurios programavimo kalbos turi savo tuple sintaksę, pvz., python, F#, haskell, scala ir kt., o kitos yra populiaresnės, bet neturi tuple sintaksės, pvz., Java, JavaScript, C++, C# ir kt.
Tuples nėra nepakeičiami programavimo elementai, tokie kaip masyvai ir objektai, tačiau jų naudojimas gali būti labai patogus rašant kodą, ypač kai funkcijai reikia grąžinti kelias reikšmes. Šiuo atveju įprasta praktika yra apibrėžti objektą, nustatyti reikšmę, kurią funkcija turi grąžinti kaip objekto atributą, o tada nustatyti funkcijos grąžinamos reikšmės tipą į objekto tipą. Arba galite nustatyti, kad ši funkcija grąžintų žemėlapio duomenų struktūrą, kurioje yra konkretūs duomenys. Tačiau abu metodai turi savo trūkumų, o pirmasis metodas yra patikimas, tačiau kodas yra neįprastai išpūstas. Patys reikalavimai yra labai paprasti, jei funkcija grąžina kelias reikšmes, tačiau šis metodas reikalauja iš anksto apibrėžti tipą, tada jį instanciuoti, tada nustatyti egzemplioriaus ypatybes ir galiausiai grąžinti, o tai yra per daug neefektyvu. Nors antrasis metodas yra greitas, bet nepakankamai saugus, funkcijos viduje gali žinoti, kokia reikšmė saugoma žemėlapyje, bet už funkcijos ribų, tik žinokite, kad šios funkcijos grąžinama vertė yra žemėlapis, kaip kokios reikšmės saugomos žemėlapyje, kokio tipo nežinoma, kelių asmenų kūrimo projektuose Šis trūkumas yra ypač akivaizdus, deja, ši praktika yra tinkamiausias sprendimas kai kuriose dinamiškai tipuojamose kalbose, o tai taip pat yra viena iš pagrindinių priežasčių, kodėl dinamiškai įvestos kalbos skundžiamasi dėl prasto saugumo ir skaitomumo. Todėl geriausias tokio tipo problemų sprendimas yra naudoti tuples.
Kalbose, kuriose pati sintaksė palaiko tuples, tuples vaizduojami skliausteliuose, pvz., (int, bool, string) yra trigubo tipo, o jo reikšmė gali būti (1, true, "abc"). Reikėtų pažymėti, kad kiekvienas tupel tipas yra unikalus, (int, bool), (bool, int), (eilutė, dvigubas) yra visi dvejetainiai, tačiau jie yra skirtingi tupeliai, jei čia paimsite tam tikrą tupel kaip grąžinamąją funkcijos vertę, nors jis nėra toks geras kaip pirmasis sprendimas, naudojant anksčiau minėtus pasirinktinius tipus skaitomumo ir saugumo požiūriu, tačiau jis yra daug geresnis nei antrasis sprendimas naudojant žemėlapį, bent jau naudojant tuples gali žinoti, kiek reikšmių funkcija grąžins, Kokio tipo vertės yra šios reikšmės, ir ji turi pranašumą, kad yra paprasta ir greita koduoti antrą schemą naudojant žemėlapį.
Laimei, šios programavimo kalbos dabar palaiko generinius žodžius, o neįmontuotų tuplių įgyvendinimas tapo labai paprastas, tačiau juk tai yra ne kalbos integruotas sintaksės elementas, ir jį tikrai nėra taip patogu naudoti kaip vietinius tuples.
Toliau pristatoma trečiosios šalies Java tuples biblioteka, vadinama Javatuples, su savo oficialiu pagrindiniu puslapiu ir šimtais github žvaigždžių, kuri beveik vaidina monopolinę padėtį Java tuples srityje.
Javatuples apibrėžia tupelį, kurio maksimalus ilgis yra 10, bet manau, kad elementų skaičius 10 tupel jau yra per didelis, ir iš esmės nėra skaitomumo. Tuple klasės apibrėžiamos taip:
Vienetas<A> (1 elementas)
Pora<A,B> (2 elementai)
Tripletas<A,B,C> (3 elementai)
Kvartetas<A,B,C,D> (4 elementai)
Kvintetas<A,B,C,D,E> (5 elementai)
Sekstetas<A,B,C,D,E,F> (6 elementai)
Septetas<A,B,C,D,E,F,G> (7 elementai)
Oktetas<A,B,C,D,E,F,G,H> (8 elementai)
Ennead<A,B,C,D,E,F,G,H,I> (9 elementai)
Dešimtmetis<A,B,C,D,E,F,G,H,I,J> (10 elementų) Šios archetipinės klasės yra bendrosios klasės, todėl raides kampiniuose skliaustuose galima pakeisti savavališkais tipais. Žemiau pateikiamas dvejetainio kodo pavyzdys
Darant išvadas, likę tuplių tipai naudojami taip pat.
Kadangi Java tuples nepalaiko pati kalba, kodas atrodo javanietiškas ir mažiau elegantiškas. Tačiau rašant kodą, be to, kad rašymo patogumas gali pagerinti efektyvumą, svarbiau daugiau dėmesio skirti paties kodo išreikštai reikšmei, tai yra naudoti paties tupelio reikšmę (funkciją) kodui patobulinti, o kaip jį parašyti iš tikrųjų yra tik antraeilis.
Galiausiai, reikia pažymėti, kad tipas bendruosiuose kampiniuose skliausteliuose negali būti pagrindinis Java tipas, jei norite naudoti pagrindinį tipą, jis taip pat turi būti pagrindinis tipas, kuris buvo dėžutėje, pvz., int tipas turi būti konvertuotas į sveikąjį skaičių, o bool tipas atitinka Bulio tipą. |