美文网首页
如何避免Salesforce Apex代码中5个常见错误,提升开

如何避免Salesforce Apex代码中5个常见错误,提升开

作者: 自由侠Salesforce学习 | 来源:发表于2023-05-25 12:53 被阅读0次

    编码是一门需要严谨和谨慎的技术,即使是有经验的开发人员也会犯错。一些最常见的编程错误,可能会导致严重的后果。因此,作为一名开发人员,了解并避免这些错误是非常重要的。

    本篇文章将为学习者介绍在编写Apex代码时一定要规避的5个错误。

    易错点1

    缺乏学习编程语言的能力

    学习编码时,通过使用可用资源并进行大量练习,确保了解其所有功能和局限性。在掌握了变量、运算符、if语句、循环、集合和函数之后,需要花费更多时间学习面向对象编程。

    例如,最近一位客户问我为什么他们的Apex代码会遇到Apex CPU超时限制错误。检查代码后发现,罪魁祸首是在两个不同的SOQL查询中分别查询后,它将子记录与其父记录进行了匹配。开发人员应该使用带有子记录的单个SOQL查询来获取所有信息。

    以下是它的示例:

    List<Account> accounts =

    [SELECT Id,

    Name

    FROM Account

    // Criteria Here];

    List<Contacts> contacts =

    [SELECT Id,

    Name,

    AccountId

    FROM Contact]

    for (Account acct : accounts) {

    for (Contact con : contacts) {

    if (con.AccountId == acct.Id) {

    // Do stuff

    }

    }

    }

    此代码位于Batchable Apex中,因此它已经具有更高的60秒Apex CPU限制。

    但是,这段代码效率很低。对于每个客户,它会遍历所有联系人以找到特定于该客户的联系人,然后对其进行处理。假如有500个客户和1,000个联系人,那就是500,000次迭代,这是非常不必要的。

    最开始编写的开发人员不知道SOQL查询中的子选择,它允许获取与每个父记录相关的子记录。

    更高效的代码如下:

    List<Account> accounts =

    [SELECT Id,

    Name,

    (SELECT Id,

    Name

    FROM Contacts)

    FROM Account

    // Where Clause Here for Desired Accounts];

    for (Account acct : accounts) {

    for (Contact acctContact : acct.Contacts) {

    // Do something with each account’s contact as needed

    }

    }

    现在,这段代码效率更高,并且只遍历返回的每个客户的联系人。

    易错点2

    复制粘贴代码

    由于需要长期维护,复制粘贴代码是不良的编码习惯。如果重复复制相同的代码进行更改,则必须在所有地方应用该更改。


    一种解决方案是使用函数。开发人员可以在整个类或代码库中使用函数,具体取决于其访问级别。

    易错点3

    编写长函数

    当一个函数很长时,比如超过50行代码,不仅会导致代码更难理解,而且容易出现错误。

    一种解决方案是编写使用辅助函数的较短函数。主函数使用多个较短的函数,而不是一个长函数,尽量将函数保持在20-30行Apex代码。

    易错点4

    代码嵌套太深

    嵌套太深的代码也更难推理,更容易出错。

    public List<Account> getAccountsWithCountry(List<Account> accounts) {

    List<Accounts> accountsWithCountry = new List<Account>();

    if (accounts != null) {

    for (Account acct : accounts) { // First Level Of Nesting

    if (String.isNotBlank(acct.BillingCountry)) { // Second Level of Nesting

    accountsWithCountry.add(acct); // Third-Level of Nesting

    }

    }

    }

    return accountsWithCountry;

    }

    此代码示例是一个公共函数,它有三层嵌套:

    1. “for-each”循环遍历Account。

    2. “if”语句。

    3. 将Account添加到“accountsWithCountry”的代码。

    这段代码并不是最佳的,代码的嵌套级别最好不超过两层。开发人员在编码时可以反向思考。不要只在Account为空时才继续,先检查它是否为空,如果为空就停止。例如:

    public List<Account> getAccountsWithCountry(List<Account> accounts) {

    List<Accounts> accountsWithCountry = new List<Account>();

    if (accounts == null) {

    return accountsWithCountry;

    }

    for (Account acct : accounts) {

    if (String.isNotBlank(acct.BillingCountry)) {

    accountsWithCountry.add(acct);

    }

    }

    return accountsWithCountry;

    }

    这段代码可以实现同样的目标,但只有两层嵌套。此外,如果进入for-each循环,Account列表不为空,并且可以安全地遍历它。

    易错点5

    格式错误

    开发人员应该编写格式良好的代码,使代码更容易阅读和理解。格式错误的代码通常没有空格和缩进。

    public class MyBadFormatClass {

    public String FirstName=''; public Integer Age=0; public String LastName='';

    public String getName() { return FirstName + ' ' + LastName; }

    }

    这个类可以编译,但难以阅读和理解。第二行声明了三个变量,第三行是一个函数。以下是重新格式化后的编码,更易于理解。

    public class MyBadFormatClass {

    public String FirstName = '';

    public Integer Age = 0;

    public String LastName = '';

    public String getName() {

    return FirstName + ' ' + LastName;

    }

    }

    点击跳转千人收藏的《考证攻略》

    相关文章

      网友评论

          本文标题:如何避免Salesforce Apex代码中5个常见错误,提升开

          本文链接:https://www.haomeiwen.com/subject/uldhedtx.html