Кортежи имеют особое значение в области компьютеров, это название может показаться немного незнакомым, и практически нет сценариев применения в написании кода, однако, что удивительно, кортежи тесно связаны с программированием, некоторые студенты могут не знать, что другое академическое название «записей» в реляционных базах данных — «кортежи», запись — это кортеж, таблица — это отношение, записи состоят из таблиц, кортежи генерируют отношения — это основная концепция реляционных баз данных.
Кортежи — неотъемлемая часть реляционной базы данных, но в программировании они не столь незаменимы. Некоторые языки программирования имеют собственный синтаксис кортежей, такие как Python, F#, haskell, scala и др., в то время как другие более популярны, но не имеют синтаксиса кортежей, например Java, JavaScript, C++, C# и др.
Кортежи не являются незаменимыми элементами программирования, такими как массивы и объекты, но их использование очень удобно для написания кода, особенно когда функции нужно возвращать несколько значений. В этом случае обычно задают объект, устанавливают значение функции, которое должна вернуть, как атрибут объекта, а затем задают тип возвращаемого значения функции по типу объекта. Или эта функция может возвращать карту структуры данных, в которой существуют конкретные данные. Однако у обоих подходов есть свои недостатки, и первый метод надёжен, но код необычайно раздутый. Сами требования очень просты, при условии, что функция возвращает несколько значений, но этот метод требует предварительного определения типа, затем его инстанции, затем установки свойств экземпляра и, наконец, возврата, что слишком неэффективно. Хотя второй метод быстрый, но недостаточно безопасен, внутри функции может знать, какое значение хранится в карте, а вне функции — только только, что возвращаемое значение этой функции — это отображение, а какие значения хранятся в карте, какой тип — неизвестно в многоперсональных проектах разработки. Этот недостаток особенно очевиден, к сожалению, эта практика предпочитается в некоторых динамически типизированных языках, что также является одной из основных причин, почему динамически типизированные языки вызывают жалобы на низкую безопасность и читаемость. Поэтому лучшим решением такой задачи является использование кортежей.
В языках, где сам синтаксис поддерживает кортежи, кортежи обозначается скобками, например, (int, bool, string) — это тройной тип, и их значение может быть (1, true, «abc»). Следует отметить, что каждый тип кортежа уникален, (int, bool), (bool, int), (string, double) — это все двоичные кортежи, но это разные кортежи, если взять определённый кортеж в качестве возвращаемого значения функции, хотя оно не так хорошо, как первое решение с использованием пользовательских типов, упомянутых ранее, с точки зрения читаемости и безопасности, но гораздо лучше, чем второе решение с отображением, по крайней мере с использованием кортежей можно знать, сколько значений вернёт функция, Какого типа значения представляют собой эти значения, и есть преимущество в том, что вторая схема с помощью карты просто и быстро?
К счастью, эти языки программирования теперь поддерживают универсальные кортежи, и реализация невстроенных кортежей стала крайне простой, но в конце концов, это не встроенный синтаксический элемент, и он определённо не так удобен в использовании, как нативные кортежи.
Далее представлена сторонняя библиотека 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 соответствует булевому типу. |