Krotki mają szczególne znaczenie w dziedzinie komputerów, ta nazwa może brzmieć nieco nieznanie, a w pisaniu kodu praktycznie nie ma scenariuszy zastosowania, jednak zaskakująco, krotki są ściśle powiązane z programowaniem. Niektórzy studenci mogą nie wiedzieć, że inną akademicką nazwą "rekordów" w relacyjnych bazach danych jest "krotki", rekord to krotka, tabela to relacja, rekordy składają się z tabel, krotki generują relacje – to jest podstawowa koncepcja relacyjnych baz danych.
Krotki są nierozerwalną częścią relacyjnej bazy danych, ale nie są tak niezbędne w programowaniu. Niektóre języki programowania mają własną składnię krotk, takie jak python, F#, haskell, scala itd., podczas gdy inne są bardziej popularne, ale nie mają składni krotk, jak Java, JavaScript, C++, C# itd.
Krotki nie są niezbędnymi elementami programowania, takimi jak tablice czy obiekty, ale ich użycie może być bardzo wygodne przy pisaniu kodu, zwłaszcza gdy funkcja musi zwracać wiele wartości. W takim przypadku powszechną praktyką jest zdefiniowanie obiektu, ustawienie wartości, którą funkcja musi zwracać jako atrybut obiektu, a następnie ustawienie typu wartości zwracanej funkcji na typ obiektu. Albo możesz sprawić, by ta funkcja zwracała strukturę danych map, w której dane się znajdują. Jednak oba podejścia mają swoje wady, a pierwsza metoda jest niezawodna, ale kod jest wyjątkowo rozdmuchany. Wymagania są bardzo proste, o ile funkcja zwraca wiele wartości, ale ta metoda wymaga wcześniejszego zdefiniowania typu, następnie jego instancji, ustawienia właściwości instancji i na końcu zwracania, co jest zbyt nieefektywne. Chociaż druga metoda jest szybka, ale nie wystarczająco bezpieczna, wewnątrz funkcji może wiedzieć, jaka wartość jest przechowywana na mapie, ale poza funkcją jedynie wiedzieć, że wartość zwrotna tej funkcji jest mapą, a jakie wartości są zapisane na mapie, a jaki typ nie jest znany, w projektach wieloosobowych jest ta wada szczególnie widoczna, niestety ta praktyka jest preferowanym rozwiązaniem w niektórych językach typowanych dynamicznie, co jest także jednym z podstawowych powodów, dla których języki typowane dynamicznie są krytykowane za słabe bezpieczeństwo i czytelność. Dlatego najlepszym rozwiązaniem tego typu problemu jest użycie krotk.
W językach, gdzie składnia sama wspiera krotki, krotki są reprezentowane w nawiasach, takich jak (int, bool, string) jest typem potrójnym, a jego wartość może wynosić (1, true, "abc"). Należy zauważyć, że każdy typ krotki jest unikalny, (int, bool), (bool, int), (string, double) to wszystkie krotki binarne, ale są to różne krotki, jeśli weźmiemy określoną krotkę jako wartość zwrotną funkcji, choć nie jest to tak dobre rozwiązanie jak pierwsze rozwiązanie z użyciem wcześniej niestandardowych typów pod względem czytelności i bezpieczeństwa, ale jest znacznie lepsze niż drugie rozwiązanie z użyciem map, przynajmniej dzięki kroczce można wiedzieć, ile wartości funkcja zwróci, Jakiego typu wartości to są te wartości, a zaletą jest proste i szybkie kodowanie drugiego schematu za pomocą map.
Na szczęście te języki programowania obsługują teraz generyki, a implementacja niewbudowanych krotek stała się niezwykle prosta, ale w końcu jest to element składni niezwiązany z językiem i zdecydowanie nie jest tak wygodny w użyciu jak natywne krotki.
Poniżej przedstawiono zewnętrzną bibliotekę tuple Java, zwaną Javatuples, z własną oficjalną stroną główną i setkami gwiazdek na githubie, która niemal odgrywa monopol w dziedzinie tuple'ów Java.
Javatuple definiują krotkę o maksymalnej długości 10, ale uważam, że liczba elementów w 10-krotki jest już zbyt duża i praktycznie nie ma czytelności. Klasy krotek definiuje się następująco:
Jednostka<A> (1 żywioł)
Para <A,B> (2 elementy)
Trylet<A,B,C> (3 pierwiastki)
Kwartet<A,B,C,D> (4 elementy)
Kwintet<A,B,C,D,E> (5 elementów)
Sekstet<A,B,C,D,E,F> (6 elementów)
Septet<A,B,C,D,E,F,G> (7 elementów)
Oktet<A,B,C,D,E,F,G,H> (8 elementów)
Ennead<A,B,C,D,E,F,G,H,I> (9 elementów)
Dekada<A,B,C,D,E,F,G,H,I,J> (10 elementów) Te klasy archetypowe są klasami ogólnymi, więc litery w nawiasach kątnych można zastąpić dowolnymi typami. Poniżej znajduje się przykład kodu binarnego
Poprzez wyciąganie wniosków, pozostałe typy krotek są używane w ten sam sposób.
Ponieważ krotki Java nie są obsługiwane przez sam język, kod wygląda na jawajski, mniej elegancki. Jednak gdy pisanie kodu, oprócz wygody pisania, może zwiększyć efektywność, ważniejsze jest zwracanie większej uwagi na znaczenie wyrażane przez sam kod, czyli wykorzystanie znaczenia (funkcji) samej krotki do ulepszenia kodu, a sposób jego pisania jest w rzeczywistości tylko drugorzędny.
Na koniec należy zauważyć, że typ w ogólnych nawiasach kątowych nie może być typem podstawowym Javy; jeśli chcesz użyć typu podstawowego, musi to być również typ podstawowy, który został zablokowany, na przykład typ int musi zostać przekonwertowany na liczbę całkowitą, a typ bool odpowiada typowi Boole'a. |