Кортежі мають особливе значення у сфері комп'ютерів, ця назва може звучати трохи незнайомо, і практично немає прикладних сценаріїв у написанні коду, проте, дивно, кортежі тісно пов'язані з програмуванням, деякі студенти можуть не знати, що інша академічна назва «записів» у реляційних базах даних — «tuples», запис — це кортеж, таблиця — це відношення, записи складаються з таблиць, кортежі генерують відношення — це основна концепція реляційних баз даних.
Кортежі є невід'ємною частиною реляційної бази даних, але вони не такі вже й необхідні в програмуванні. Деякі мови програмування мають власний синтаксис кортежів, такі як python, F#, haskell, scala тощо, тоді як інші більш популярні, але не мають синтаксису кортежів, наприклад Java, JavaScript, C++, C# тощо.
Кортежі не є незамінними елементами програмування, такими як масиви та об'єкти, але їх використання дуже зручне для написання коду, особливо коли функція має повертати кілька значень. У цьому випадку зазвичай визначається об'єкт, встановлено значення, яке функція має повернути як атрибут об'єкта, а потім тип поверненого значення функції відповідав типу об'єкта. Або ж ця функція повертає структуру даних карти, в якій існують конкретні дані. Однак обидва підходи мають свої недоліки, і перший метод надійний, але код незвично роздутий. Самі вимоги дуже прості, якщо функція повертає кілька значень, але цей метод вимагає заздалегідь визначення типу, потім його інстанції, встановлення властивостей екземпляра і, нарешті, повернення, що є надто неефективним. Хоча другий метод швидкий, але недостатньо безпечний, всередині функції може знати, який тип значення зберігається на карті, а поза функцією — знати лише, що повернене значення цієї функції є відображенням; щодо того, які значення зберігаються на карті, який тип — невідомо у багатоосібних проєктах розробки. Цей недолік особливо очевидний, на жаль, ця практика є переважним рішенням у деяких динамічно типізованих мовах, що також є однією з фундаментальних причин, чому динамічно типізовані мови скаржаться на низьку безпеку та читабельність. Тому найкраще рішення такого типу задачі — використовувати кортежі.
У мовах, де сам синтаксис підтримує кортежі, кортежі позначається дужками, наприклад (int, bool, string) — це потрійний тип, і його значення може бути (1, true, «abc»). Слід зазначити, що кожен тип кортежа унікальний, (int, bool), (bool, int), (string, double) — це всі бінарні двійки, але це різні кортежі, якщо взяти певний кортеж як повернене значення функції, хоча він не такий хороший, як перше рішення з використанням користувацьких типів, згаданих раніше, з точки зору читабельності та безпеки, але значно краще, ніж друге рішення з використанням карти, принаймні за допомогою кортежів можна знати, скільки значень поверне функція, Який тип значення це за значення, і перевага в тому, що це простота та швидкість для кодування другої схеми за допомогою відображення?
На щастя, ці мови програмування тепер підтримують універсальні кортежі, а реалізація невбудованих кортежів стала надзвичайно простою, але зрештою, це не мовний вбудований синтаксичний елемент, і ним точно не так зручно використовувати, як рідні кортежі.
Нижче представлено сторонню бібліотеку Java-кортежів під назвою Javatuples з власною офіційною головною сторінкою та сотнями зірок github, яка майже займає монопольне місце у сфері Java-кортежів.
Javatuple визначають кортеж з максимальною довжиною 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 відповідає булевому типу. |