ブロック (プログラミング)

プログラミングにおけるブロックとは



プログラミングにおけるブロックとは、コードのまとまり、特に複数の文をグループ化したものを指します。これは、Scratchのようなブロック状のパーツを組み合わせるプログラミングとは異なり、コードの構造を形成する基本的な要素です。

ブロックの概念



文 (statement) から成るプログラミング言語において、ブロックは複数の文をまとめて一つの複文 (compound statement) として扱えるようにします。これは、自然言における段落に似ていますが、より厳密な構造を持ちます。プログラミング言語における「文」と「ブロック」の関係は、言語学で言う「」と「」の関係に近いです。

重要な点として、ブロックは入れ子にできます。つまり、ブロックの中にさらにブロックを作成できます。これは、ブロックが文の一種であり、ブロックの中身は文の並びであるためです。この入れ子構造は、コードをより整理し、構造化するのに役立ちます。

プログラミング言語を学ぶ際には、自然言からの類推ではなく、形式言語として理解することが重要です。BNFのような形式的な仕様を理解することで、より正確な理解が得られます。

ブロックとスコープ



C言語などの言では、ブロックは変数のスコープ(可視範囲)を区切ります。あるブロック内で定義された変数は、原則としてそのブロック外からはアクセスできません。これは、変数の名前の衝突を防ぎ、コードの可読性と保守性を高めるのに役立ちます。

JavaScript (ECMAScript) では、以前はブロックがスコープに影響しませんでしたが、ECMAScript 6th Edition (ECMAScript 2015) で導入された`let`宣言により、変数が宣言されたブロックの最後までがスコープとなります。

自動変数(ローカル変数)の場合、ブロックによって変数の記憶域期間 (storage duration) が決まります。一方、静的変数の記憶域期間は、ブロックによって左右されません。

ブロックと他の概念



SmalltalkやRubyにおける「ブロック」は、複文とは異なり、メソッド呼び出しに付加する特別な引数のようなものです。これはクロージャに似たもので、Rubyではオブジェクトではありませんが、Smalltalkではオブジェクトです。Rubyにおける複文は、`if-end`のように、`if`がコードの塊の開始キーワードとして機能するEiffel風のスタイルです。

ブロックの構文



ブロックの記述方法は、言によって異なります。

括弧で囲むC言語Javaなど
キーワードで囲むPascalVisual BasicRubyAdaなど
インデントで区別するPythonなど
軽量構文と冗構文:F#のように、構文を選択できる言もあります。

ブロックの例



以下は、入れ子になったブロックの例です。


{
int x = 10;
{
int y = 20;
// xとyはこのブロック内で有効
}
// xはこのブロック内で有効、yは無効
}


ブロッキング処理



ブロッキング処理とは、処理が完了するまで呼び出し元を待たせる処理のことです。対照的に、ノンブロッキング処理は、処理がすぐに完了しない場合に、エラーを返して呼び出し元を待たせない方式です。

たとえば、ネットワーク通信において、ブロッキング処理はデータが到着するまでプログラムを停止させます。ノンブロッキング処理では、データがまだ到着していなくても、プログラムは次の処理に進めます。

同期処理は、呼び出しが完了すると同時に処理結果を通知します。一方、非同期処理は、処理を開始した後に、後で(イベントやコールバック関数を使って)結果を通知します。

ファイルなどのストレージ入出力処理 (I/O) には、通常、非同期I/Oが用いられます。

関連用



構造化プログラミング
スコープ (プログラミング)
クロージャ
基本ブロック

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。