甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション17.1 - 言語定義属性

Adaチュートリアル セクション17.1 - 言語定義属性

E-mail Print PDF

セクション 17.1 - 言語定義属性

型それぞれに対し、Adaは一連の操作と、「言語定義属性」と呼ばれる値を事前に定義しています。これらを使うためには、その型の名前(もしくはオブジェクト)を入力し、適用する属性をチック(シングル・アポストロフィー)でつけます。そうすると、その名前の属性となります。 RM appendix K がすべての言語定義属性とその定義についてリストしています。

 

 

実際のところ、私たちはひとつの属性を見てきています。: 'Classです。なにかXという名前の型があった場合、フレーズX'ClassはXを含むXから導出されるすべての型のクラスを参照します。

三種類のとても共通した属性は、'First、'Last、'Rangeです。Xという名前のなにか型が与えられた場合、X'Firstは、型Xの最初の正式な値を指します。属性'Lastは、与えられた型の最後の正式な値を参照します。属性'Rangeは、'Firstと'Lastの間の範囲を参照し、しばしばループで使われます。たとえば、もしRepair_Statusが、多くの値の数え上げ型の場合、プログラマーは、次のようにループを書くことができます。:

  for I in Repair_Status'Range loop
    -- Do something here.
  end loop;

ある属性は、ほかのサブプログラムを呼び出すことができるパラメーターを受け取るサブプログラムである場合があります。ひとつ単純な属性は、X'Imageです。これは、型Xの値を取り、その値を表現する文字列を返します。Xは、スカラー型である必要があります。 (例えば、整数型、浮動小数点型、数え上げ型などです) ここでサンプルコードを示します。:

  procedure Demo( Value : Integer) is
    Text_Rep : String := Integer'Image(Value);
  begin
    Put(Text_Rep);
  end Demo;

ここでいくつか有益な属性があります。:

  • 'Imageの逆は、'Valueです。 属性'Valueは、文字列を取り、そのスカラー値を返す関数です。
  • 属性X'Val は、整数を取り、その整数と同じ位置の数字のX型の値を返す関数です。これは、キャラクター型に便利です。例えば、Latin-1 キャラクターセット(ASCIIに対応します)における位置32は、スペースなので、Character'Val(32)は、空白文字となります。'Valの逆は、'Posです。
  • 属性 X'Accessでは、Xはサブプログラム名であるか、Xを「ポインティングする」アクセス値を生成する変数です。
  • 属性 X'Min と X'Max は、型Xの二つのスカラー値、最小値 ('Min) と最大値 ('Max)を返します。
  • 属性 X'Round は、型Xの数値を近似の整数に丸めます。もし、それが正確に二つの整数の中間値の場合は、これはゼロから遠い値に丸められます。
  • いくつかの属性値は、動作しているマシンについての情報を与えます。これらには、'Size (これは何かを格納するのに使われるビット数を与えます)、 'Address (これは、ストレージのアドレスを与えます)、'Bit_Order (これは、ビットのオーダーを与えます)。これらは、物理デバイスとのインターフェースや、アセンブラ言語とのやり取りにおいて時に有益です。時には、別の目的のためにも有益な場合があります。

同様に、いくつか別の属性が存在します。

ある属性は、プログラマーによって設定することができます。これは主に、低レベルの装置をサポートするために使われます。例えば、ハードウェア・インターフェースへの参照値を作る場合などです。 ( 'Addressの設定により) もしくは、与えられた型のサイズを設定します。このためのAda 95の書式は、次のように表現されます。:

  for name'attribute_name use expression;

例えば、もしプログラマーのマシンが、8ビットの値として、アドレスFFFF_0000から生の温度を読み込むことができる場合、プログラマーは特定のアドレスにあるCurrent_Temperatureを指定するようにAdaに命じることによって、「Current_Temperature」変数の値を読み込むことにより、温度を読むことができるのです。ここで、この場合どのようにコーディングするかサンプルを示します。:

  type Temperature_Reading is 0 .. 2**8 - 1;
  for Temperature_Reading'Size use 8;

  Current_Temperature : Temperature_Reading;
  for Current_Temperature'Address use 16#FFFF_0000#;
  pragma Volatile(Current_Temperature);  -- We haven't discussed this.
  -- Now just read from "Temperature" as a variable.

Adaコンパイラーは、ティック(’)の前後の空白を取り扱うことができますが、そこには空白を置かないようにしてください。そうすれば、実際のAdaを読み取るツール(たとえば、準高機能エディターや、高機能プリンターなど)が、属性と文字定数の違いを判別することができます。

出典: http://www.adahome.com/Tutorials/Lovelace/s17s1.htm

Last Updated on Wednesday, 09 January 2013 12:00  

ニュース速報

株式会社リナックスアカデミー主催、IPA(独立行政法人 情報処理推進機構)共催

Hadoop利用者向け研修「Hadoopの特徴と周辺技術および活用事例」