Warum Funktionen? oder besser WANN?

Hallo w-w-w Community,

ich frage mich die ganze Zeit wann ich eine Funktion oder Objektorientiert Programmieren sollte … nehmen wir an ich möchte einen Usernamen aus MYSQL in PHP ausgeben … dann mach ich einen Query und hole mir das was ich brauche … oder ist die Idee dahinter, ich schreibe mir eine Funktion und wenn ich an einer anderen Stelle auch eine Usernamen ausgeben möchte ruf ich nur die Funktion auf ? … damit bin ich logischerweise flexibel … aber auch irgendwie statisch … weil ich ja dann nur „spezifische“ Funktionen habe … ich verstehe die Logik noch nicht … vlt kann mir das jemand mal erzählen …

danke tom

Hallo,

es gibt ja auch „etwas umfangreichere“ Funktionen als nur den Usernamen auszulesen. Noch interessanter wird das, wenn man einen Vorgang immer wieder mit anderen Daten wiederhoeln muss, z.B. das Schreiben eines Protokolls in eine Datenbank. In so einem Fall macht man sich eine Funktion, übergibt dieser den zu schreibenden Text, Datum und Uhrzeit werden automatisch hinzugefügt und das ganze dann in eine Datentabelle geschrieben. Dies nur als Beispiel…

HTH
Duffy

Hallo Tom,

ich wage mich mal.

Also wie du letztendlich für dich dein Code aufbaust, egal bei welcher Programmiersprache, ist die natürlich immer selber überlassen. Jeder hat seinen Stil und manche finden sich ja bekanntlich auch besser im Chaos zurecht!

Arbeitest du jedoch mit mehreren Personen zusammen an einem größeren Projekt bietet es sich an, etwas mehr Struktur in die ganze Sache zu bekommen. Hier helfen dir beispielsweise die Funktionen. Werden bestimmte Vorgänge öfter benötigt, packt man sie in Funktionen. Diesen Funktionen kann man dann, je nach Aufbau, verschiedene Parameter mitgeben, wodurch sich dein „statisch“ wegstreichen lässt wie ich finde.

Nehmen wir als Beispiel eine einfache Addition:

Du schreibst eine Funktion, die zwei Zahlen miteinander addiert ( z = x + y ) und übergibst die beiden Parameter für x und y, indem du die Funktion „Addieren(int x, int y)“ mit „Addieren(3,4)“ aufrufst. Die Funktion addiert dann die beiden Zahlen 3 und 4 und schreibt das ergebnis in die Variable z, welche du mit einem „return“ zurückgeben lassen kannst.

Das ganze geht natürlich noch viel komplexer (rekursiv etc.).

Ich hoffe ich konnte ein wenig helfen. Bei Fragen oder Anmerkungen gerne an mich wenden!

Gruß
Patrik

Hallo Tom,

ich gehe davon aus, dass du dich noch nicht wirklich oft mit Programmierung auseinandergesetzt hast.
Mit Objektorientierung hat das im Moment eher wenig zu tun. Die objektorientierte Programmierung ist ein eigenes Prinzip, worüber du viel bei Google finden wirst :wink:
Deine Frage müsste eigentlich heissen: Soll ich mir die Mühe machen und eine Funktion schreiben, die ich immer wieder anwenden kann, oder programmiere ich direkt im Quellcode?
Ich beantworte das jetzt einfach mal so: Die schönere Variante ist eigentlich, eine Funktion zu schreiben, die du immer wieder benutzen kannst. Meistens möchte man ja nicht nur einmal einen Namen aus einer Datenbank auslesen, sondern öfters. Solltest du dann mal irgendwas an deiner Funktion ändern wollen, musst du es nur einmal tun, anstatt es unter Umständen zehn Mal im Quelltext zu suchen. Man muss natürlich immer abwägen, wo es Sinn macht, eine eigene Funktion zu schreiben, sonst hast du irgendwann einen Haufen von Funktionen in Funktionen in Funktionen usw.
Überlege dir also, wie oft du eine gleiche Funktionalität brauchen wirst. Ist die Antwort „Öfter als ein Mal“, dann solltest du dafür eine eigene Funktion schreiben.

Lg, Sternscheeen

Hallo Tom,

Einen sehr wichtigen Grundsatz beim Programmieren ist: Vermeide wann immer möglich „Code duplication“. Damit ist gemeint, dass du Code nicht zwei mal schreiben solltest, wobei copy & past (kopieren & einfügen) als Schreiben zählt. Der Grund hierfür ist vielfältig, einen davon ist, dass du bei Bugs (Fehlern) nur an einem Ort etwas korrigieren musst.

Daher siehst du es richtig, dass du besser eine Funktion dafür schreibst und diese mit verschiedenen Parametern aufrufst.

Wie du richtig bemerkt hast, führt dies bei einem etwas grösseren Code-Umfang dazu, dass du viele spezifische Funktionen hast. Du kannst Funktionen abstrahieren in dem sie andere Funktionen aufrufen etc. und dadurch generellere Funktionen schaffen.

Die Entscheidung ob du nun objektorientiert oder funktional programmierst ist schon fast philosophisch. Beides funktioniert und beides hat Vor- und Nachteile. Ich würde dir für den Einstieg empfehlen, zuerst einmal objektorientiertes Programmieren (OOP) zu lernen.

Da wirst du sehen, dass du z.B. mittels Vererbung abstrahieren kannst. Hast du dich einmal mit OOP vertraut gemacht, wirst du sehen, dass mittels Aggregation, Komposition und Vererbung viel „Code duplication“ vermieden werden kann.

Ich hoffe dies gibt dir eine erste Idee.

Gruss Robert

hey,

der sinn und zweck davon ist wiederverwendung und abstraktion. anstatt dass du immer wieder einen kompletten sql query schreibst benutzt du halt immer wieder deine funktion. und zusätzlich hast du nicht in einem template noch sql „logik“

mit spezifisch meinst du wohl, dass du eine funktion hast wie: retrieveUsername(id) klar das ist natürlich sehr spezifisch, besonders wenn du dann noch hast: retrieveUserEmail(id) und dann quasi 20 einzelne funktionen hast, die dann auch noch jedes mal einen query gegen die db schicken. an dieser stelle würdest du eher eine funktion schreiben, die dir an einem stück ein User objekt mit allen daten holt. das ist auch für die performance besser :stuck_out_tongue:

ich nehme einfach mal an, dass du plain php mit mysql machst und auch eigentlich (nicht übel nehmen) nicht viel ahnung hast. guck dir mal das symfony framework an. da hast du zwar eine steile lernkurve allerdings lernst du dann auch was „ordentliches“

Hallo,

ich war im Urlaub und gehe davon aus, dass sich die Anfrage nun geklärt hat. Wenn nicht, dann schreib mich gern nochmal an.

Gruß
Rolf