Введение в сложные типы данных
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 для получения дополнительных руководств по программированию на простом языке. Спасибо за прочтение!