Apex 提供了 if-else 语句、switch 语句和循环来控制 代码执行。语句通常按照它们出现的顺序逐行执行。 使用控制流语句,可以根据某个条件使 Apex 代码执行, 或者让代码块重复执行。
- 条件 (If-else) 语句 Apex 中的条件语句
的工作方式与 Java 类似。 - Switch 语句 Apex 提供了一个语句
,用于测试表达式是否与多个值之一匹配,并相应地分支。switch - Loops
Apex 支持五种类型的过程循环。
条件 (If-else) 语句
Apex 中的条件语句的工作方式与 Java 类似。
if ([Boolean_condition])
// Statement 1
else
// Statement 2
该部分始终是可选的,并且始终是可选的 具有最接近 .为 例:
elseif
Integer x, sign;
// Your code
if (x <= 0) if (x == 0) sign = 0; else sign = -1;
是 等效 自:
Integer x, sign;
// Your code
if (x <= 0) {
if (x == 0) {
sign = 0;
} else {
sign = -1;
}
}
重复语句也是允许的。 为 例:
else if
if (place == 1) {
medal_color = 'gold';
} else if (place == 2) {
medal_color = 'silver';
} else if (place == 3) {
medal_color = 'bronze';
} else {
medal_color = null;
}
Switch 语句
Apex 提供了一个测试 表达式是否与多个值之一匹配,并相应地进行分支。
switch
语法为:
switch on expression {
when value1 { // when block 1
// code block 1
}
when value2 { // when block 2
// code block 2
}
when value3 { // when block 3
// code block 3
}
when else { // default block, optional
// code block 4
}
}
该值可以是单个值,也可以是多个值 值或 sObject 类型。例如:when
when value1 {
}
when value2, value3 {
}
when TypeName VariableName {
}
该语句计算表达式和 执行匹配值的代码块。如果没有匹配的值,则代码 块被执行。如果没有阻止,则不执行任何操作。switchwhenwhen elsewhen else
注意
没有落差。执行代码块后,语句将退出。switchApex 语句表达式可以是以下表达式之一 以下类型。
switch
- 整数
- 长
- s对象
- 字符串
- 枚举
当阻止
每个块都有一个值,即 expression 是匹配的。这些值可以采用以下形式之一。when
- when {} (a when 块可以有 多个逗号分隔的文字子句)literal
- 当 SObjectTypeidentifier {}
- 什么时候enum_value {}
该价值对所有人来说都是合法的价值 类型。null
每个值必须是唯一的。例如 您只能在一个块子句中使用文本。一个块最多匹配一次。whenxwhenwhen
何时 Else 阻止
如果没有值与表达式匹配,则执行该块。whenwhen else
注意
Salesforce 建议包含块,尤其是枚举类型,尽管这不是必需的。 使用枚举生成语句时 托管包提供的值,则代码可能无法按预期方式运行,如果 新版本的包包含其他枚举值。您可以防止这种情况发生 问题,包括一个块 处理意外值。when elseswitchwhen else
如果包含块,则它必须是 语句中的最后一个块。when elseswitch
文本示例
您可以使用文本值进行切换 在 Integer、Long 和 String 类型上。字符串子句区分大小写。例如 “orange”与“ORANGE”的值不同。when
单值示例
下面的示例对值使用整数文本。when
switch on i {
when 2 {
System.debug('when block 2');
}
when -3 {
System.debug('when block -3');
}
when else {
System.debug('default');
}
}
Null 值示例
由于 Apex 中的所有类型都可以为 null,因此值可以为 .whennull
switch on i {
when 2 {
System.debug('when block 2');
}
when null {
System.debug('bad integer');
}
when else {
System.debug('default ' + i);
}
}
多值示例
Apex 语句没有 回退,但子句可以包括 要匹配的多个文本值。您还可以嵌套 Apex 语句以提供多个执行 子句中的路径。switchwhenswitchwhen
switch on i {
when 2, 3, 4 {
System.debug('when block 2 and 3 and 4');
}
when 5, 6 {
System.debug('when block 5 and 6');
}
when 7 {
System.debug('when block 7');
}
when else {
System.debug('default');
}
}
方法示例
以下示例不是打开变量表达式,而是打开 方法调用的结果。
switch on someInteger(i) {
when 2 {
System.debug('when block 2');
}
when 3 {
System.debug('when block 3');
}
when else {
System.debug('default');
}
}
sObjects 示例
通过打开 sObject 值,可以隐式执行检查和强制转换。例如 请考虑以下使用 if-else 语句的代码。instanceof
if (sobject instanceof Account) {
Account a = (Account) sobject;
System.debug('account ' + a);
} else if (sobject instanceof Contact) {
Contact c = (Contact) sobject;
System.debug('contact ' + c);
} else {
System.debug('default');
}
您可以使用以下语句替换和简化此代码。switch
switch on sobject {
when Account a {
System.debug('account ' + a);
}
when Contact c {
System.debug('contact ' + c);
}
when null {
System.debug('null');
}
when else {
System.debug('default');
}
}
注意
每个块只能使用一种 sObject 类型。when
枚举示例
使用枚举值的语句不需要块,但建议这样做。您可以 每个块使用多个枚举值 第。switchwhenwhen elsewhen
switch on season {
when WINTER {
System.debug('boots');
}
when SPRING, SUMMER {
System.debug('sandals');
}
when else {
System.debug('none of the above');
}
}
循环
Apex 支持五种类型的过程循环。支持以下类型的过程循环:
- do {statement} while (Boolean_condition);
- while (Boolean_condition) statement;
- for (initialization; Boolean_exit_condition; increment) statement;
- for (variable : array_or_set) statement;
- for (variable : [inline_soql_query]) statement;
所有环路都允许环路控制结构:
- break;退出整个循环
- continue;跳到下一个迭代 的循环
- Do-While 循环
- While 循环
- For 循环
Do-While 循环
Apex 循环重复执行 代码块,只要特定的布尔条件保持为真。其语法 是:
do-while
do {
code_block
} while (condition);
注意
大括号 () 是 始终需要围绕 .{} code_block
与 Java 一样,Apex 循环没有 检查布尔条件语句,直到执行第一个循环之后。 因此,代码块始终至少运行一次。do-while例如,以下代码将数字 1 – 10 输出到调试中 日志:
Integer count = 1;
do {
System.debug(count);
count++;
} while (count < 11);
While 循环
Apex 循环重复执行一个块 只要特定的布尔条件保持为真。其语法 是:
while
while (condition) {
code_block
}
注意
仅当块包含多个大括号 () 时,才需要在 a 周围加上大括号 () 陈述。{} code_block
与 不同的是,循环检查布尔条件语句 在执行第一个循环之前。因此,代码块可以 从不执行。do-whilewhile例如,以下代码将数字 1 – 10 输出到调试中 日志:
Integer count = 1;
while (count < 11) {
System.debug(count);
count++;
}
For 循环
Apex 支持循环的三种变体:
for
- 传统循环:for
for (init_stmt; exit_condition; increment_stmt) { code_block }
- 列表或设置迭代循环:for
for (variable : list_or_set) { code_block }
其中必须是相同的基元或 sObject 类型为 。 variable list_or_set - SOQL 循环:for
for (variable : [soql_query]) { code_block }
或for (variable_list : [soql_query]) { code_block }
两者必须属于相同的 sObject 类型 返回的 . variable variable_list soql_query
注意
仅当块包含多个大括号 () 时,才需要在 a 周围加上大括号 () 陈述。{} code_block
以下各节将进一步讨论每种方法。
- 传统 For 循环
- 列出或设置循环的迭代
- 迭代集合
传统 For 循环
Apex 中的传统循环对应于 Java 和其他语言中使用的传统语法。其语法 是:
for
for (init_stmt; exit_condition; increment_stmt) {
code_block
}
执行此类循环时,Apex 运行时引擎按顺序执行以下步骤:
for
- 执行循环的组件。请注意, 可以在此语句中声明和/或初始化多个变量。 init_stmt
- 执行检查。如果为 true,则循环 继续。如果为 false,则循环退出。 exit_condition
- 执行 . code_block
- 执行语句。 increment_stmt
- 返回到步骤 2。
例如,以下代码将数字 1 – 10 输出到调试日志中。注意 一个额外的初始化变量, 包含以演示语法:
j
for (Integer i = 0, j = 0; i < 10; i++) {
System.debug(i+1);
}
列出或设置循环的迭代
列表或设置迭代循环循环 列表或集合中的所有元素。其语法 是:
for
for (variable : list_or_set) {
code_block
}
其中必须具有相同的基元或 sObject 类型 如。
variable list_or_set
执行此类循环时,Apex 运行时引擎将 分配给 中的每个元素,并运行 for each 值。for variable list_or_set code_block例如,以下代码将数字 1 – 10 输出到调试日志:
Integer[] myInts = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (Integer i : myInts) {
System.debug(i);
}
迭代集合
集合可以由列表、集合或地图组成。修改集合的 元素,而不支持循环访问该集合 并导致错误。请勿在以下情况下直接添加或删除元素 循环访问包含它们的集合。
在迭代期间添加元素
要添加 元素,在迭代列表、集合或映射时,保留新元素 在临时列表中,设置或映射并将它们添加到原始列表之后 完成循环访问。
在迭代期间删除元素
删除 元素,创建一个新列表,然后复制 您希望保留的元素。或者,添加您想要的元素 删除到临时列表并在完成迭代后将其删除 集合。
注意
该方法以线性方式执行。用它来删除元素有时间和 资源影响。List.remove
在迭代时删除元素 地图或集合,将要删除的键保存在临时列表中, 然后在完成循环访问集合后删除它们。