ネスティング
ネスティング(英: Nesting)は、構造化プログラミング言語において、制御構造や関数、データ構造など何らかの構造が別の構造を取り囲むこと。入れ子とも言う。
ネストした構造のことをネスト構造(—こうぞう、英:Nested Structure)、入れ子構造と呼ぶ。
目次 |
概要 [編集]
例えばプログラミング言語の一つであるC言語で記述した場合、条件によって処理内容を変更させる文(条件文)のif文やswitch文などの中で更にまた同じif文やswitch文が書かれている場合や、同じ処理を何度も繰り返させる文(ループ文)のfor文やwhile文などの中で、更に同じループ文が使われている場合など、特定の処理をさせる記述の中に同種の記述が入っているものを指すことがほとんどであるが、ループ文の中に条件文といった異なった性質を持った記述同士であってもネスティングと呼ばれる。
上述のループ文や条件文以外にも手続きや関数の中に、副プログラムとなる手続きや関数が記述されているものもネスティングである。
例 [編集]
条件文での入れ子 [編集]
条件式1を判定して判定結果が"真"であるなら条件式2を判定し、条件式2の判定結果も"真"なら条件式3を判定する。条件式3も同様に判定結果が"真"であるなら処理1、処理2、処理3を全て処理した後に入れ子から脱出するが、それまでに条件式1が"偽"なら処理3だけを、条件式2が"偽"なら処理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; } } }
構造体での入れ子 [編集]
構造体がメンバとして何らかの構造体を持っている状態は、構造体を入れ子に使っていると言える。
struct Point { int x; int y; }; struct BitmapImage { struct Point size; unsigned char *image; };
副プログラムでの入れ子 [編集]
(C言語風の記述)