![]() |
Funktionen
hi
sagen wir mal ich hab ne funktion
Delphi-Quellcode:
und ich rufe sie auf mit:
function mult(a: integer): integer;
begin Result := a * 2; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var bla1, bla2: integer; begin bla1 := 2; bla2 := mult(bla1); label1.Caption := IntToStr(bla2); end; der wert mult wird an die funktion gegeben...ok...aber wo speichert die funktion ihn denn? ich mein ich hab da ja keine variable die den wert da enthält oder? hab (leider) noch nie mit funktionen gearbeitet, wenn mirs jemand erklären würd, wär nett, danke gruss silent |
Du übergibts nicht mult an die Funktion, das ist die Funktion, sondern bla1 übergibst du an die Funktion. Und den Parameter der Funktion a, kann nman eien lokale Variable innerhalb der Funktion sehen.
|
also wird "bla1" an die variable "a" der funktion übergeben? - was ist wenn ich da 2 variablen hab, z.b "a" und "b", wo wird es dann "hineingesteckt?"
|
für alle variablen die du übergibst, brauchst du in der funktion/procedur ja auch immer variablen die diese werte übernehmen
|
und wie geb ich an was übergeben wird? ich meine wenn da 2 integervariablen in der funktion sind, in welche kommt denn ein wert bei aufruf?
das "a" kann den wert ja gar nicht enthalten weil ich in nie dem a zugewisen hab...aber irgendwo muss der wert doch sein |
Delphi-Quellcode:
Wo ist da jetzt das Problem?
function add(a, b: Inetger): Integer;
begin result := a+b; end; procedure TForm1.Button1Click(Sender: TObject); var a, b, c : Integer begin a := 1; b := 2; c := add(a, b); ShowMessage(IntToStr(c)); end; |
also das is eigentlich gabz einfach :D
einer function/prozedur werden automatisch werte übergeben die werte werden so definiert wie dein a also function test(a,b:Integer):Integer und übergeben tust du die werte beim aufrufen: erg:=test(3,2); in diesem fall wird wäre dann a=3 und b=2 |
ein problem ist da (noch) nicht, aber würd ich sicher später bekommen wenn ich das prinzip nicht verstehe
wenn ich das ganze ändere in:
Delphi-Quellcode:
funktionierts ja immernoch ...obwohl die veriablen a1 und b1 heissen, kommen sie bei der funktion in a und b? woher weiss ich wo der wert a1 oder b1 ist(in der funktion)? "a1" kann ja auch in "b" der funktion sein oder nicht
function add(a, b: Integer): Integer;
begin result := a+b; end; procedure TForm1.Button1Click(Sender: TObject); var a1, b1, c : Integer; begin a1 := 1; b1 := 2; c := add(a1, b1); ShowMessage(IntToStr(c)); end; sorry versteh das nicht so ganz :( |
welche werte a und b haben hängt davon ab in welcher reihenfolge du deine werte übergibst, dabei wird von links nach rechts gegangen, genau wie bei der definition im funktionskopf, was zuerst definiert wird, bekommt den ersten wert aus der übergabe.
|
nJa. Weil sie beim Funktiosaufruf in die Parametervariablen der Funktion kopiert werden, daher ist es unerheblich wie die Variablen der Funktionsparameter heißen, allein der Typ spielt eine Rolle.
Das Kopieren nennt man auch CallByValue. Dann gibt es noch CallByReference. Da wird ein Zeiger auf die Speicherstelle übergeben und von der Funktion wird diese Speicherstelle veränder.
Delphi-Quellcode:
Was gibt dir jetzt ShowMessage aus? "foobar" oder "Hello world"? Richtig wäre "Hello world", weil ein Zeiger auf die Variable T übergeben wurde und die Prozedur foo diese Speicherstelle direkt verändert hat.
procedure foo(var s : String);
begin s := 'Hello world'; end; procedure TForm1.Button1Click(Sender: TObject); var t : String; begin t := 'foobar'; foo(t); ShowMessage(t); end; |
Zitat:
@luckie: wenn das 1. ne function ist, dann jo, kommt hello world danke für die hilfe ihr 2 :) achja, 1 noch...wenn ichs so hab:
Delphi-Quellcode:
was ist daran falsch?kann ich die zahlen während der function nicht in strings umwandeln? die variablen sind ja integer, die funktion sollte ein strng zurückgeben oder?
function add(a, b: Integer): string;
begin result := IntToStr(a+b); end; procedure TForm1.Button1Click(Sender: TObject); var a1, b1, c : Integer; begin a1 := 1; b1 := 2; c := add(a1, b1); ShowMessage(IntToStr(c)); end; |
achso, c müsste in der prozedur ein string sein oder
hmm bekomme bei :
Delphi-Quellcode:
function add(a, b: Integer): string;
begin result := IntToStr(a+b); end; procedure TForm1.Button1Click(Sender: TObject); var a1, b1: Integer; c: string; begin a1 := 1; b1 := 2; c := add(a1, b1); ShowMessage(c); end; 3 raus obwohl 1+2 (als string) doch 12 ergeben müsste ...hmm :cry: |
Tut sie auch, nur bei der Aussageb mit ShowMessage versuchst du einen String noch mal von einem Integer in einen String umzuwandeln.
Bei dem letzten Code, den ich gepostet habe handelt es sich um eine Prozedur keine Funktion!!! Deswegen habe ich den Parameter mit CallByReference (Schlüsselwort: var) übergeben, damit die Prozedur ihn verändern kann. Ansonsten unterscheide sich ja eine Prozedur von einer Funktion darin, dass sie nichts zurückgibt. |
Zitat:
|
bei mir im buch gibts
function malZwei(var a: integer): integer // Call by Reference und function malZwei(a: integer): integer // Call by Value als prozdur gibts das also auch, gut zu wissen , thx =) man ich muss das ganze mal komplett lernen bin da schon über nem jahr dran.... kannst du mir noch sagen wieso bei meinem letzten postb 3 statt 12 rauskam? gruss silent |
Du addierst doch Integers und wandelst dann das Ergebnis in einen String um.
|
wie könnt ichs denn vorher in strings umwandeln und dann addieren?
genauso wie in ner prozedur, also function.... var var1, var2: string; begin var1 := IntToStr(a); var2 := IntToStr(b); result := a+b; end; so? |
Zitat:
|
also 2 integers in der function zu einem string umwandeln
weil mir das komisch vorkommt das überall dann variablen vorkommen würden also: function irgendwas(a: integer): string var v1, v2: string; begin v1 := IntToStr(a); v2 := IntToStr(b); result := a+b; end; ist das richtig? *G |
Delphi-Quellcode:
function(a, b: Integer): String;
begin result := IntToStr(a)+IntToStr(b); end; |
ah danke :)
|
Re: Funktionen
was man nicht so alles entdeckt wenn man die suche benutzt.... und ich dachte ich wäre seit jahren auf immer dem selben level...aber wenn man das hier so liest :mrgreen:... da war ich ja richtig schlecht
Hat zwar nichts mit dem thema zu tun, aber erweitert wirds sowieso kaum noch.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz