Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 28269|Отговор: 1

[Източник] Използването на кортежи в Java

[Копирай линк]
Публикувано в 31.08.2021 г. 11:22:41 ч. | | | |
Кортежите имат специално значение в областта на компютрите, това име може да звучи малко непознато и практически няма приложни сценарии при писането на код, но изненадващо, трейпълите са тясно свързани с програмирането, някои студенти може да не знаят, че друго академично име за "записи" в релационни бази данни е "tuples", запис е кортеж, таблица е връзка, записите се съставят от таблици, кортежите генерират връзки – това е основната концепция на релационни бази данни.

Кортежите са неразделна част от релационната база данни, но не са толкова незаменими в програмирането. Някои програмни езици имат собствен синтаксис на кортежи, като python, F#, haskell, scala и др., докато други са по-популярни, но нямат синтаксис на кортежи, като Java, JavaScript, C++, C# и др.

Кортежите не са незаменими програмни елементи като масиви и обекти, но тяхната употреба може да бъде много удобна за писане на код, особено когато една функция трябва да връща множество стойности. В този случай обичайната практика е да се дефинира обект, да се зададе стойността, която функцията трябва да върне, като атрибут на обекта, и след това да се задава типът на връщащата стойност на функцията според типа на обекта. Или можете да използвате тази функция да връща карта на структура от данни, в която конкретните данни съществуват. Въпреки това, и двата подхода имат своите недостатъци, първият метод е надежден, но кодът е необичайно раздут. Самите изисквания са много прости, стига функцията да връща множество стойности, но този метод изисква предварително дефиниране на тип, след това неговото инстанциране, задаване на свойствата на екземпляра и накрая връщане, което е твърде неефективно. Въпреки че вторият метод е бърз, но не достатъчно сигурен, вътре във функцията може да знае какъв тип стойност се съхранява в картата, но извън функцията може да знае само, че връщаната стойност на тази функция е карта, а кои стойности се съхраняват в картата, какъв тип не е известно, в многочленни проекти за разработка. Този недостатък е особено очевиден, за съжаление тази практика е предпочитаното решение в някои динамично типизирани езици, което е и една от основните причини динамично типизираните езици да се оплакват за ниска сигурност и четивност. Затова най-доброто решение на този тип проблем е използването на кортежи.

В езици, където самият синтаксис поддържа кортежи, кортежите се представят в скоби, като например (int, bool, string) е троен тип, а стойността им може да бъде (1, вярно, "abc"). Трябва да се отбележи, че всеки тип кортеж е уникален (int, bool), (bool, int), (string, double) са всички двоични файлове, но са различни кортежи, ако вземете определен кортеж тук като връщана стойност на функцията, макар че не е толкова добро като първото решение с използване на персонализирани типове, споменати по-рано по отношение на четимост и сигурност, но е много по-добро от второто решение с map, поне с кортежи могат да знаят колко стойности ще върне функцията, Какъв тип стойност представляват тези стойности и има предимството, че е лесно и бързо да се кодира втора схема чрез карта?

За щастие, тези програмни езици вече поддържат генерични езици, а имплементацията на невградени кортежи стана изключително проста, но все пак това е не-езиков вграден синтактичен елемент и определено не е толкова удобен за използване, колкото нативните кортежи.

Следва въвеждане на библиотека с Java кортежи на трета страна, наречена Javatuples, със собствена официална страница и стотици github звезди, която почти заема монополна позиция в областта на Java кортежите.

Javatuples дефинират кортеж с максимална дължина 10, но мисля, че броят на елементите в 10-торка вече е твърде голям и практически няма никаква четливост. Класовете на кортежите се дефинират по следния начин:

<A> Единица (1 елемент)

Двойка<A,B> (2 елемента)

Тройка<A,B,C> (3 елемента)

Квартет<A,B,C,D> (4 елемента)

Квинтет<A,B,C,D,E> (5 елемента)

Секстет<A,B,C,D,E,F> (6 елемента)

Септет<A,B,C,D,E,F,G> (7 елемента)

Октет<A,B,C,D,E,F,G,H> (8 елемента)

Енеад<A,B,C,D,E,F,G,H,I> (9 елемента)

Декада<A,B,C,D,E,F,G,H,I,J> (10 елемента)

Тези архетипни класове са общи класове, така че буквите в ъглови скоби могат да бъдат заменени с произволни типове. По-долу е даден пример за двоичен код





Чрез правене на изводи останалите типове кортежи се използват по същия начин.

Тъй като кортежите на Java не се поддържат от самия език, кодът изглежда явански и по-малко елегантен. Въпреки това, когато писането на код, освен удобството на писането, което може да подобри ефективността, е по-важно да се обръща повече внимание на значението, изразено от самия код, което означава да се използва значението (функцията) на самия кортеж, за да се подобри кодът, а как да се пише всъщност е само второстепенно.

Накрая, трябва да се отбележи, че типът в общите ъглови скоби не може да бъде базовият тип на Java, ако искате да използвате базовия тип, той трябва да е и базовият тип, който е бил в кутия, например int тип трябва да се преобразува в цяло число, а bool type съответства на булевия тип.




Предишен:POI CellStyle задава цвета на фона на клетката
Следващ:.NET/C# MailKit урок за изпращане на поща [с изходен код]
 Хазяин| Публикувано в 15.09.2021 г. 10:55:08 ч. |
Трябва да използвате Maven, за да въведете зависимости като тези:


javatuples ни позволяват да създаваме до десет връщани стойности


Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com