実行時型チェックとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > 実行時型チェックの意味・解説 

実行時型チェック

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/02 16:40 UTC 版)

Oberon-2」の記事における「実行時型チェック」の解説

Oberon-2オブジェクトの型について、動的なチェックを行う機構いくつか用意されている。例えば、Bird オブジェクトインスタンスとして DuckCuckoo があったとき、Oberon-2 では実行時オブジェクト実際の型に応じた処理が可能である。 従来的な方法としては、「型束縛システム」を使った方法がある。第二方法として、WITH 文を使った方法がある。これは、変数動的な派生型直接チェックするのである。どちらの場合も、派生型特定したら、プログラマはその派生型適切な型束縛プロシージャや型束縛変数を使うことができる。以下に具体例を示す。 なお、Oberon-2 の WITH 文と PascalModula-2 の WITH 文は無関係である。以下のメソッドではレコードフィールドへのアクセス略記しているが、OberonOberon-2 では実際にこのような記法は使わない。 型束縛 MODULE Birds; TYPE Bird* = RECORD sound* : ARRAY 10 OF CHAR; END;END Birds.(*-------------------------------------*)MODULE Ducks; IMPORT Birds; TYPE Duck* = RECORD(Birds.Bird) END; PROCEDURE makeSound*( VAR bird: Duck ); BEGIN COPY("Quack!", bird.sound); END makeSound;END Ducks.(*-------------------------------------*)MODULE Cuckoos; IMPORT Birds; TYPE Cuckoo* = RECORD(Birds.Bird) END; PROCEDURE makeSound*( VAR bird: Cuckoo ); BEGIN COPY("Cuckoo!", bird.sound); END makeSound;END Cuckoos. WITH 文 MODULE Test; IMPORT Out, Birds, Cuckooo, Ducks; TYPE SomeBird* = RECORD ( Birds.Bird ) END; VAR sb : SomeBird; VAR c : Cuckoos.Cuckoo; VAR d : Ducks.Duck; PROCEDURE setSound*( VAR bird : Birds.Bird ); BEGIN WITH bird : Cuckoos.Cuckoo DO bird.sound := "Cuckoo!"; | bird : Ducks.Duck DO bird.sound := "Quack!"; ELSE bird.sound := "Tweet!"; END; END setSound; PROCEDURE MakeSound* ( VAR b : Birds.Bird ); BEGIN Out.Ln; Out.String( b.sound ); Out.Ln; END MakeSound;BEGIN setSound(c); setSound(d); setSound(sb); MakeSound(c); MakeSound(d); MakeSound(sb);END Test. POINTER MODULE PointerBirds; IMPORT Out; TYPE BirdRec* = RECORD sound* : ARRAY 10 OF CHAR; END; DuckRec* = RECORD(BirdRec) END; CuckooRec* = RECORD(BirdRec) END; TYPE Bird = POINTER TO BirdRec; Cuckoo = POINTER TO CuckooRec; Duck = POINTER TO DuckRec; VAR pb : Bird; pc : Cuckoo; pd : Duck; PROCEDURE makeDuckSound*( bird : Duck ); BEGIN COPY("Quack!", bird.sound) END makeDuckSound; PROCEDURE makeCuckooSound*( bird : Cuckoo ); BEGIN COPY("Cuckoo!", bird.sound) END makeCuckooSound; PROCEDURE makeSound*( bird : Bird ); BEGIN WITH bird : Cuckoo DO makeCuckooSound(bird); | bird : Duck DO makeDuckSound(bird) ELSE COPY("Tweet!", bird.sound); END; END makeSound;BEGIN NEW(pc); NEW(pd); makeCuckooSound( pc ); makeDuckSound( pd ); Out.Ln;Out.String( pc^.sound );Out.Ln; Out.Ln;Out.String( pd^.sound );Out.Ln; makeSound( pc ); makeSound( pd ); Out.Ln;Out.String( pc^.sound );Out.Ln; Out.Ln;Out.String( pd^.sound );Out.Ln;(* -------------------------------------- *)(* Pass dynamic type to procedure *) pb := pd; makeDuckSound( pb(Duck) ); Out.Ln;Out.String( pb^.sound );Out.Ln; pb := pc; makeCuckooSound( pb(Cuckoo) ); Out.Ln;Out.String( pb^.sound );Out.Ln;(* -------------------------------------- *) makeSound(pb); Out.Ln;Out.String( pb^.sound );Out.Ln; pb := pd; makeSound(pb); Out.Ln;Out.String( pb^.sound );Out.Ln;(* -------------------------------------- *) NEW(pb); makeSound(pb); Out.Ln;Out.String( pb^.sound );Out.Ln; END PointerBirds. 第三方法として、IS 演算子使った方法もある。これは、等号(=)不等号(>)などと同じ優先順位関係演算子であるが、動的な型の検査を行う。しかし、上述2つ方法とは異なり検出した派生型によって処理を振り分けることはできない

※この「実行時型チェック」の解説は、「Oberon-2」の解説の一部です。
「実行時型チェック」を含む「Oberon-2」の記事については、「Oberon-2」の概要を参照ください。

ウィキペディア小見出し辞書の「実行時型チェック」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「実行時型チェック」の関連用語

実行時型チェックのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



実行時型チェックのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのOberon-2 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS