2.1変数と識別子(Name)


Variable


A variable can be characterized by a collection of properties, or attributes, the most important of which is type. The design of the data types of a language requires that a variety of issues be considered : scope, lifetime of variables, type checking, and initialization
  プログラミング言語を開発する過程で,信頼性を高めるために変数のScope,Lifetime,Type&Type Checking,Initializationなどの概念が出現し始める.
int i;					// '변수'란, 본디 '속성의 집합'이다.
main() {
	int j = 5;			// 변수의 Name과 Type, 그리고 Initialization
}    
sub() {
	int k;				// 변수 k는 sub라는 모듈의 시작과 끝에서만 접근 가능 (Lifetime)
    j = k;				// main의 local variable이므로 불가 (Scope)
    i = k;				// global variable이므로 가능 (Scope)
}
~>本Chapter 2でこれらの内容について議論する.
変数:Von-Neumann計算モデルに基づくプログラミング言語では、変数は「別のメモリセルに名前を付けた名前とその空間」です.
  • オペレーティング言語:Von-Neumannコンピュータアーキテクチャに基づく抽象的な結果.
  • メモリ:コマンドとデータを格納します.
  • CPU:メモリにアクセスし、含まれるデータを変形するなどの操作を行います.
  • オペレーティング言語でVariableとは何ですか?
  • 変数:メモリユニット抽象(メモリユニット抽象)
  • 属性の集合と見なすことができる.
  • の場合、「属性」は「値」、「データ型」、「Scope」、「Lifetime」、「初期化」などを表す.
  • 、すなわち、変数は、その変数の値、データ型、Scope、Lifetime、Initialization等の集合である.
  • のValueなどのプロパティは随時変更できます.
  • とは対照的に,Typeなどの属性はいったん決定されると変化しない.(Static Binding)
  • 閑話)公開された声明的な言語には可変の概念があるべきではない.変数自体に有効な属性が含まれているためです.(後処理)
  • 言語を設計する際には、言語の用途に応じて、どのデータ型が必要かを実用的な観点から考慮しなければならない.
    たとえば、アセンブリ言語でマトリクス計算を実行するプログラムを作成します.かなり複雑になります.
  • 例えば、
  • 、CにはString Data Typeはありません.Cデータ構造を並べて文字列を処理する.逆にPythonにはString Data Typeが存在する.
  • ex)Pythonでは、「a=」を「a」という変数に入れ、後で「a=」「University」のように簡単に代入することができます.String Data Typeが存在するためです.
  • は、ダイナミックストレージBindingによって実現され、後述する.

  •   変数は代表的に6つの属性で表すことができる.name、address、value、type、life、scopeがそれらです.

    name

  • 変数の名前は、通常「識別子」を表します.以下、さらに説明する.
  • address


  • この変数を格納するメモリ領域を示します.

  • 多くの高度な言語では、同じnameを異なるメモリ領域に割り当てることができます.ex)最も代表的なC言語!Scopeコンセプトは、より詳細に説明されます.

  • 1つまたは複数の可変名前で特定の単一メモリセルにアクセスできる場合、これらの名前は「Alias」と呼ばれます.

  • メモリセルがaとbの名前で同時に参照できる場合、Aliasが生成されます.

  • Chapter 1の位置付けに記述されているAliasingはこの意味である.

  • 代表的なのはC言語の一般変数&ポインタ変数関係です.FORTRANのEQUIVALENCEコマンドやPascalのVariant Record Structureなど.

  • また、Subprogram(関数)のParameterからCallerの変数に直接アクセスできる言語もあります.これはAliasingに相当します.Call by ReferenceはDefault Referenceメソッドの言語たち!

  • これらのAliasingは可読性、メンテナンスの面で非常に悪い機能です.(デバッグが困難になるため)
  • Type

  • 変数のタイプは、変数が有する可能性のある値の範囲と、その変数に対して実行可能な操作のタイプを決定する.
  • Value


  • これは、Variableが表す「抽象メモリセル」が実際に持っているコンテンツを意味します.

  • l-Value:Left Value、変数のアドレスを表します.

  • r-Value:Right Valueを表し、変数の値を表します.
    ex) a = a + 1;
    ~>"="左側のaはl-value,右側のaはr-value
  • Scope

  • 後続説明
  • Name


    ≪名前|Name|oraolap≫:変数、ラベル、サブルーチン、フォーマット・パラメータなどの特定のエンティティを識別する文字列.
    ~>nameは良好な可読性を持つことが重要である.変数/関数/ラベル/パラメータなどの意味をうまく反映できるかどうかはプログラマーの重要な素質の一つである.
  • プログラミング言語設計の場合、Nameには次のオプションがあります.
  • name、最大長
  • Underbar/Underscore()可用性
  • 「大文字と小文字の区別」
  • Special Words、Reserved Words、Keywordsなどが利用可能かどうか
  • Nameの形式

  • Nameの長さ
  • の初期プログラミング言語では、単一の文字のみで名前を付けることができます.
  • FORTRAN 1には最大6文字を含めることができます.
  • COBOL:最大30文字まで書くことができます.
  • Java、Adaなどの現代言語:No Limit、事実上制限はありません.
  • Case Sensitive
  • C/C++またはモジュール化などの言語には大文字と小文字を区別する機能があります.
  • の大文字と小文字を区別する機能は可読性の面でよくないと考える人が多い.
  • Special Words対応

  • Special Wordとは、その言語に特別な意味を持つ単語のこと.これらの特殊なWordは、コマンドラインを区切ったり、範囲を決定したりするときに使用されます.Keywordはここに相当します.
  • Keyword:特定のコンテキストでのみ使用可能な単語を指します.

  • Reservice Word:Keywordを含む様々な特殊なWordは名前で「予約しました.」属性を表します.
    これは
  • の可読性を増加させる機能である.