Usuwanie "pustych" procedur w Delphi 12

0

Witam i od razu proszę nie linczować, jeśli pytam o coś oczywistego. Od kilku godzin walczę z Delphi 12 a dokładniej z tym, że przy zapisie usuwa mi puste procedury czyli takie które zawierają tylko Begin i end. I już nie wiem co jest nie tak. Instalowałem od początku, i aktualizowałem i nic to nie dało. Komputer sprawdziłem, Wirusów nie ma, konfliktów klawiatury też nie i nadal to samo. Pomocy. Wróciłem do programowania po 25 latach przerwy i czuję się przez ten problem jeszcze gorzej niż laik.

4

Niestety to jest domyślnie zachowanie IDE i nie da się tego zmienić. Jednak takie zachowanie dotyczy tylko pustego zdarzenia które jest automatycznie generowane przez IDE z poziomu np. inspektora obiektów. Jeśli napiszesz własną funkcję/procedurę, to Delphi Ci niczego nie usunie.

A po co Ci puste zdarzenia?

Jednak jeśli chciałbyś na później sobie stworzyć puste zdarzenie zawsze możesz dać tam komentarz w stylu:

procedure TForm1.FormCreate(Sender: TObject);
begin
  // TO_DO: do zrobienia na potem
end;

Wtedy IDE uzna to za niepuste zdarzenie i nie usunie przy zapisie.

3

Serio nie da się wyłączyć automatycznego usuwania pustych funkcji? 😕

Mr.YaHooo napisał(a):

A po co Ci puste zdarzenia?

Do zrobienia potem. 😉

W swoim projekcie mam trochę takich funkcji, które na razie istnieją i są wywoływane (mimo że póki co nic nie robią), bo na razie nie wymagają żadnej logiki. Natomiast istnieją, bo dotyczą podsystemów, które są aktualizowane w ten sam sposób — UpdateEnter, Update, UpdateLeave. Wszystkie takie wywołania znajdują się w innym module i wywołania tych pustych też tam są, aby o nich w przyszłości nie zapomnieć. Natomiast w ich ciałach są komentarze świadczące o tym, że na razie nie wymagają implementacji. Przykład:

{
  Initializes text input.

  [!] This function must be called every frame of the game, before updating based on SDL events.
}
procedure Game_TextInputUpdateEnter ();
begin
  // Currently no operations required.
end;

{
  Finalizes text input.

  [!] This function must be called every frame of the game, right after updating based on SDL events.
}
procedure Game_TextInputUpdateLeave ();
begin
  // Currently no operations required.
end;

Natomiast funkcja Game_TextInputUpdate zawiera logikę, bo przetwarza zdarzenia SDL-a.

Wszystkie tego typu funkcje, które póki co nie mają co wykonywać, mają ten sam komentarz w środku (czyli Currently no operations required.), dzięki czemu łatwo jest je wyszukać za pomocą narzędzi IDE.

Ciała niektórych innych funkcji w silniku mam już wygenerowane i są puste, jeszcze zastanawiam się nad ich implementacją. Póki co natomiast wstawione są {TODO:}, abym o nich nie zapomniał, w razie gdybym się zamyślił. Ale to tylko dla mojej wygody, bo mi Lazarus niczego sam nie usuwa. :P

1

Dla mnie to nie był problem raczej zaleta, w C++ mi trochę tego brakuje i sam muszę kasować puste funkcje :(
Generalnie ten problem rozwiazuje sie zawsze najprosciej:

  • CTR+SHIFT+C (tego też mi brakuje w C++)
  • //
  • ENTER
1

Trochę do bani, że takie kombinacje trzeba odstawiać. W Lazarusie też nie jest jakoś szczególnie miło, bo o ile puste funkcje same nie giną, to narzędzie do ich automatycznego usuwania obejmuje jedynie metody. Releasem raczej nie trzeba się przejmować, bo jeśli używa się przełącznika {$SMARTLINK} to wszystko co nieużywane, nie zostanie zlinkowane, a wywołania pustych funkcji wytnie optymalizator.

Rok 2024, a IDE nadal posysają. 🤣

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.