この記事はDelphi Advent Calender 2015の6日目の記事です。
やましょうさんお疲れ様でした。
C++ Builder XE4
+ Delphi XE関連
調査のとっかかり
設定項目を入力するフォームを用意したとします。その名前はoptionとします。
( 「設定」の英語訳については: Properties / Options / Settings and Preferences / Configuration @ Visual Studio )
ここで、Form1のプロパティであるNameをoption
にしたとします。
次に、ユニットファイル名をoption.cpp
で保存しようとすると以下のエラーがでます。
フォームまたはモジュール option はすでにプロジェクトに登録されています。
これがこの記事で書こうと思うキーワードについてのとっかかりです。
キーワードの定義
ここでいう「キーワード」というのは、以下のようなものを指します。
- ユニットファイル Unit1.cpp の
Unit
- フォーム名 Form1 の
Form
キーワードをつけることで、この記事の背景にある、名前がかぶる問題は回避できます。
では、どういうキーワードをつけるのが今後のソースメンテナンスにとってよいのでしょうか?
キーワード例
自分がこれまで扱ってきたものとそのキーワード例は以下の様なものです。
- ファイル > フォームのユニットファイル : Unit
- ファイル > スレッドファイル : Thread
- ファイル > 言語リソース : 任意 (LangResxxxなど)
- ファイル > C++ クラス : 任意 (Utilxxx, Calcxxx, ...)
- ファイル > C 関数群 : 任意 (Utilxxx, Calcxxx, ...)
- ファイル > .cppなしのヘッダファイル(.h) : 任意
- ファイル > プロジェクト(.cbprojなど) : 任意
- コンポーネント > フォーム : Form
「任意」との記載ではその時々で変えていますが、括弧内のものを使うことが多いです。
スレッドファイル(新規作成 -> スレッドオブジェクト)はデフォルトではユニットとして新規作成されますが、フォームのユニットと区別したいためにキーワードをThreadとしています。
C++クラスとC関数群は同じようなキーワード(Util, Calcなど)としていますが、C++とCは拡張子が変わりますので、区別できると考えています。
また、同時に同じ名前(UtilUDP.cppとUtilUDP.c)はないと考えていますが、あるようになった場合には別途検討することになります。
ただし、別の理由でC++クラスとC関数群を分けてグループ化したくなった場合は、キーワードの再検討をすることになります。
.cppなしのヘッダファイル(新規作成 -> ヘッダー)はデフォルトではFileキーワードが付きますが、ファイルにFileキーワードを付ける意味がないため、任意としています。
ヘッダーファイルについては、キーワードがない方が良い時もあり、キーワードなしにしている場合もあります。
キーワード選択の根拠
IDEで「それ」を作った時に最初に付けられる名前に従っていると、記憶にたよらなくてよくなる、という考えでした。
しかしながら、こうして整理していきますと、IDEのデフォルトをキーワードとして使っているものはUnit, Formのみで、他は別途決めたキーワードということをこの記事を書きながら気づきました。
キーワードの必要性
ここでキーワードをつける理由に戻りますと「名前がかぶることによりIDEが処理できなくなることを防ぐ」というのを大きな理由としています。
反対に、支障がない限りキーワードなしにしていいという考え方もあります。
キーワードをつける他の利点としては以下のようなものを考えています。
- キーワードをつけることで、それを見つけやすくする
- キーワードをつけることで、その機能をわかりやすくする
- キーワードをつけることで、プロジェクトの構造をわかりやすくする
ソースのメンテナンス時に有効に働くことを期待しています。
僕自身、ソースメンテナンスの時に「スレッドxxxを読みたい」「フォームxxxのデザインをすぐに見たい」「C++関数xxxのこの処理どうやっていただろう」などその時々にやりたいことを考えたあとに、すぐに関連するファイルを開きたい。そのためキーワード付けを意識しています。
考えている状況としては、1プロジェクトにおいてソース(.cpp)が最大で40種類あり、そういうプロジェクト数が50を超す時、10年以上メンテナンスしやすいように。
ソースの構造を書いたドキュメントを用意するのも手ですが、ここではそのドキュメントを書かない場合で検討しています。
最後に
他の人がどういう名前付けをしているのかを知りたいというのがこの記事を書いた理由です。
コメント欄に「こういう付け方しているよ」や「こういう名前付けの情報があるよ」、「キーワードは考えない」、「別ドキュメントにしている」などをいただければ幸いです。
Project JEDI や Object Pascal Style Guide などを斜め読みしましたが、キーワードについてはコンポーネントのキーワード(TLabelのキーワードなど)は記載されていましたが、自分が知りたい上記のような情報は見つけられていません。