Je mi jasné, že s následujícím nebude hodně lidí souhlasit, ale je to jen moje zkušenost a nemusíte samozřejmě souhlasit.
Dlouhým vývojem a ve spolupráci se spolupracovníky nyní používáme určité principy při pojmenovávání všeho možného. Zkusím je nastínit a vysvětlit proč mi to vyhovuje i když se to někdy odlišuje od oficiální konvenze Delphi. Jedná se o tři oblasti: komponenty, soubory a proměnné + metody.
Komponenty
Vždycky jsem měl problém vymýšlet názvy komponent, zvláště v případě kdy spolu souvisejí, jako např. label nad editorem a povolující checkbox, nebo tlačítko toolbaru, položka menu a TAction.
Toto jsem vyřešil jednoduše prefixem (většinou 3 znakovým), např. lblFile, edtFile, chkFile, btnFile, actFile, miFile atd. Výhodou je opravdu velká přehlednost, odstranění problému s názvy, dobrá podpora v CnPack (např. přiřazením nové položce TMenuItem se podle jména akce přejmenuje položka menu na mi…) atd. Formulář má u mne prefix frm.
lblComment: TLabel;
memComment: TMemo;
btnComment: TButton;
Jinak toto je celkem používaný způsob - viz. CnPack.
Soubory
Tady to je jednoduché. Moje souboru začínají písmenem u v případě že neobsahují formulář, f v případě formuláře a d v případě datamodulu. Je do jednak z důvodu rychlosti vyhledání souboru v IDE a druhak z hlediska přehlednosti - hned tuším kde mohu soubor použít.
Proměnné a metody
Od komponent k proměnným je podle mne logický krok. Uznávám, že to je ale na diskuzi. Já používám jednoznakový prefix určující základní typ (i - integer nebo celočíselné typy, b - boolean, cr - currency, s - string, o - objekt) a maximálně jednopísmenný prefix určující kombinaci viditelnosti a druhu. A nemám rád velká písmena. A všechny identifikátory anglicky.
private
fiValue: Integer;
protected
fsComment: string;
public
iValue: Integer;
property piValue: Integer read fiValue write mSetValue;
private
foForms: TDictionary<string, TFormPlaceInfo>;
procedure mShowForm(t: TfrmBaseClass; iImageIndex: Integer; iMasterId: Integer = 0);
function moActiveForm: TfrmBase;
procedure mEnterColor(Sender: TWinControl);
function msFormKey(iCatalog, iMasterId:Integer):string;
procedure mProxyCommand(iCmd: Integer);
public
procedure gInvokeQueryStatus;
function gbCheckInput:Boolean;
end;
Podle mne je to přehlednější z hlediska porovnávání změn mezi verzí, je to čitelnější a lépe se v tom hledají podezřelá místa (mimo jiné proto, že jednoduše dokáži odlišit náš "podezřelý" kód).
procedure mTest(iValue:Integer);
var
sPrint: string;
begin
if pbMaximum then
gPrint(iValue)
else
mbReCheck(iValue);
sPrint := gsPrintEx(psValue);
end;
Když se na tento kód podívám, tak okamžitě, aniž bych o tom něco věděl je mi jasné co jsou proměnné třídy, co public nebo globální metody, kde se netestuje návratová hodnota, kde se pracuje s property (a tedy něco co se bude vykonávat při přiřazení a třeba by bylo vhodné zamezit opakovanému volání v cyklu) atd.
V žádném případě nechci někomu něco vnucovat. Každý ať si používá co chce.