Usuniecie drabinki ifow

0

Hej!
Chcialbym Was prosic o pomoc. W swoim programie stworzylem drabinke ifow ktora chcialbym przerobic na cos bardziej przyzwoitego. Sprawa wyglada tak, ze rozbijam lancuch znakow na pewne fragmenty i potem w zaleznosci od pierwszego fragmentu uruchamiam odpowiednia procedure. Na potrzeby przykladu wyglada to tak:

 if cut = '001' then P001;
if cut = '002' then P002;
if cut = '003' then P003
(...)

Teraz pytanko, jak to przerobic zeby mialo to rece i nogi?
Z gory dzieki:)

0

Czy te procedury mają ze sobą coś wspólnego? Może dałoby się je łatwo zastąpić jedną procedurą z argumentem?

0

Może zamiast porównywać zrób wybór.

0

Mają ze sobą tylko tyle współnego, że każda robi coś innego na podstawie "rozebranego" łańcucha więc zastanawiam się jak to uprościć.

0

Nie da się powiedzieć tylko na podstawie tego, co nam pokazałeś. Jedyne co, to można doradzić wykorzystanie case zamiast drabinki ifów, ale to głównie kosmetyka.

0
karpov napisał(a):

Teraz pytanko, jak to przerobic zeby mialo to rece i nogi?

Pytasz z perspektywy OOP ?

0

Można zrobić sobie mapę string -> procedura, ale to nie jest jakieś panaceum za bardzo.

0

To jest po stronie serwera. Odbieram sobie pakiet ktory ma postac np

002|cos|cos|cos|cos.

Pakuje to do klasy, ktora obrabia taki lancuch i odpala odpowiednia procedure w zaleznosci od pierwszego czlonu. Pozniej taka odpalona procedura korzysta z tego lancucha, ktory jest zapisany jako zmienna prywatna. Wyglada to mniej wiecej tak:

TObrobka = class
  procedure Create(text:string); //przypisuje text do lancuch
  procedure 001;
  procedure 002;
  procedure 003;
private
  lancuch:string;
public
  procedue OdpalProcedure;    //uruchamiamy odpowiednia procedure
end;
1

Jakoś bym się nad tym długo nie głowił - problem jest wyimaginowany; Zresztą Twój przykładowy kod @karpov (z pierwszego posta) jest niepoprawny, bo nie używasz else - przez to i tak każdy warunek będzie sprawdzany, bez względu na faktyczną zawartość ciągu;

Free Pascal, w odróżnieniu od Delphi, pozwala na matchowanie łańcuchów w instrukcji wyboru, więc to wystarczy:

case Cut of
  '001': P001;
  '002': P002;
  '003': P003;
end;

Im więcej dowalisz do tego obiektowości i innych wrapperów, tym bardziej nieczytelny kod stworzysz, który dodatkowo działać będzie wolniej; Najprostsze rozwiązania bardzo często są najlepsze;

PS: Ciągi do parametrów metod przekazuj przez stałą (z const) - to najszybsze rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1