Введение в сложные типы данных

Apex — язык программирования Salesforce, аналогичный языку Java и основанный на нем, включает как простые, так и сложные типы данных. Тип данных определяет тип значений, которые могут храниться в заданной структуре, поскольку Apex является строго типизированным языком.

Примитивные типы, такие как String, Integer и Decimal, содержат одно значение. И наоборот, коллекции — это типы данных Apex, которые могут содержать несколько значений в одном идентификаторе.

В этой статье мы познакомим вас с тремя типами коллекций, когда их использовать, а также предоставим пример кода, который поможет вам начать работу.

Списки

Списки представляют собой упорядоченные наборы похожих типов данных. Тип данных List аналогичен массиву, если вы работаете с Java, PHP или JavaScript.

На значения в списке можно ссылаться по их «позиции в строке», называемой индексом. Основные методы (объектные функции) типа данных списка: .get() и .add(). Давайте рассмотрим пример, в котором мы 1) создаем пустой список целых чисел, добавляем два значения и ссылаемся на первое.

List<Integer> scores = new List<Integer>();
scores.add(88);
scores.add(100);
System.debug(scores.get(0)); // will print 88

Несколько важных замечаний по приведенному выше фрагменту кода:

  • Базовый тип данных значений списка определяется в угловых скобках.
  • новое ключевое слово используется для инициализации списка
  • Списки начинаются с индекса 0

Если бы мы хотели сократить и упростить пример, мы могли бы сделать это, объединив инициализацию и ввод данных, а также используя нотацию с квадратными скобками для ссылки на индекс.

List<Integer> scores = new List<Integer>{88,100};
System.debug(scores[0]); // will print 88

Мы хотим использовать списки, когда у нас есть группа похожих значений, к которым можно получить доступ по их индивидуальному индексу.

Наборы

Наборы – это неупорядоченная коллекция уникальных значений. Наборы отличаются от списков тем, что у них нет индекса (поскольку у них нет явного порядка) и значения не могут дублироваться.

Мы часто будем видеть наборы, используемые для создания и поддержки эффективной группы значений, поскольку дубликаты автоматически игнорируются. Затем мы можем проверить набор, чтобы увидеть, существует ли в нем конкретное значение.

Set<String> party = new Set<String>{'Cloud', 'Tifa', 'Berit'};
Boolean hasCloud = party.contains('Cloud'); // true
Boolean hasAerith = party.contains('Aerith'); // false

Обратите внимание, что определение набора очень похоже на список, но мы используем .contains() для возврата логического значения true/false в зависимости от того, находим ли мы совпадение в наборе. Хотя мы не использовали его в примере, у наборов также есть метод .add() для дальнейшего заполнения структуры.

Давайте посмотрим, что произойдет, если мы попытаемся продублировать значение в наборе…

Set<String> party = new Set<String>();
party.add('Cloud');
party.add('Cloud');
System.debug(party.size()); // will print 1

Попытка добавить повторяющееся значение в Set не вызовет ошибки, но добавление повторяющегося значения будет просто проигнорировано.

Карты

Карты представляют собой неупорядоченный набор уникальных ключей, каждый из которых связан со значением,аналогично словарям в Python или объектам в формате данных JSON. Мы можем думать о картах как о списке, где индексы не являются последовательными целыми числами.

Объявления карты немного отличаются от списков/наборов, потому что и идентификатор, и значение требуют типов данных. Давайте рассмотрим пример создания пустой карты и добавления к ней пары ключ-значение.

Map<String,Integer> scores = new Map<String,Integer>();
scores.put('Cloud', 88);

Вместо .add() мы используем .put() и включаем как ключ, так и значение. Если бы мы «поместили» другое значение с тем же ключом, исходное значение было бы перезаписано, что объясняет, почему мы не используем слово «добавить».

Map<String,Integer> scores = new Map<String,Integer>();
scores.put('Cloud', 88);
scores.put('Cloud', 100);
System.debug(scores.get('Cloud')); // will print 100

Карты можно использовать по-разному, особенно когда вы начинаете использовать коллекции в качестве типа данных значения и используете уникальные ключи (например, идентификаторы объектов Salesforce). Например, мы могли бы инициализировать карту идентификаторов учетных записей, связанную со списком возможностей.

Map<Id,List<Opportunity>> = new Map<Id,List<Opportunity>>();

Вывод

Освоение различных типов коллекций имеет решающее значение для эффективной работы со сложными отношениями данных в Salesforce. Подводя итог: списки упорядочены, наборы уникальны, а карты объединены.

Поделитесь своим опытом, вопросами и отзывами ниже. Следуйте Код 85 для получения дополнительных руководств по программированию на простом языке. Спасибо за прочтение!