「ブロック (プログラミング)」の版間の差分

削除された内容 追加された内容
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
→‎概要: 内部リンク修正
13行目:
自然言語の段落と異なり、ブロックは[[ネスティング|入れ子]]にすることができる({{独自研究範囲|date=2019-04|つまり、言語学でいう「語」と「句」のほうに近い、とはそういうことである}})。すなわち、ブロック内にブロックを作成することができる(正確な理解としては、ブロックは文の一種であり、ブロックの中身は文の並びであるから、ブロックの中身にまたブロックが現れることもできる、ということになる。プログラミング言語の学習においては、絶対的に不正確な理解に直結する自然言語からの類推ではなく、プログラミング言語は[[形式言語]]なのであるから、[[バッカス・ナウア記法|BNF]]など形式的な(フォーマルな)仕様などを理解できるように努めたほうが、結果として早道である)。
 
[[C言語]]などでは、ブロックは[[変数 (プログラミング)|変数]]の[[スコープ (プログラミング)|スコープ]](可視範囲)の区切りである。すなわち、あるブロック内で定義された変数には、[[ポインタ (プログラミング)|ポインタ]]等によりエスケープされない限り([[エスケープ解析]]を参照)、ブロック外からはアクセスできない。[[JavaScript]] ([[ECMAScript]]) は、以前はブロックは変数のスコープに影響しないという仕様だったが、ECMAScript 6th Edition (ECMAScript 2015) で導入されたlet宣言 (let declaration) による変数は、それが宣言されたブロックの最後までが可視範囲となる。
 
自動変数([[ローカル変数]])の場合、ブロックによって変数の記憶域期間 (storage duration) が決まる<ref>生存期間、寿命 (lifetime) あるいはエクステント (extent) とも。</ref>。一方、静的変数の記憶域期間は、ブロックによって左右されない。