プログラミングのブロックとは?わかりやすく解説
- 作成日: 2022-08-05
- 更新日: 2023-12-25
- カテゴリ: プログラミング
プログラミングのブロックとは?わかりやすく解説
プログラミングにおけるブロックとは複数のコードが集まっているコードの区切りのことを言います。
複数のコードが集まっている様子から「ブロック」と言われています。
プログラミング言語によってコードのブロックに意味を持たせることもあります。
たとえば変数のスコープ(寿命)。
C言語などのプログラミング言語では変数のスコープはブロック単位になります。
つまりC言語ではブロックAで定義した変数はブロックBで使うことができません。
例外としてはブロックが違ってもポインタなどを使えば参照することはできます。
また例外としては入れ子になっているブロックでは子のブロックからや親のブロックの変数を見ることができます。
関連記事
目が覚めるC言語のdo-while文の使い方【ループ処理、初心者向け】
明快!C言語のcontinue文の使い方
君はまだC言語のdefineのすべてを知らない【マクロ、プリプロセス】
プログラミングのポインタをわかりやすく解説【C言語】
コードで見るC言語とC++の7つの違い
C言語などのブロックの表現
C言語などではブロックは波カッコ({}
)で表現されます。
{
int x = 0;
}
↑の場合、ブロック外ではx
を参照することができません。
x
の寿命は波カッコの内側で終わるからです。
入れ子になっているブロックは↓のように書きます。
{
int x = 0;
{
int y = 1;
}
}
変数x
のいるブロックから変数y
は参照できません。
しかし変数y
のいるブロックからは変数x
を参照できます。
また並列になっているブロックは↓のようになります。
{
int x = 0;
}
{
int y = 1;
}
この場合は変数x
のブロックからy
は参照できませんし、変数y
のブロックからもx
を参照できません。
Pythonなどのブロック
Pythonではブロックはインデントで表現します。
たとえばif
文のブロックを見てみましょう。
x = 1
if x == 1:
x *= 2
print(x)
↑の場合はif
に入れているインデントの範囲がそのif
文のブロックです。
しかしPythonではC言語などと違ってブロックごとに変数のスコープが決められていません。
変数は定義した段階でその関数の中から参照することができます。
def func():
if True:
x = 1
print(x) # 1
func()
たとえば↑のコードではif
文のブロックで変数x
を定義しています。
if
文はTrue
なのでif
文のブロックは実行されます。よって変数x
は定義されます。
そうするとブロックの外側のprint(x)
の参照でx
を参照することができます。
if
文の条件式がFalse
の場合はif
文のブロックは実行されません。よって変数x
も定義されません。
このようにブロックは言語ごとにその意味と作用が違っています。
JavaScriptなどのブロック
JavaScriptにもC言語と同じように波カッコのブロックがあります。
ただし変数の定義で見た場合、var
とlet
などでその振る舞いが変わります。
var
で定義した場合はスコープの外からでも参照することができます。
しかしlet
で定義した場合はその変数の寿命はそのスコープの範囲内に限定されます。
if (true) {
var x = 1;
let y = 2;
}
console.log(x); // 1
console.log(y); // ReferenceError: y is not defined
ブロックを使ったテクニック
C言語などでは波カッコによってブロックを作ることができます。
そのためこれを利用して変数のスコープを区切って処理を分割することができます。
void func(void) {
int x = 1;
// 色々な処理
{
int y = 0;
int z = 0;
// 色々な処理
}
x *= 2;
int y = 100;
int z = 200;
// 色々な処理
}
↑の途中の波カッコのブロックでは変数のスコープがその波カッコ内に限定されます。
そのため波カッコ内で定義したy
とz
はブロックの外に影響しません。
これを利用すると同名の変数名を同じ関数内で使いまわすといったことも可能です。
しかしこのようなブロックによる区切りを必要とする場合、その多くはブロックを関数にしたほうがコードが綺麗になります。
関数もブロックを作ってコードを区切り、変数のスコープを区切るということになるので、このようなコードを書くよりは処理を関数化したほうがいいかもしれません。
ブロックの表現に言語の特徴が出る
プログラミング言語のブロックの表現はその言語の特徴がよく表れます。
というか言語設計の違いがよく出るので面白いです。
C言語、C++、Java、Go、Rustなどではブロックは波カッコを使いますし、Pythonではインデント、Rubyはキーワードを使います。
波カッコを使ったブロックの表現は人気がありこのような色々な言語で採用されています。
Padという言語はちょっと変わっていてブロックはコロンとend
で表現されます。
def func():
puts("Hello, World!")
end
おわりに
今回はプログラミングのブロックとは何か? を解説しました。
ブロックについて理解することはプログラミング言語についての理解を深めることにも繋がります。
🦝 < ブロックで処理を区切ろう
🐭 < スコープも区切れる場合があるよ