ネスティング
プログラムの構造が再帰的に繰り返されて記述されること
From Wikipedia, the free encyclopedia
概要
制御構造におけるネスティング
制御構造(分岐命令、ループ命令)のネスティング。スコープが入れ子になっている。
条件文のネスティング
以下の例では条件式1を判定して判定結果が"真"であるなら条件式2を判定し、条件式2の判定結果も"真"なら条件式3を判定する。条件式3も同様に判定結果が"真"であるなら処理1、処理2、処理3を全て処理した後に入れ子から脱出するが、それまでに条件式2が"偽"なら処理3だけを、条件式3が"偽"なら処理2と処理3をして入れ子から脱出する。
(C言語風での記述)
if (条件式1){
if (条件式2){ // ここの「if」は一番上の「if」の入れ子
if (条件式3){ // ここの「if」は一つ上の「if」と一番上の「if」の入れ子
処理1;
}
処理2;
}
処理3;
}
ループ文のネスティング
基本的に上述の条件文と動きが似ているため、記述も似ている。ループ文同士での入れ子はループ文を多用するために、プログラミングのミスによるバグの一つである無限ループが発生しやすくなる。
一番外側から順番に条件式を判定して行き、条件式の値が満たされなくなるまで内側の処理を繰り返していく。
(C言語風での記述)
for (int x = 0; 条件式1; x++){
for (int y = 0; 条件式2; y++){ //ここの「for」は一番上の「for」の入れ子
for (int z = 0; 条件式3; z++){ //ここの「for」は一つ上の「for」と一番上の「for」の入れ子
処理1;
}
処理2;
}
処理3;
}
ループ文と条件文が混合したネスティング
一番外側から順番に条件式を判定して行き、条件式の値が満たされなくなるまで内側の処理を繰り返していく。ただし外側から二番目のループ文では、条件式3の判定結果が真のときは処理1を、偽のときは処理2を処理する。
(C言語風での記述)
for (int x = 0; 条件式1; x++){
for (int y = 0; 条件式2; y++){ //ここの「for」は一番上の「for」の入れ子
if (条件式3){ //ここの「if」は一つ上の「for」と一番上の「for」の入れ子
処理1;
}
else{
処理2;
}
}
}
データ構造におけるネスティング
副プログラムにおけるネスティング
名前空間のネスティング
記述方法は先述のデータ構造の入れ子に酷似している。名前空間を分けることでサブルーチンなどの名称が競合するのを防止する。C言語には名前空間の機能はない。
namespace 名前空間1{
namespace 名前空間2{
int func(){} //名前空間1::名前空間2::func()のようにアクセスさせることが多い
}
}
