Fall through 是各种编程语言中发生的一种错误,如 C、C++、 Java、 Dart等。它发生在 switch-case 语句中,当我们忘记添加 break 语句时,控制流会跳转到下一行。
“If no break appears, the flow of control will fall through all the cases following true case
until the break is reached or end of the switch is reached.”
所以,很明显,创建fall through情况的最基本方法是跳过Dart的break语句,但是在dart,它会给出编译错误。
示例 1:跳过 break 语句
Dart
// This code will display error
void main() {
int gfg = 1;
switch ( gfg ){
case 1:{
print("GeeksforGeeks number 1");
}
case 2:{
print("GeeksforGeeks number 2");
}
case 3:{
print("GeeksforGeeks number 3");
}
default :{
print("This is default case");
}
}
}
Dart
void main() {
// Declaring value
// of the variable
int gfg = 2;
switch ( gfg ){
case 1:{
print("GeeksforGeeks number 1");
} break;
// Empty case causes fall through
case 2:
case 3:{
print("GeeksforGeeks number 3");
} break;
default :{
print("This is default case");
} break;
}
}
Dart
void main() {
int gfg = 1;
switch ( gfg ){
case 1:{
print("GeeksforGeeks number 1");
} continue next;
next:case 2:{
print("GeeksforGeeks number 2");
} break;
case 3:{
print("GeeksforGeeks number 3");
} break;
default :{
print("This is default case");
} break;
}
}
错误:
Error compiling to JavaScript:
main.dart:4:5:
Error: Switch case may fall through to the next case.
case 1:{
^
main.dart:7:5:
Error: Switch case may fall through to the next case.
case 2:{
^
main.dart:10:5:
Error: Switch case may fall through to the next case.
case 3:{
^
Error: Compilation failed.
但是,当只定义了一个 case 语句时,它允许跳过 break 语句。
注意:必须注意的是, Dart允许 空箱。
示例 2:提供一个空箱。
Dart
void main() {
// Declaring value
// of the variable
int gfg = 2;
switch ( gfg ){
case 1:{
print("GeeksforGeeks number 1");
} break;
// Empty case causes fall through
case 2:
case 3:{
print("GeeksforGeeks number 3");
} break;
default :{
print("This is default case");
} break;
}
}
输出:
GeeksforGeeks number 3
在上面的代码中,如果我们初始化 gfg = 3 的值,那么输出将不会改变。另一种实现失败的方法是在 switch-case 中使用 continue 而不是 break 语句。
示例 3:使用 continue 而不是 break
Dart
void main() {
int gfg = 1;
switch ( gfg ){
case 1:{
print("GeeksforGeeks number 1");
} continue next;
next:case 2:{
print("GeeksforGeeks number 2");
} break;
case 3:{
print("GeeksforGeeks number 3");
} break;
default :{
print("This is default case");
} break;
}
}
输出:
GeeksforGeeks number 1
GeeksforGeeks number 2
注意:必须注意,如果我们在上面的代码中不使用 continue 声明标签,那么代码将显示错误。