Apex เป็นภาษาการเขียนโปรแกรมที่มีการกำหนดประเภทอย่างเข้มงวดและเป็นเชิงวัตถุ ซึ่งออกแบบมาโดยเฉพาะสำหรับแพลตฟอร์ม Salesforce โดยอนุญาตให้นักพัฒนาสามารถดำเนินการควบคุมการไหลและการทำธุรกรรมบนเซิร์ฟเวอร์ Salesforce พร้อมกับการเรียก API ไปยังฐานข้อมูล Apex ได้รับอิทธิพลอย่างมากจากไวยากรณ์ที่คล้ายกับ Java ซึ่งส่งเสริมการนำโค้ดกลับมาใช้ใหม่และการแก้ปัญหาอย่างมีประสิทธิภาพในสภาพแวดล้อมคลาวด์ ภาษาได้รับการปรับแต่งให้สามารถรวมเข้ากับบริการคลาวด์ของ Salesforce ได้อย่างราบรื่น ทำให้สามารถนำตรรกะทางธุรกิจไปใช้ได้โดยตรงภายในระบบนิเวศของ Salesforce
Apex ถูกนำเสนอโดย Salesforce ในปี 2007 เป็นส่วนหนึ่งของแพลตฟอร์ม 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 Object Query Language (SOQL) และ Salesforce Object Search Language (SOSL) เพื่อดึงข้อมูลจากวัตถุ Salesforce ตัวอย่างเช่น:
List<Account> accts = [SELECT Id, Name FROM Account WHERE Industry = 'Technology'];
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 สนับสนุนคอลเลกชัน (เช่น Lists, Sets, และ Maps) ซึ่งช่วยให้การจัดการข้อมูลง่ายขึ้น ตัวอย่างการใช้ List:
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 components ตัวอย่าง:
@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 และบริการเว็บเพื่ออำนวยความสะดวกในการรวมกับโค้ดที่เขียนในภาษาอื่น ๆ