Gå til innhold

if else eller for løkke med case setninger


Anbefalte innlegg

Hei.

 

Programmet mitt skal sjekke en del før den starter opp. Dersom alle sjekkene er sant så kjøre programmet.

 

Som jeg vet kan jeg gjøre dette på to måte:

1. if og if else setninger... ganske mange.

2. En for løkke x med case setninger. Dersom det er false->break og close;

 

Hva synes dere er best? Er det noen andre måter å gjøre det på?

 

michael

Lenke til kommentar
Videoannonse
Annonse

Hva med exceptions?

 




procedure CheckDitt;

begin

 if Ditt <> HvaDetSKulleHaVært then

   raise EMinEgenExceptionKlasse;

end;



begin

 try

   CheckDitt();

   CheckDatt();

 except

   On E:EMinEgenExceptionKlasse do

     Siden EMinEgenExceptionKlasse har blitt kastet skal ikke applikasjonen

     kjøre. Derfor avslutter vi den her på ett eller annet vis...

 end;

end;

 

Alternativt med bruk av returverdier:

 


function CheckDitt: boolean;

begin

 result := Ditt = HvaDetSKulleHaVært;

end;



begin

 if (not CheckDitt) or (not CheckDatt) then

   AvsluttApplikasjonen;

end;

 

Det er i if'ens natura at den ikke sjekker alt dersom den ikke trenger. Hvis CheckDitt returnerer false vil du får en 'not false' som er true, og dermed vil if'en være true uansett hva CheckDatt returnerer. Dermed vil ikke applikasjonen bruke tid på å kalle CheckDatt før den kaller AvsluttApplikasjonen.

 

Exception-måten er jo litt mer fancy, men man kan fort komme inn i en diskusjon om det er 'riktig bruk' av exceptions eller ikke og om man vil få en liten performance svikt i forhold til if-metoden.

 

Har litt problemer med å se at en while-løkke er noen god løsning. Tenker du på noe slikt som dette? (Bruker repeat fordi det er mer logisk enn while...)

 


repeat

 case i of

   0: avslutt := not CheckDitt;

   1: avslutt := not CheckDatt;

 end;

 inc(i);

until (i = 2) or (avslutt=true);

 

Det er jo en mulig og litt fancy løsning forsåvidt, men om det er en lesbar lett forstålig løsning vet jeg ikke...

 

Men gjør det slik du selv vil. Fungerer det så er det riktig. Etterhvert som du får mere erfaring vil du kanskje se at løsningen du har valgt har en eller annen svakhet og da ser du kanskje at du vil gjøre det annerledes neste gang osv...

 

-Vegar

Lenke til kommentar

Hei.

 


function StartWork: boolean

var

I: integer;

begin

result := true;

for I:=0 to x do

 begin

   case I of

0: begin

    if not SjekkDitt() then 

 return := false;

 break;  

   end;

1:

2:

.

.

.

       x

   end;

 end;

end;

 

Slik har jeg gjort det foreløpig. Men forslaget ditt høres også bra ut..

 

:woot:

Lenke til kommentar

skrev feil her sånn, men det visste vel de fleste av dere... :lol:


  0: begin 

      if not SjekkDitt() then   //dersom sjekk ditt ikke sjekkes

        begin

          return := false;       //start arbeid skal ikke fortsette

          break;                   //hopper av case og løkke

        end;

      end 

  1: .... //neste case

 

8)

Lenke til kommentar

Uff det ble stygt med den forrige eksemplet.. prøver igjen jeg.. :lol:

 

   0: begin 

   if not SjekkDitt() then   //dersom sjekk ditt ikke sjekkes 

     begin 

       return := false;       //start arbeid skal ikke fortsette->false

       break;                   //hopper av case og løkke 

     end; 

   end; 

  1: .... //neste case

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...