N-tice majú v oblasti počítačov špeciálny význam, tento názov môže znieť trochu neznáme a v písaní kódu v podstate neexistujú aplikačné scenáre, avšak prekvapivo sú n-tice úzko späté s programovaním, niektorí študenti nemusia vedieť, že ďalším akademickým názvom pre "záznamy" v relačných databázach je "n-tica", záznam je n-tica, tabuľka je vzťah, záznamy sú zložené z tabuliek, n-tice generujú vzťahy, toto je základný koncept relačných databáz.
N-tice sú neoddeliteľnou súčasťou relačnej databázy, no v programovaní nie sú také nevyhnutné. Niektoré programovacie jazyky majú vlastnú syntax n-tic, ako python, F#, haskell, scala a pod., zatiaľ čo iné sú populárnejšie, ale nemajú syntax n-tic, napríklad Java, JavaScript, C++, C# a podobne.
N-tice nie sú nevyhnutné programovacie prvky ako polia a objekty, ale ich použitie môže byť veľmi pohodlné pri písaní kódu, najmä keď funkcia potrebuje vracať viacero hodnôt. V tomto prípade je bežnou praxou definovať objekt, nastaviť hodnotu, ktorú má funkcia vrátiť ako atribút objektu, a potom nastaviť typ vrátenej hodnoty funkcie na typ objektu. Alebo môže táto funkcia vrátiť mapovú dátovú štruktúru, v ktorej sa konkrétne dáta vyskytujú. Oba prístupy však majú svoje chyby a prvá metóda je spoľahlivá, no kód je nezvyčajne nafúknutý. Požiadavky sú veľmi jednoduché, pokiaľ funkcia vráti viacero hodnôt, ale táto metóda vyžaduje vopred definovať typ, potom ho inštancionovať, nastaviť vlastnosti inštancie a nakoniec vrátiť, čo je príliš neefektívne. Hoci druhá metóda je rýchla, ale nie dostatočne bezpečná, vo vnútri funkcie môže vedieť, aká hodnota je uložená v mape, ale mimo funkcie môže vedieť len, že návratová hodnota tejto funkcie je mapa, čo sa týka toho, aké hodnoty sú uložené v mape a aký typ nie je známe, v projektoch s viacerými hráčmi je táto nevýhoda obzvlášť zrejmá, žiaľ, táto prax je preferovaným riešením v niektorých dynamicky typovaných jazykoch, čo je tiež jeden zo základných dôvodov, prečo sa dynamicky typované jazyky sťažujú na zlú bezpečnosť a čitateľnosť. Preto je najlepším riešením tohto typu problému použiť n-tice.
V jazykoch, kde syntax sama podporuje n-tice, sú n-tice reprezentované zátvorkami, ako napríklad (int, bool, string) je trojitý typ a jeho hodnota môže byť (1, true, "abc"). Treba poznamenať, že každý typ n-tice je jedinečný, (int, bool), (bool, int), (string, double) sú všetky binárne funkcie, ale sú to rôzne n-tice, ak vezmete určitú n-ticu ako návratovú hodnotu funkcie, hoci nie je také dobré ako prvé riešenie využívajúce vlastné typy spomenuté vyššie z hľadiska čitateľnosti a bezpečnosti, ale je oveľa lepšie ako druhé riešenie využívajúce mapovanie, aspoň pomocou n-tic môžete vedieť, koľko hodnôt funkcia vráti, Aký typ hodnoty sú tieto hodnoty, a výhodou je, že je jednoduché a rýchle naprogramovať druhý systém pomocou mapy.
Našťastie tieto programovacie jazyky teraz podporujú generické jazyky a implementácia ne-vstavaných n-tic sa stala mimoriadne jednoduchou, ale napokon ide o zabudovaný syntaktický prvok mimo jazyka a určite nie je taký pohodlný na použitie ako natívne n-tice.
Nasleduje knižnica tretej strany Java n-tic, nazvaná Javatuples, s vlastnou oficiálnou domovskou stránkou a stovkami github hviezd, ktorá takmer zohráva monopolnú pozíciu v oblasti Java n-tic.
Javatuple definujú ticu s maximálnou dĺžkou 10, ale myslím si, že počet prvkov v 10-tici je už príliš veľký a v podstate nie je čitateľná. Triedy n-tic sú definované nasledovne:
Jednotka<A> (1 element)
Pár<A,B> (2 prvky)
Triplet<A,B,C> (3 prvky)
Kvarteto<A,B,C,D> (4 prvky)
Kvintet<A,B,C,D,E> (5 prvkov)
Sextet<A,B,C,D,E,F> (6 prvkov)
Septet<A,B,C,D,E,F,G> (7 prvkov)
Oktet<A,B,C,D,E,F,G,H> (8 prvkov)
Ennead<A,B,C,D,E,F,G,H,I> (9 prvkov)
Decade<A,B,C,D,E,F,G,H,I,J> (10 prvkov) Tieto archetypálne triedy sú generické triedy, takže písmená v zátvorkách je možné nahradiť ľubovoľnými typmi. Nižšie je príklad binárneho kódu
Vyvodzovaním záverov sa ostatné typy n-tic používajú rovnakým spôsobom.
Keďže n-ticy v Jave nie sú podporované samotným jazykom, kód vyzerá javánsky a menej elegantne. Avšak pri písaní kódu, okrem pohodlia písania, môže zvýšiť efektivitu, je dôležitejšie venovať väčšiu pozornosť významu vyjadrenému samotným kódom, teda použiť význam (funkciu) samotnej n-tice na vylepšenie kódu, a spôsob, akým ho napísať, je v skutočnosti až druhoradý.
Nakoniec treba poznamenať, že typ v generických hranatých zátvorkách nemôže byť základným typom Javy, ak chcete použiť základný typ, musí to byť aj základný typ, ktorý bol zablokovaný, napríklad int typ musí byť prevedený na celé číslo a bool typ zodpovedá Booleovskému typu. |