ภาษาการเขียนโปรแกรม Apex

ภาพรวม

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());
}

คำสั่ง SOQL และ SOSL

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('บ็อบ');

Batch Apex

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 ยังเสนอสิ่งแวดล้อมการเขียนโค้ดที่มีฟีเจอร์ขั้นสูงมากขึ้น

IDE ที่นิยม

การสร้างโปรเจกต์

ในการสร้างโปรเจกต์ Apex นักพัฒนามักจะใช้ส่วนติดต่อ Salesforce Setup เพื่อสร้างคลาส ทริกเกอร์ และส่วนประกอบอื่น ๆ กระบวนการปรับใช้รวมถึงการสร้างแพ็คเกจและอาจใช้ Salesforce CLI หากทำงานในเครื่อง

การใช้งาน Apex

Apex ถูกใช้เป็นหลักภายในระบบนิเวศของ Salesforce เพื่อดำเนินการตรรกะทางธุรกิจ อัตโนมัติการทำงาน และจัดการการรวมระบบที่ซับซ้อน แอปพลิเคชันรวมถึง:

การเปรียบเทียบกับภาษาอื่น ๆ ที่เกี่ยวข้อง

การเปรียบเทียบ Apex ที่ใกล้เคียงที่สุดสามารถทำได้กับ Java และ C# โดยเฉพาะเนื่องจากฟีเจอร์เชิงวัตถุและสภาพแวดล้อมการทำงานที่จัดการ แตกต่างจาก C++ และ Python ซึ่งสามารถใช้ได้ทั่วไป Apex ถูกออกแบบมาโดยเฉพาะสำหรับแอปพลิเคชันที่ใช้คลาวด์ ซึ่งช่วยเพิ่มการโต้ตอบกับบริการคลาวด์ของ Salesforce

เมื่อเปรียบเทียบกับ JavaScript Apex ให้สภาพแวดล้อมที่มีโครงสร้างและปลอดภัยต่อประเภทมากขึ้น เหมาะสำหรับตรรกะด้านเซิร์ฟเวอร์ ในขณะที่ JavaScript มักใช้สำหรับการเขียนสคริปต์ด้านคลินต์ Apex ยังมีความยืดหยุ่นน้อยกว่า Python แต่ให้การควบคุมที่มากกว่าต่อการจัดการข้อมูลในบริบทเฉพาะของ Salesforce

เคล็ดลับการแปลจากแหล่งสู่แหล่ง

สำหรับนักพัฒนาที่ต้องการแปลโค้ดจาก Apex ไปยังภาษาอื่นหรือในทางกลับกัน ควรพิจารณาฟีเจอร์เฉพาะของ Salesforce ที่ไม่มีเทียบเท่าโดยตรงในภาษาอื่น ๆ ขณะนี้ยังไม่มีเครื่องมือการแปลจากแหล่งสู่แหล่งที่ได้รับการยอมรับอย่างกว้างขวางสำหรับ Apex อย่างไรก็ตาม นักพัฒนาสามารถใช้การเรียก API และบริการเว็บเพื่ออำนวยความสะดวกในการรวมกับโค้ดที่เขียนในภาษาอื่น ๆ