🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #347204

Re: Megaset

#347204
From: Adam Siwoń
Date: Tue, 01 Feb 2022 22:43
48 lines
3533 bytes
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ń
Technical Details
Message-ID: <61f9b7a7$0$507$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer01.ams4!peer.am4.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <4deb1dbb-89eb-4541-af46-eb0fe4815911n@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer01.ams4!peer.am4.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Date: Tue, 1 Feb 2022 23:43:50 +0100
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.5.1
Subject: Re: Megaset
Newsgroups: pl.comp.lang.delphi
References: <4deb1dbb-89eb-4541-af46-eb0fe4815911n@googlegroups.com>
From: Adam Siwoń <traptak@poczta_no_spaam.onet.pl>
In-Reply-To: <4deb1dbb-89eb-4541-af46-eb0fe4815911n@googlegroups.com>
Lines: 49
Message-ID: <61f9b7a7$0$507$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 79.186.50.9
X-Trace: 1643755431 unt-rea-a-01.news.neostrada.pl 507 79.186.50.9:56424
X-Complaints-To: abuse@news.neostrada.pl
X-Received-Bytes: 3347
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit