De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
En function er ligesom en procedure... En udrører nogle handlinger, men til forskel fra proceduren så kommer function'en ud med et resultat til sidst...
function Calc(x, y: Integer): Integer; begin Result := x*y; end;
Her udregner vi med functionen Calc et resultat af x og y når de ganges sammen... Så kan du, ligesom ved en procedure, kalde Calc...
procedure Udregn; var i, j, Resultat: Integer; begin i := Random(20); j := 15; Resultat := Calc(i, j); end;
Du kan også retunere strenge, floats, records, osv.
Endnu et eksempel:
function ErstatNulMedK(I: Integer): String; var J: Integer; S: String; begin S := IntToStr(I); for J := 1 to Length(S) do begin if S[J] = '0' then Result := Result + 'k' else Result := Result + S[J]; end; end;
Du bruger function's hele tiden... IntToStr er for eksempel en function. Length, som jeg også har brugt, er en function.
I mange tilfælde er det godt at bruge funktioner især hvis du flere steder i samme kode skal lave den samme beregning - det spare plads, tid og gør det nemmere at overskue... Desuden kan du skrive dine funktioner overalt i din kode - ligesom procedure...
Den kan du skrive ligesom du skriver en procedure:
private function Calc(x, y): Integer;
function TForm1.Calc(x, y): Integer; begin Result := x*y; end;
Eller du kan bare skrive den før den kode du skal bruge, så behøver du ikke at erklære den i private-afsnittet... Så kan du bare skrive:
function Calc(x, y): Integer; begin Result := x*y; end;
Den kan også være inde i en anden procedure, eller function...
procedure TForm1.Button1Click(Sender: TObject);
funtion SammenSaet(S1, S2: String): String; begin Result := S1 + S2; end;
begin Edit1.Text := SammenSaet(Edit1.Text, SammenSaet(SammenSaet('Hejsovs', Edit1.Text), Edit2.Text)); end;
På den måde kan du også bruge functioner i functioner... Du kan endda kalde en function fra sin egen function, men pas på med det, da det hurtigt kan blive til MANGE function's kald!!! :)
Du kan også (ligesom procedurere) skrive dine funktioner i en anden unit og dermed kunne hente funktionerne fra mange forskellige units... Det gør det ofte lettere at arbejde med!
Yepper! Som zerohero siger... Jeg skulle en gang lave et program der skulle bruge enormt mange functioner som ikke havde noget med programmet at gøre, men i stedet var ren regne atbejde... Så er det nemlig skide smart at ha' dem i en anden unit, så så lægge den under uses-afsnittet!
Jeg er foreksempel ved at lave en unit som kan en forfærdentlig masse fedt med OpenGL (3D). Så hver gang jeg laver en ny applikation med OpenGL så bruger jeg bare den samme unit og udvikler videre på den - så er jeg fri for at opfinde den dybe tallerken hver gang SMART ;)) Du kan også putte dem ind i en dll og gøre samme nummer!!!!
Altså hvis du skriver function: String; så returnerer den en streng... Det kunne f.eks. være at du ønskede klokke-slettet lige nu som en streng. Der behøver du f.eks. ingen paranteser:
function KlokkenNu: String; begin Result := TimeToStr(Time); end;
Du kan også returnere alt muligt andet... F.eks. et TPoint, som er en record:
function TForm1.TopPunkt: TPoint; begin Result.x := Form1.Left; Result.y := Form1.Top; end;
procedure TForm1.Button1Click(Sender: TObject); function homo(homo1, homo2 : string) : string; begin Result := homo1 + homo2; end;
begin showmessage(homo('lol','lamer')); //der skulle lige en komma ind! //og så kender den ikke variablerne homo1 og homo2. De ligger jo i function'en homo. end;
Jo, men så er ideén jo med en funktion jo lidt væk. Det er selvfølig ikke den fedeste eksempel jeg har brugt for at vise fordelen - men den kan vel bruges til at vise teknikken... :-))
Du skal altid tænke på hvilken formål du vil bruge det. Er det noget med en værdi der skal returners så brug en funktion ellers så brug en procedure!!!
>>d34c0n Du behøver ikke at skrive Result, men så har du jo ingen glæde af function'en, og som zerohero siger, så kunne du ligeså godt ha' brugt en procedure...
Du kan også returnere resultatet med function'ens navn. Som jeg viser her:
function Calc(x, y: Integer): Integer; begin Calc := x*y; end;
Det er det samme som at skrive:
function Calc(x, y: Integer): Integer; begin Result := x*y; end;
"I mange tilfælde er det godt at bruge funktioner især hvis du flere steder i samme kode skal lave den samme beregning - det spare plads, tid og gør det nemmere at overskue... Desuden kan du skrive dine funktioner overalt i din kode - ligesom procedure..."
.. Det kan man da ikke, da man skal angive dens navnes værdier hver gang!?
Jaaaaaah, han skal skrive function'ens navn hver gang, men tænk lige på det her:
procedure TForm1.Button1Click(Sender: TObject); function Calc(x, y: Real): Real; begin Result := 15*x-7*y*y-3*x; end; var x, y: Real; begin x := 2.2; y := 5.1; ShowMessage(FloatToStr(Calc(x, Calc(Calc(y, Calc(x, y)), y)))); end;
Det ville være MEGET besværligt at skrive hele regnestykket ud i en køre hvis man ikke havde Calc-function'en! :)
Synes godt om
Ny brugerNybegynder
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.