Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 28269|Odpowiedź: 1

[Źródło] Zastosowanie krotk w Javie

[Skopiuj link]
Opublikowano 31.08.2021 11:22:41 | | | |
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.




Poprzedni:POI CellStyle ustawia kolor tła komórki
Następny:.NET/C# Poradnik MailKit dotyczący wysyłania poczty [z kodem źródłowym]
 Ziemianin| Opublikowano 15.09.2021 10:55:08 |
Musisz użyć maven, aby wprowadzić zależności takie jak ta:


javatuple pozwalają nam tworzyć do dziesięciu wartości zwrotnych


Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com