Categories: 未分類

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

Block_(programming)

「コードブロック」はIDEについては、Code :: Blocksを参照してください
。ブロックベースのプログラミングについては、ビジュアルプログラミング言語を参照してください
 「ブロック」プログラミング 
コンピュータプログラミング、ブロックまたはコードブロックまたはコードのブロックは、の字句構造であるソースコード一緒にグループ化されます。ブロックは、1つ以上の宣言とステートメントで構成されます。他のブロック内にネストされたブロックを含むブロックの作成を可能にするプログラミング言語は、ブロック構造化プログラミング言語と呼ばれます。ブロックは、制御構造がブロックから形成される構造化プログラミングの基本です。
ブロックには2つの機能が1つのステートメントとして扱うことができるようにステートメントをグループ化すること。また、名前のスコープを定義して、他の場所で使用されている同じ名前と区別します。ブロック構造化プログラミング言語では、同じ名前で宣言されたオブジェクトによってマスクされていない限り、外側のブロックで名前が付けられたオブジェクトは内側のブロックの内側に表示されます。

コンテンツ
1 歴史
2 構文
3 制限事項
4 基本的なセマンティクス
5 巻き上げ
6 も参照してください
7 参考文献

歴史
ブロック構造のアイデアは、最初のオートコードの開発中に1950年代に開発され、Algol58およびAlgol60のレポートで形式化されました。Algol 58は、制御フローのみに関連する「複合ステートメント」の概念を導入しました。 Algol 60の構文とセマンティクスを説明したその後の改訂レポートでは、ブロックとブロックスコープの概念が導入されました。ブロックは「一連の宣言とそれに続く一連のステートメントで構成され、開始と終了で囲まれています。 。」ここで、「すべての宣言はこのようにブロックに表示され、そのブロックに対してのみ有効です。」

構文
ブロックは、異なる言語で異なる構文を使用します。2つの広い家族は次のとおりです。
ALGOLのブロックは、キーワードで区切られている家族「begin」と「end」または同等。ではC、ブロックは中括弧で区切られ- 「{」と「}」。ALGOL68は括弧を使用しています。
括弧-” (“および ” )”は、MS-DOSバッチ言語で使用されます
Pythonのようにインデント
progまたはlet(Lispファミリのように)などの構文キーワードを使用したS式
1968年(とALGOL 68)、その後にエドガー・ダイクストラの1974ガード付きコマンド言語条件と反復コードブロックは、代わりにブロックの予約語で終端されて逆転さ:例えば、およびif ~ then ~ elif ~ else ~ ficase ~ in ~ out ~ esacfor ~ while ~ do ~ od

制限事項
宣言付きのブロックをサポートする一部の言語は、すべての宣言を完全にサポートしているわけではありません。たとえば、多くのC派生言語では、ブロック内の関数定義(ネストされた関数)は許可されまた、その祖先であるAlgolとは異なり、Pascalは、既存のブロックの開始と終了内に独自の宣言を持つブロックの使用をサポートし複合ステートメントのみが、ステートメントのシーケンスをif、while、repeatおよびその他の制御ステートメントにグループ化できるようにします。

基本的なセマンティクス
ブロックの意味的な意味は2つまず、ユニットとして扱うことができる任意の大きくて複雑な構造を作成する方法をプログラマーに提供します。次に、プログラマーが変数のスコープを制限し、場合によっては宣言されている他のオブジェクトを制限できるようにします。
Fortran IVやBASICなどの初期の言語では、ステートメントブロックや制御構造はありませんでした。条件付きは、条件付きgotoステートメントを使用して実装されました。
C 言語: ANSI 標準 FORTRAN 66 C
INITIALIZEの 値は TO BE CALCULATED
PAYSTX =を 。FALSE 。
PAYSST = 。FALSE 。
TAX = 0.0
SUPTAX = 0.0 C
SKIP TAXの 控除 IF従業員が 稼い LESS THAN TAXの THRESHOLDを
IF (賃金 。LE 。 TAXTHR ) GOTO 100
PAYSTX = 。TRUE 。
TAX = (賃金 – TAXTHR ) * BASCRT C
SKIP SUPERTAX 控除 IF従業員が 稼い LESS THAN SUPERTAXの THRESHOLDを
IF (賃金 。LE 。 SUPTHR ) GOTO 100
PAYSST = 。TRUE 。
SUPTAX = (WAGES – SUPTHR ) * SUPRAT 100 TAXED = WAGES – TAX – SUPTAX
プログラムの論理構造は言語に反映されておらず、特定のステートメントがいつ実行されるかを分析するのは難しい場合が
ブロックを使用すると、プログラマーはステートメントのグループを1つの単位として扱うことができ、このスタイルのプログラミングで初期化に表示する必要があったデフォルト値は、ブロック構造を使用して、決定の近くに配置できます。
{言語:Jensen and WirthPascal }賃金> tax_thresholdの場合、 paystaxを開始します:= true ; 税:= (賃金- tax_threshold )* TAX_RATE {ブロック構造は、簡単にコードができるか見ることになり
、わかりやすくするためにリファクタリングすること、また、行うことが容易になり
、内側の条件付きの構造を簡単に移動することができるため
のアウト完全に外部条件付きであり、そうする
ことの効果は簡単に予測されます。}場合賃金> supertax_threshold次いで開始pays_supertaxを:=真。supertax := (賃金- supertax_threshold )* supertax_rateの終わり他の開始pays_supertaxを:= falseを。supertax := 0 end end else begin paystax := false ; pays_supertax := false ; 税金:= 0 ; スーパータックス:= 0終了; 課税:=賃金-税金-スーパータックス;
上記のPascalのフラグメントでブロックを使用すると、プログラマーの意図が明確になり、結果のブロックを条件付きステートメントのネストされた階層に結合できるようになります。コードの構造は、プログラマーの考えをより厳密に反映しており、理解と変更が容易になっています。
上記のソースコードは、内側のifステートメントを外側のステートメントから完全に取り出し、2つのブロックを次々に配置して連続して実行することにより、さらに明確にすることができます。この場合、意味的にはほとんど違いはなく、読みやすさのためにインデントによってサポートされるブロック構造の使用により、プログラマーはコードを簡単にリファクタリングできます。
原始言語では、変数は広い範囲を持っていました。たとえば、IEMPNOと呼ばれる整数変数がFortranサブルーチンの一部で使用され、従業員の社会保障番号(ssn)を示す場合がありますが、同じサブルーチンの保守作業中に、プログラマーが誤って同じ変数IEMPNOを使用する場合が別の目的であり、これにより、追跡が困難なバグが発生する可能性がブロック構造により、プログラマーはスコープを分レベルに制御することが容易になります。
;; 言語:R5RS標準スキーム(let ((empno (ssn-of employee-name ))) (while (is-manager empno ) (let ((employees (length (underlings-of empno ))))(printf “〜a has従業員は彼の下で働いて〜:〜%」 従業員名の 従業員)(のために、それぞれ(ラムダ(EMPNO )
;;このラムダ式の中で変数EMPNOはSSNを指し、
下っ端の;;外式の変数EMPNOを ;;マネージャーのssnを参照すると、シャドウされます。(printf “Name:〜a、role:
〜a〜%” (name-of empno )(role-of empno )))(underlings-of empno )))) )
上記のSchemeフラグメントでは、empnoを使用して、マネージャーとその下層の両方をそれぞれのssnで識別しますが、下層のssnは内部ブロック内で宣言されているため、マネージャーの社会保障番号。実際には、明快さを考慮すると、プログラマーはおそらく個別の変数名を選択することになりますが、プログラマーには選択肢があり、不注意でバグを導入することはより困難です。

巻き上げ
一部の言語では、囲まれたブロック内であっても、関数スコープで変数を宣言できます。たとえば、Javascriptでは、で宣言された変数にvarは関数スコープが

も参照してください

 コンピュータプログラミングポータル
基本ブロック
ブロックスコープ
閉鎖(コンピュータープログラミング)
制御フロー

参考文献
^ Perlis、AJ ; サメルソン、K。(1958)。「予備報告:国際代数言語」。ACMの通信。米国ニューヨーク州ニューヨーク:ACM。1(12):8–22。土井:10.1145 /377924.594925。
^ バッカス、JW ; バウアー、フロリダ州; グリーン、J。; Katz、C。; マッカーシー、J。; ペルリス、AJ; Rutishauser、H。; サメルソン、K。; ヴォクワ、B。; ウェグスタイン、JH; van Wijngaarden、A。; ウッダー、M。(1960年5月)。ナウア、ピーター(編)。「アルゴリズム言語ALGOL60に関するレポート」。3(5)。米国ニューヨーク州ニューヨーク:ACM:299–314。土井:10.1145 /367236.367262。ISSN 0001から0782まで。   “

admin

Share
Published by
admin

Recent Posts

Bqosta

Bqosta Bqosta(ア…

4週間 ago

Bqerzla

Bqerzla Bqerzla…

4週間 ago

Bqarqacha

Bqarqacha Bqarq…

4週間 ago

Bqaatouta

Bqaatouta  「Bqa…

4週間 ago

Bqaa Safrine

Bqaa_Safrine Bq…

4週間 ago

ベルギー郵政

Bpost  「Bpost」 …

4週間 ago