Apex یک زبان برنامهنویسی شیءگرا و با نوعگذاری قوی است که بهطور خاص برای پلتفرم Salesforce طراحی شده است. این زبان به توسعهدهندگان اجازه میدهد تا دستورات کنترل جریان و تراکنش را بر روی سرور Salesforce اجرا کنند و همچنین تماسهای API به پایگاه داده را انجام دهند. Apex به شدت تحت تأثیر نحو مشابه Java قرار دارد و به ترویج قابلیت استفاده مجدد از کد و حل مسائل بهطور مؤثر در یک محیط ابری کمک میکند. این زبان بهگونهای طراحی شده است که بهطور یکپارچه با خدمات ابری Salesforce ادغام شود و منطق کسبوکار را بهطور مستقیم در اکوسیستم Salesforce پیادهسازی کند.
Apex در سال 2007 توسط Salesforce بهعنوان بخشی از پلتفرم Salesforce معرفی شد. هدف اصلی آن توانمندسازی توسعهدهندگان برای ایجاد منطق کسبوکار سفارشی، گردشکارهای خودکار و ادغامها در زیرساخت Salesforce بود. طراحان قصد داشتند زبانی توسعه دهند که نه تنها نحو Java را منعکس کند بلکه نیازهای منحصر به فرد محاسبات ابری را نیز در بر بگیرد.
Apex شباهتهایی با Java دارد و اصول و نحو شیءگرا مشابهی را در بر میگیرد. همچنین از نظر سهولت استفاده و سازگاری توسعهدهندگان، قابل مقایسه با زبانهایی مانند C# و Python است. این زبان از خدمات زمان اجرا که توسط Salesforce ارائه میشود، بهرهمند است که مدیریت منابع و زمینه اجرای کد را انجام میدهد، ویژگیای که در زبانهای مدیریتشده مانند C# و Java رایج است. ادغام با اکوسیستم Salesforce به این معنی است که برنامههای Apex میتوانند از طریق API با خدمات شخص ثالث مختلف تعامل داشته باشند.
از سال 2023، Apex به تکامل خود ادامه میدهد و بهروزرسانیهای منظم از سوی Salesforce که قابلیتهای زبان و همراستایی آن با شیوههای توسعه مدرن را بهبود میبخشد، ارائه میشود. ویژگیهای جدیدی در طول سالها معرفی شده است، از جمله پردازش غیرهمزمان، دستکاری پیشرفته دادهها از طریق مجموعهها و ابزارهای اشکالزدایی بهبود یافته. این زبان بخشی جداییناپذیر از اکوسیستم Salesforce است و جامعهای قوی از توسعهدهندگان به رشد آن کمک میکنند.
Apex یک زبان با نوعگذاری قوی است، به این معنی که هر متغیر باید نوعی اعلام شده داشته باشد. به عنوان مثال:
String greeting = 'سلام، Salesforce!';
Apex از مفاهیم برنامهنویسی شیءگرا مانند کلاسها و وراثت پشتیبانی میکند. در اینجا یک مثال از تعریف یک کلاس ساده آورده شده است:
public class Vehicle {
public String type;
public Vehicle(String type) {
this.type = type;
}
}
Apex مکانیزمهایی برای مدیریت استثناها فراهم میکند که به بهبود استحکام کد کمک میکند. یک مثال از مدیریت استثناها به این صورت است:
try {
Integer result = 10 / 0;
} catch (DivisionByZeroException e) {
System.debug('تقسیم بر صفر مجاز نیست: ' + e.getMessage());
}
Apex میتواند پرسشهای زبان پرسش شیء Salesforce (SOQL) و زبان جستجوی شیء Salesforce (SOSL) را برای دریافت دادهها از اشیاء Salesforce اجرا کند. به عنوان مثال:
List<Account> accts = [SELECT Id, Name FROM Account WHERE Industry = 'فناوری'];
Apex از تریگرها پشتیبانی میکند و به توسعهدهندگان اجازه میدهد تا کد را قبل یا بعد از رویدادهای خاص پایگاه داده اجرا کنند. مثالی از یک تریگر بر روی شیء Account:
trigger AccountTrigger on Account (before insert) {
for (Account acct : Trigger.new) {
acct.Name = 'جدید ' + acct.Name;
}
}
Apex ویژگیهایی برای پردازش غیرهمزمان دارد که به عملیات طولانیمدت اجازه میدهد در پسزمینه اجرا شوند و تجربه کاربری را بهبود بخشند. به عنوان مثال:
@future
public static void processAccount(Id accountId) {
// انجام عملیات طولانیمدت
}
Apex از مجموعهها (مانند لیستها، مجموعهها و نقشهها) پشتیبانی میکند که دستکاری دادهها را سادهتر میکند. مثالی از استفاده از یک لیست:
List<String> names = new List<String>();
names.add('آلیس');
names.add('باب');
Apex اجازه ایجاد فرآیندهای دستهای را میدهد که میتوانند حجم بالایی از رکوردها را بهطور مؤثر مدیریت کنند. مثال:
global class BatchExample implements Database.Batchable<SObject> {
global Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator('SELECT Id FROM Account');
}
}
Apex بر نیاز به تست تأکید دارد و از پشتیبانی داخلی برای نوشتن تستهای واحد برخوردار است. مثالی از یک متد تست:
@isTest
private class AccountTest {
@isTest static void testAccountCreation() {
Account acct = new Account(Name='حساب تست');
insert acct;
System.assertNotEquals(null, acct.Id);
}
}
Apex شامل حاشیهنویسیهایی است که رفتارهای خاصی را تعریف میکنند، مانند @AuraEnabled
برای نمایش متدها برای اجزای Lightning. مثال:
@AuraEnabled
public static String getGreeting() {
return 'سلام از Apex!';
}
Salesforce محیط توسعه خاص خود را به نام Salesforce Developer Console ارائه میدهد که در آن توسعهدهندگان میتوانند کد Apex خود را بنویسند و آزمایش کنند. علاوه بر این، ابزارهایی مانند Salesforce Extensions برای Visual Studio Code یک محیط کدنویسی قویتر با ویژگیهای پیشرفته ارائه میدهند.
برای ساخت یک پروژه Apex، توسعهدهندگان معمولاً از رابط کاربری Salesforce Setup برای ایجاد کلاسها، تریگرها و سایر مؤلفهها استفاده میکنند. فرآیند استقرار شامل ایجاد بستهها و احتمالاً استفاده از Salesforce CLI در صورت کار محلی است.
Apex عمدتاً در اکوسیستم Salesforce برای پیادهسازی منطق کسبوکار، خودکارسازی گردشکارها و مدیریت ادغامهای پیچیده استفاده میشود. کاربردها شامل:
نزدیکترین مقایسهها با Apex میتواند با Java و C# انجام شود، عمدتاً به دلیل ویژگیهای شیءگرا و محیط زمان اجرای مدیریتشده آن. بر خلاف C++ و Python که میتوانند عمومیتر باشند، Apex بهطور خاص برای برنامههای مبتنی بر ابر طراحی شده است و تعامل آن با خدمات ابری Salesforce را تقویت میکند.
در مقایسه با JavaScript، Apex محیطی ساختاریافته و با نوعگذاری ایمنتر ارائه میدهد که برای منطق سمت سرور مناسب است، در حالی که JavaScript معمولاً برای اسکریپتنویسی سمت کلاینت استفاده میشود. Apex همچنین کمتر از Python انعطافپذیر است اما کنترل بیشتری بر روی مدیریت دادهها در زمینه خاص Salesforce ارائه میدهد.
برای توسعهدهندگانی که به دنبال ترجمه کد از Apex به زبانهای دیگر یا بالعکس هستند، باید به ویژگیهای خاص Salesforce توجه کنند که معادل مستقیمی در زبانهای دیگر ندارند. در حال حاضر، هیچ ابزار ترجمه کد به کد شناختهشدهای بهطور خاص برای Apex وجود ندارد. با این حال، توسعهدهندگان میتوانند از تماسهای API و وبسرویسها برای تسهیل ادغام با کدی که به زبانهای دیگر نوشته شده است، استفاده کنند.