高見知英の技術ログ

技術関係のログをQiitaから移行してきました。プログラミングのほか、使っているアプリの細かい仕様についてなど書いていきます。

Lazarusのユニットファイルの循環参照を避ける

このブログはLazarus(FreePascal)アドベントカレンダー22日目の記事です。

qiita.com

22日目はユニットファイルの循環参照について。

ほかの言語と同様、usesでお互いのユニットを参照したプログラムを作ると、循環参照が発生します。

f:id:TakamiChie:20211218182216p:plain
循環参照を示すメッセージ

お互いのユニットでお互いのユニットのメソッドを使うから、循環参照と言われてもなあ となることはたまにあるかと思います。

Pythonなどの場合、たとえばどちらかのimport文をファイルの先頭ではなく実際にクラスやメソッドを使う直前に書くことで循環参照を回避する なんてことも可能ですがPascalの場合uses句が書ける場所は限定されています。その場合どうするか。

implementation句に書く

その場合uses句をimplementation句に書くことで、循環参照を回避することができます。

Pascaluses句はinterface句に書かれていることが一般的なので一見してそちらにしか書けないかと思ってしまいがちですが、別にimplemnentation句に書いても良いようです。

なので、どちらかのユニットからの参照をそちらに移すことで、循環参照を回避できます。