Моимпервым языком программирования сталApex.ЭтоJava-подобный язык, который автоматизируетbackend-логику в приложения на платформеSalesforce.com.
Нельзя сказать, что я до этого не был знаком с ООП или другими языками.Мое знакомство ограничивалось теоретическими знаниями,полупройденнымикурсами наCodecademyили лабораторными работами в институте.Естественным образом все тонкости технологии, синтаксис языка,его возможностии ограничениябыстро выветривались из памяти, поскольку практического применения этим навыкам я не находил.
В 2019 годуя пришёлвAccentureкак специалист по поддержке и доработкеCRMSalesforce.Диапазон задач сначала был очерчен недостаточно чётко, поэтому я стал изучатьинструменты как администрирования, так и разработки наSalesforce.
Сейчасмойопыт разработкинаApexокологода, я стал сертифицированным разработчикомSalesforce.Могу подвести первые итоги.
Будет полезно для:
-
новичковв программировании
-
администраторовSalesforce,которые хотят освоить разработку
-
опытных разработчиков, которые хотят узнать о разработке на платформе Salesforce
Ниже я кратко приведу все плюсы и минусы Apex, с точки зрения выбора его как языка для обучения. Затем подробнее рассмотрю каждый пункт.
Плюсы Apex:
-
Apexприучает к написанию оптимального,ресурсоэффективногокода
-
Apexприучает кюнит-тестированию и кtest-drivenразработке
-
Apexимеетединую и обновляемую документацию, собранную на порталеSalesforce
-
Apexимеетout-of-the-boxдоступкБД(ненужно писать коннекторов)
-
Apexэто на 90%Java.Вы с легкостью сможетепониматьJava-кодпосле разработки наApex
-
Salesforceпоставляет собственную онлайнIDEDeveloperConsole,которая позволяет новичку быстро начать программировать без погружения вмиркастомныхIDE
-
Apexможно осваивать вTrailhead-песочницах,без установки и настройки дополнительного софта.
-
Trailheadобучает программированию наApexс полного нуля.Trailhead-модули обучают вас концепциям ООП и синтаксисуApexна языке простых смертных (к сожалению, только на английском)
Минусы Apex:
-
Мало материалов на русском языке (почти нет)
-
Немногочисленное русскоязычное сообщество
-
Применимость только для продуктов на платформеSalesforce
Apexприучает к написанию оптимального,ресурсоэффективногокода
Ресурсоэффективныйкод вApexэто не блажь и не рекомендация, а почти необходимое условие.ПосколькуSalesforceэто облачная платформа,программные ресурсыу каждого клиента платформы ограничиваютсялицензией. Иными словами, ресурсы, которые есть у вас враспоряжении, как разработчика, ограничены лимитамиSalesforce.
Код, исполнение которого нарушает лимиты, приведет к системной ошибке и откату транзакции.По этой причине уSalesforceесть рекомендации, которых нужно придерживаться, чтобы писать оптимальный код.
Этот пункт я считаюплюсомApex,поскольку вы с самого начала привыкаете писать оптимальный код, которыйэкономно распоряжается облачными ресурсами. Это формирует полезныйдля разработчика способ мыслить.
Apexприучает к юнит-тестированию и кtest-drivenразработке
Покрытие кода юнит-тестами на 75%обязательное условиедля переноса этого кода наPROD-среду.Поэтомувы с самого начала учитесьсоздавать тест-классы. Это полезный навыкменятьментальный ракурс, с которого вы смотрите на свой код,таким образом, чтобынаписать тест.
Salesforceв этом вопросе идет дальшеи пропагандируетпри разработке начинать с написания юнит-тестов.Это помогает лучше осознать все пользовательские сценарии, которые должен обрабатывать ваш будущий код.ПоэтомуApex,как первый язык программирования,не оставляет вам выбора: вы сразу учитесь лучшим практикам и осознанному подходу к процессу разработки.
Пример класса и тест-классавApex
Класс:
public class TVRemoteControl { // Volume to be modified Integer volume; // Constant for maximum volume value static final Integer MAX_VOLUME = 50; // Constructor public TVRemoteControl(Integer v) { // Set initial value for volume volume = v; } public Integer increaseVolume(Integer amount) { volume += amount; if (volume > MAX_VOLUME) { volume = MAX_VOLUME; } return volume; } public Integer decreaseVolume(Integer amount) { volume -= amount; if (volume < 0) { volume = 0; } return volume; } public static String getMenuOptions() { return 'AUDIO SETTINGS - VIDEO SETTINGS'; } }
Тест-класс:
@isTest class TVRemoteControlTest { @isTest static void testVolumeIncrease() { TVRemoteControl rc = new TVRemoteControl(10); Integer newVolume = rc.increaseVolume(15); System.assertEquals(25, newVolume); } @isTest static void testVolumeDecrease() { TVRemoteControl rc = new TVRemoteControl(20); Integer newVolume = rc.decreaseVolume(15); System.assertEquals(5, newVolume); } @isTest static void testVolumeIncreaseOverMax() { TVRemoteControl rc = new TVRemoteControl(10); Integer newVolume = rc.increaseVolume(100); System.assertEquals(50, newVolume); } @isTest static void testVolumeDecreaseUnderMin() { TVRemoteControl rc = new TVRemoteControl(10); Integer newVolume = rc.decreaseVolume(100); System.assertEquals(0, newVolume); } @isTest static void testGetMenuOptions() { // Static method call. No need to create a class instance. String menu = TVRemoteControl.getMenuOptions(); System.assertNotEquals(null, menu); System.assertNotEquals('', menu); } }
Apexимеетединуюиобновляемуюдокументацию,собраннуюнапорталеSalesforce
SalesforceразвиваетApexкак основной язык для разработки на своей проприетарной платформе, поэтому всеобновления и вся документация содержатся на едином официальном порталеApex DeveloperGuide.
На ней собраны всесистемные классы и методы, подробно описано их назначениеи применение.Можно найти однозначный ответ на большинство вопросов. А вопросов при обучениивсегда много.
Apexимеетout-of-the-boxдоступкбазе данных
Большим плюсом дляначинающего разработчикаApexсчитаюпростоту обращения в базу данныхиз кода.В базу данных можно обратиться из любого места в коде, для этого не нужно дополнительных настроек и соединений.
Вот несколько примеровобращения к базе данных из кода:
Account A = new Account(Name='xxx');insert A;Account B;// A simple bindB = [SELECT Id FROM Account WHERE Id = :A.Id];// A bind with arithmeticB = [SELECT Id FROM Account WHERE Name = :('x' + 'xx')];String s = 'XXX';// A bind with expressionsB = [SELECT Id FROM Account WHERE Name = :'XXXX'.substring(0,3)];// A bind with an expression that is itself a query resultB = [SELECT Id FROM Account WHERE Name = :[SELECT Name FROM Account WHERE Id = :A.Id].Name];Contact C = new Contact(LastName='xxx', AccountId=A.Id);insert new Contact[]{C, new Contact(LastName='yyy', accountId=A.id)};// Binds in both the parent and aggregate queriesB = [SELECT Id, (SELECT Id FROM Contacts WHERE Id = :C.Id) FROM Account WHERE Id = :A.Id];// One contact returnedContact D = B.Contacts;// A limit bindInteger i = 1;B = [SELECT Id FROM Account LIMIT :i];// An OFFSET bindInteger offsetVal = 10;List<Account> offsetList = [SELECT Id FROM Account OFFSET :offsetVal];// An IN-bind with an Id list. Note that a list of sObjects// can also be used--the Ids of the objects are used for // the bindContact[] cc = [SELECT Id FROM Contact LIMIT 2];Task[] tt = [SELECT Id FROM Task WHERE WhoId IN :cc];// An IN-bind with a String listString[] ss = new String[]{'a', 'b'};Account[] aa = [SELECT Id FROM Account WHERE AccountNumber IN :ss];
Apexэтона90%Java.Вы с легкостью сможете пониматьJava-код после разработки наApex
SalesforceсоздавалаApexна основе синтаксисаJava.Есть небольшие исключения, обусловленные спецификойSalesforce.Все отличия собраны на этой странице.
Но,если посмотреть на методы работы с примитивамии коллекциями, то они работают аналогичноJava.
Сравните, к примеру, методы работы соStringвApexиString в Java.
Выходит, что обучаясьApexвы во многом обучаетесь иJava.Это правило работает и наоборот.
Если вы решите перейти вJava-разработчики,вам не придется начинать с нуля. А полезные парадигмы мышления изApex-разработки дадут вам хороший фундамент длянаписанияресурсоэффективногоJava-кода.
Salesforceпоставляет собственную онлайн IDEDeveloperConsole
Developer Console позволяет новичку быстро начать программировать без погружения в миркастомныхIDE.
Я помню,какраньше делал попытки самостоятельноучитьPython,C#. Иначинать нужно было с установкиIDE, ее настройки. Разобраться,как работает этаIDEотдельнаяистория. Много папок, много кнопок, много пунктов меню, много панелей.Это было серьёзным барьером на пути начинающего разработчика.
СApexничего подобного не было, поскольку любой инстансSalesforceсодержит в себевстроеннуюIDE, которая называетсяDeveloperConsole.Устанавливать ничего не нужно, достаточно открытьв браузереDeveloperConsoleи сразу писать код.Код можно запустить сразу и проверить его работу в реальном(или песочном)приложении.
Да, более опытные разработчикиSalesforceпредпочитают работать вVisualStudioCodeилиEclipse,но дляначинающихDeveloperConsoleто, что нужно.
DeveloperConsoleвыглядит так:
Apexможно осваивать вTrailhead-песочницах, без установки и настройки дополнительного софта
Salesforceразработал собственную платформу для обученияtrailhead.salesforce.com.Она великолепна геймификацией процессаобучения и тем, что создавать тестовые среды можно непосредственно со страницы практического задания:
В рамках обучения можно иметь одновременно до 10 (!) активных песочниц.Песочницы можно удалять и создавать новыедля каждой следующей задачи, а можно работать в одной песочнице по нескольким заданиям сразу.Любая новая песочница создаётся с ужепредзаполненнымиданными, чтобы вы могли сразу начатьэксперементироватьи не тратить время на заполнение тестовыми данными.
Trailheadобучает программированию наApexс полного нуля
ВTrailheadмножество обучающих модулей и троп (последовательностей модулей).Главный плюс для начинающего в том, чтодля обучения программированию можно выбрать тропу,которая предназначена дляучеников с нулевым опытом или только садминскимопытом.В таком случае обучение начнется с самых основ ООП,а в качестве примеров будет использоватьсяApex-код.
Примеры обучающих модулей по разработке на Apex для администраторовВсе модулиTrailheadнаписаны на английском языке.Авторы модулей стараются максимально просто описывать концепции, поэтому языковой барьер быстро перестает чувствоваться.
Текст часто снабжается забавными примерами и просто шутками. Типичный пример на рисунке ниже:
В изученииApexесть и минусы.Ниже рассмотрю их подробнее.
Мало материалов на русском языке (почти нет)
На русский язык не переведенытакие официальные ресурсы, как:
Это затрудняет обучение ребятам, которые не знают английский язык.
Немногочисленное русскоязычное сообщество
Количестворазработчиков из России и СНГ относительнонебольшое, поэтому достаточно трудно найтиблоги и обсуждениеApexна русском языке.Вот,например,как выглядят профессиональные сообществаSalesforce-специалистовВКонтакте
Надо заметить, чтов Беларуси разработка наSalesforceстремительно популяризуется. В русскоязычномYoutubeпоявляется всё больше качественных видео проSalesforceиApex(пример). Количествоспециалистов растёт, но работы всё ещё больше, чем людей.
Этот минус можноконвертировать в преимущество вас как специалиста на рынке труда. Чем меньшеспециалистов, тем они дороже.
Применимость только для продуктов на платформеSalesforce
В отличие отJava,Pythonи других кроссплатформенных языков,Apexможет использоваться только для разработки на платформеSalesforce.com.Несмотря на многообразие продуктовSalesforce, вы ограничены этим стеком.
Заключение
Apexпрекрасно подходитдля обучения программированию.Правила и рекомендацииSalesforceс самого начала научат вас лучшим практикам ООП, которыеприменимы к коду на любом другом языке.
Однако,лучшепосмотреть в сторону других языков для старта, если:
-
Вы не планируете профессионально развиваться вкачестве специалистаSalesforce;
-
Вы плохо владеете английским языком. Это затруднит вам изучение любого языка программирования, ноApex- в особенности.