Avatar billede pzw Nybegynder
06. februar 2004 - 20:56 Der er 14 kommentarer og
1 løsning

Function med returværdi

Hvordan laver jeg selve funktionen så jeg får en returværdi ?

Header til function:
Function cbFlashLED (BoardNum:Integer):Integer;

Funktionen skal laves sådan at jeg kan skrive:
Fejlkode:=cbFlashLED(1);

Jeg laver normalt altid en: Procedure cbFlashLED (BoardNum:Integer; VAR Fejlkode); med pga. kompatibilitet kan jeg ikke gøre sådan her.
Avatar billede erikjacobsen Ekspert
06. februar 2004 - 22:29 #1
Function cbFlashLED (BoardNum:Integer):Integer;
begin
  /* regne regne regne*/
  cbFlashLED:=77;
end;
Avatar billede doc404 Novice
07. februar 2004 - 09:34 #2
Eller du kan benytte den indbyggede variable Result.

function cbFlashLED(BoardNum : integer) : integer;
begin
  ...
  Result := 123;
end;
Avatar billede hrc Mester
07. februar 2004 - 10:42 #3
erikjacobsens eksempel kan kun lade sig gøre pga. bagud kompatibilitet m. tidligere varianter af Pascal. Brug doc404's som måden man gør tingene på i Delphi Pascal.
Avatar billede pzw Nybegynder
07. februar 2004 - 14:09 #4
Tak for svaret, det var lige så simpelt som jeg forventede men jeg kunne ikke finde løsningen.
Efter hrc's kommentar har jeg valgt doc404's løsning, hvis doc404 lægger et svar så er der point.
//PZ
Avatar billede doc404 Novice
07. februar 2004 - 19:10 #5
;)
Avatar billede arne_v Ekspert
07. februar 2004 - 19:17 #6
hrc>

Skulle det være en dårlig ting at følge Pascal standarden ?
Avatar billede erikjacobsen Ekspert
07. februar 2004 - 19:34 #7
*g* Ja, den var god! Mit eksempel er ikke "bagud" kompatibelt med Pascal. Det ér
Pascal. At Borland så har lavet noget, der egentlig er smartere, er en helt
anden sag. Skal man lave portabel Pascal kode, kan man ikke bruge Result-variablen.

Men brug endelig hvad du vil!
Avatar billede hrc Mester
07. februar 2004 - 19:44 #8
Nu skal jeg ikke lægge arm med en af de "store", men jeg har læst dokumentation hvori der står at det er noget der stammer fra Borland Pascal (og det her er Delphi Pascal), så bør man bruge 'result'.
Begge ting fungerer dog, men jeg synes at 'result' er smartere idet man kan skifte navn på funktionen uden at skulle skifte det ned gennem koden.

Der er også rekursivitet at være opmærksom på:

function MyGod1 : integer;
begin
  result := 10;
  result := result * 2;
  result := result + 1;
end;

vil returnere 21 mens funktionen:

function MyGod2 : integer;
begin
  MyGod2 := MyGod2 * 2;
end;

vil afstedkomme stak overflow idet MyGod2, på højre side af tildelingsoperatoren, vil kalde funktionen endnu engang og igen vil kalde funktionen osv...

Så du har ret i, at det er en del af Pascal-standarden - men den er der ikke med Borlands gode vilje.
Avatar billede hrc Mester
07. februar 2004 - 19:55 #9
Undskyld i øvrigt til erik. Ville ikke være hofsnog og snyde dig for points, men jeg syntes altså doc404's eksempel var bedst.

Hvor tit har man i øvrigt taget Delphi-kode og flyttet den til noget andet?

Som programmør, med erfaring tilbage til Compass Pascal (har vist endda PolyPascal liggende), har jeg ikke brugt denne syntaks efter Delphi introducerede 'result'.
Avatar billede erikjacobsen Ekspert
07. februar 2004 - 20:08 #10
Jeg siger også, at den er smartere. Det er den. Men det er ikke standard Pascal.
Har man ikke brug for at flytte er det jo ligemeget. Ude i den store, rigtige,
og virkelige verden kan portabilitet være et argument for kodningsstandarder
i den stil vi snakker om her.

Jeg anfægter blot at du indirekte udnævner Delphi til Pascal. Det er ikke de
"tidligere varianter" af Pascal, der er underlige. Det er Delphi, der en
variant af Pascal.

Jeg samler forøvrigt slet ikke på point.
Avatar billede arne_v Ekspert
07. februar 2004 - 20:24 #11
Idag er Delphi nok den eneste udbredte Pascal compiler. Så porterings
behovet er alene af den grund minimalt. Endvidere vil et typisk Delphi
program nok indeholde Delphi specifik kode som er betydeligt vanskeligere
at portere end brug af result.

Men nogen (bl.a. mig) har nogle principielt positive holdninger
til standarder.
Avatar billede erikjacobsen Ekspert
07. februar 2004 - 20:37 #12
Der er andre Pascal-er i verden, trods alt. Delphi er dog et godt bud til en
grafisk grænseflade.

Laver man kode på en bare nogenlunde fornuftig måde, vil man adskille fx
den grafiske præsentation og forretningslogik. Der er nok ganske meget
Delphi-specifik kode i forbindelse med den grafiske præsentation, men der
behøver intet være i forretningslogikken, der ved at overholde passende
standarder kan genbruges andre steder, på andre platforme, men i samme
system.

Men det er i denne sammenhæng en helt akademisk diskussion, da spørgeren
ikke har noget af dette i tankerne, og ej heller næppe får behov for det.
Avatar billede hrc Mester
07. februar 2004 - 20:37 #13
Jeg anfægter ikke, at Delphi er en variant af Niklaus Wirths Pascal. Bruger man ArneV's ord, så er Delphi efterhånden standarden - og så har jeg da lidt ret, ikke? (jeg fisker)

Jeg kan skam også lide standarder, kan næsten ikke leve uden dem, standarderne (;-)), og prøver at følge dem stringent. En eller anden lærebog har skrevet at "funktionsnavnet" kun var med pga. bagud kompatibilitet og det har jeg registreret. At det så er en halv sandhed, er en anden sag.

Jeg forlader diskussionen her, inden moderatorerne griber ind.
Avatar billede erikjacobsen Ekspert
07. februar 2004 - 20:48 #14
Vi er bestemt ikke grundlæggende uenige. Men Delphi er ikke nogen standard, bare fordi den er udbredt.
Avatar billede pzw Nybegynder
09. februar 2004 - 11:42 #15
Det var en voldsom debet som jeg blander mig udenom.
Tak for svarene.
//PZ
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester