W dniu 2022-01-10 o 14:34, apl pisze:
> Witam, w tym poście chcę przedstawić moje rozwiązanie dotyczące tworzenia i posługiwania się zbiorami o dowolnej wielkości. Krytyka i alternatywne propozycje mile widziane.
> Biblioteka i kody źródłowe do pobrania ze strony
https://apl.home.amu.edu.pl/apl/
[...]
Wtrącę swoje 3 grosze. Nie wchodząc w samą funkcjonalność biblioteki
masz trochę rzeczy do posprzątania:
1. Wpięcie kodu obsługującego warstwę wizualną w obliczeniach:
procedure includeToMegaSet(var s:TarrSet;i:longword);
//włącza liczbę i do zbioru
var l,m,n:longword;
Begin
ilmn(i,l,m,n); //number, mask, member, bit
if m<=high(s) then s[m]:=l or s[m]
else showMessage('Procedure "IncludeToMegaSet", program
error.'#13#10'Number '+intToStr(m)+
' could not be included to set because was too big (because of lack
of the target container capacity).'#13#10+
'Numbers should be<='+intToStr(high(s)));
End;{includeToMegaSet}
Mam na myśli te nieszczęsne ShowMessage. Jeśli użyjesz tej biblioteki w
jakimś kodzie działającym w usłudze sieciowej, to będziesz zaglądał na
konsolę serwera co tam się wyświetla? Nie. Więc nie wywołuj komunikatów
dla użytkownika w kodzie wykonującym obliczenia, zarządzającym
strukturami itp. Od tego jest warstwa wizualna. Użyj wyjątków jeśli
musisz zgłosić błąd krytyczny.
2. Jeśli piszesz w nowszych Delphi, a tak to wygląda, to rozważ użycie
rekordów do opakowania typu. Dla rekordu możesz przeciążać operatory,
więc użycie Twojego typu zbiorowego nie wymagało by dedykowanych
funkcji, ale dało by się tego używać jak standardowy typ zbiorowy w
Pascalu (operatory Include, Exclude, in, dodawania, przypisania...)
Pomyśl jak łatwa była by wtedy migracja kodu programu ze standardowego
typu na Twój. Wystarczyła by korekta deklaracji?
3. Z samych testów - biblioteka odwołuje się do unitu z testami - tak
być nie powinno, bo program, który używa biblioteki musi też używać
unitu testów.
Zamiast tworzyć jakieś własne rozwiązania okienkowe do testowania czemu
nie użyjesz standardowej biblioteki do obsługi testów jednostkowych?
(np. DUnit, DUnitX)
Powodzenia.
--
z pozdrowieniami
Adam Siwoń