Największymi błędami jest brak stosowania sekcji dostępu w deklaracjach klas; Zapoznaj się z tymi słówkami kluczowymi: Private, Protected, Public i Published;
Po drugie nie stosujesz bloków Try Finally, stąd przy zaistnieniu wyjątku spowodujesz wycieki pamięci, bo obiekty nie zostaną zwolnione z pamięci; Z tym blokiem także się zapoznaj - przydaje się to bardzo, jeśli instancję klasy tworzysz i zwalniasz w tym samym bloku kodu, np. w ciele jednej procedury/funkcji/metody/zdarzenia; Składnia jest prosta, poniżej podaję przykład dla obiekty klasy TIniFile
:
var
iniInput: TIniFile; // nasz obiekt pliku Ini
begin
// utworzenie w pamięci instancji klasy
iniInput := TIniFile.Create('filename.ext');
try
// operacje na obiekcie
// łącznie z tymi, które mogą wywalić program
finally
// zwolnienie instancji klasy z pamięci w każdym wypadku,
// nawet gdy operacje na obiekcie spowodują wyjątek
iniInput.Free();
end;
end;
Jeśli referencja do instancji klasy przechowywana jest np. w polu klasy, to tworzyć ją można w konstruktorze, a zwalniać w destruktorze klasy; Ważne jest, aby zadbać o zwalnianie wszystkiego co ręcznie tworzymy/alokujemy i zabezpieczyć kod tak, aby zawsze wszystko było ładnie sprzątane; Nawet, jeśli kod wywołuje wyjątki;
Możesz też skorzystać z bloku Try Except, aby zaistniałe wyjątki przechwytywać i odpowiednio obsługiwać; Oba wymienione bloki możesz zagnieżdżać, np. w poniższy sposób:
var
iniInput: TIniFile; // nasz obiekt pliku Ini
begin
// utworzenie w pamięci instancji klasy
iniInput := TIniFile.Create('filename.ext');
try
// operacje na obiekcie, które są bezpieczne
try
// operacje, które mogą wywalić program
except
// wyłapanie i obsługa zaistniałych wyjątków
end;
finally
// zwolnienie instancji klasy z pamięci w każdym wypadku,
// nawet gdy operacje na obiekcie spowodują wyjątek
iniInput.Free();
end;
end;
Dzięki temu będziesz miał większą kontrolę np. nad błędami, jakie może spowodować użytkownik (błędnie podane dane itd.);
Jest jeszcze jedna rzecz - jeśli korzystasz z bezparametrowych procedur/funkcji/metod, to zapisuj puste nawiasy przy ich wywołaniach; Czyli biorąc przykład z Twojego kodu:
LokalizacjaZnajdz.Execute;
metoda Execute
nie posiada parametrów, ale zaznacz w kodzie że jest to metoda:
LokalizacjaZnajdz.Execute();
Dzięki temu od razu będzie wiadomo, że dane wywołanie to metoda, a nie np. właściwość; To dobra praktyka, choć niedobrze, że składnia pozwala na pominięcie podania pustych nawiasów.