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

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

プログラミング言語におけるブロックblock)とは、複数個(0個以上~2個以上。言語により異なる)のなどのコードのまとまりのことである。自然言語における段落に似ている。複文(compound statement)とも言う。

C言語に代表される、{}で囲まれるスタイル、ALGOLにはじまり、その影響を受けたPascalAdaなど、beginendで囲むスタイル、Pythonなどのオフサイドルールによるスタイルなどがある。

自然言語の段落と異なり、ブロックは入れ子にすることができる。すなわち、ブロック内にブロックを作成することができる(正確な理解としては、ブロックは文の一種であり、ブロックの中身は文の並びであるから、ブロックの中身にまたブロックが現れることもできる、ということになる。プログラミング言語の学習においては、絶対的に不正確な理解に直結する自然言語からの類推ではなく、プログラミング言語は形式言語なのであるから、BNFなど形式的な(フォーマルな)仕様などを理解できるように努めたほうが、結果として早道である)。

C言語などでは、ブロックは変数スコープ(可視範囲。生存期間(エクステント)とは違うので注意)の区切りである。すなわち、あるブロック内で定義された変数には((前置単項 & 演算子と)ポインタ等により、エスケープされない限り(エスケープ解析を参照))ブロック外からはアクセスできない。JavaScriptのように、ブロックが変数のスコープに影響しない言語もある。

SmalltalkRubyにある似たようなものは、ブロックと呼んではいるが、複文ではない別のもので、メソッド呼び出しに付加する特別な引数のようなもの、である。Rubyではそれ自体はオブジェクトではないが、Smalltalkではオブジェクトである。なお、Rubyにおける複文に相当するものとしては、if~endなどにおいて、ifそれ自体がコードのかたまりの開始のキーワードとして機能するというEiffel風のスタイルを採っている。

[ソースを編集]

入れ子になったブロックの例。

int main()
{
  int x = 1;

  if (x == 1)
  {
     x++;
  }
  return 0;
}

関連項目[ソースを編集]