Seiteneffekte

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Seiteneffekte

Beitrag von soufian88 » Do Feb 05, 2009 7:50 pm

Was sind eigentlich Seiteneffekte ?
Ich hab schon in google nachgeschaut aber da gibt es irgendwie keine richtige Antwort.
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Seiteneffekte

Beitrag von Dirty Oerti » Do Feb 05, 2009 8:01 pm

Oha.
Seiteneffekte in welchem Zusammenhang.

Nicht-informatisch kann ich dir sagen, dass Seiteneffekte etwas sind, was nebenher wegen einem Ereignis passiert.
Ich bin mir aber fast sicher, dass du das nicht meinst...

Wo hast du denn davon gehört, bzw in welchem Zusammenhang?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Seiteneffekte

Beitrag von soufian88 » Do Feb 05, 2009 8:04 pm

Ich verstehe nicht was seiteneffekt bedeutet im zusammenhang mit der if anweisung
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: Seiteneffekte

Beitrag von +Fuss+ » Do Feb 05, 2009 8:07 pm

Gegooglet, Seiteneffekte falsch geschrieben (nur ein "f") und gefunden:
http://www.mi.uni-koeln.de/c/mirror/f7a ... fects.html

Das müsste es eigentlich sein.
Ich hoffe du kannst damit etwas anfangen.

MfG Fuss

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Seiteneffekte

Beitrag von Dirty Oerti » Do Feb 05, 2009 8:44 pm

Cool, den Begriff kannte ich auch nicht.^^
Bzw, ich wusste nicht, das es dafür einen eigenen Begriff gibt :D

Auch was gelernt. :)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
tutorials.at
Beiträge: 10
Registriert: Mo Jan 19, 2009 2:23 pm
Wohnort: Wien
Kontaktdaten:

Re: Seiteneffekte

Beitrag von tutorials.at » Do Feb 05, 2009 9:07 pm


Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Seiteneffekte

Beitrag von soufian88 » Do Feb 05, 2009 9:23 pm

jep der kommt auch in diesen Tutorial vor.
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Seiteneffekte

Beitrag von Xin » Fr Feb 06, 2009 12:55 am

soufian88 hat geschrieben:Was sind eigentlich Seiteneffekte ?
Ich hab schon in google nachgeschaut aber da gibt es irgendwie keine richtige Antwort.
Ein Seiteneffekt ist alles, was passiert, obwohl es nicht das Bedürfnis des Ausführenden war.
Seiteneffekte lassen sich gelegentlich nicht verhindern, also muss eine Software sich dagegen absichern.
Beispiel: es laufen mehrere Prozesse, die alle auf die gleichen Bank Daten zugreifen. Kunde 1 hat 100 Euro auf dem Konto, Kunde 2 hat 200 Euro auf dem Konto und überweist 100 Euro an Kunde 1. Gleichzeitig überweist Kunde 1 50 Euro an Kunde 3.

Überweisung 1 liest den Kontostand von Kunde 2 aus: 200 Euro, zieht 100 Euro ab und speichert den Kontostand neu ab. Nun liest sie den Datensatz von Kunde 1: 100 Euro.
Überweisung 2 beginnt und liest den Datensatz von Kunde 1 aus: 100 Euro. 50 Euro werden abgezogen und gespeichert. Kunde 1 hat den Kontostand 50 Euro.
Überweisung 1 geht weiter: auf die ausgelesenen 100 Euro werden 100 Euro addiert. Der neue Kontostand von Kunde 1 ist damit 200 Euro, dieser wird gespeichert und überschreibt den veränderten Kontostand von 50 Euro.

Datensätze, die von mehreren Prozessen geschrieben werden können, können durch ungünstige Verkettungen verkehrt geschrieben werden. Hier tritt ein Seiteneffekt auf (das Überschreiben eines Ergebnisses, ohne die Veränderung beachtet zu haben). Das Programm hat eine Racing-Condition: Je nach Ausführungzeitpunkt der beiden Prozesse können unterschiedliche Ergebnisse auftreten.
Überweisungen müssen durch einen Mutex zu atomaren, nicht unterbrechbaren Anweisungen gezwungen werden, um Seiteneffekte zu verhindern.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Seiteneffekte

Beitrag von Kerli » Fr Feb 06, 2009 10:13 am

Am größten ist die Gefahr zu Seiteneffekten aber bei Makros, da sie vor allem teilweise sehr schwer nachzuvollziehen sind. Schau dir einmal folgendes Beispiel an:

Code: Alles auswählen

#define MIN(a,b) ( (a < b) ? (a) : (b) )
// ...
int a = 1, b = 1;
printf("min(2,2)=%d\n",MIN(++a,++b));
printf("a=%d, b=%d\n", a, b);
Was glaubst du gibt dieser Code aus?

Zuerst wird '++a' mit '++b' verglichen. Da a und b den den gleichen Wert von 2 erhalten gibt dieser Vergleich falsch bzw 0 zurück. Deshalb wird der Teil (b) zurückgegeben. Da in einem Makro aber alle "Parameter" ersetzt werden und nicht die nur dir Werte übernommen werden, wird aus (b) (++b). Der Rückgabewert deshalb vor der Rückgabe noch um 1 erhöht. Die Ausgabe wird also lauten:

Code: Alles auswählen

min(2,2)=3
a=2, b=3
Und genau so etwas nennt man Seiteneffekt und sollte so gut wie möglich vermieden werden. Deshalb sollte man auch in Funktions/Makroaufrufen oder zb if-Abfragen wenn man nicht genau weiß vermeiden den Inkrement oder Dekrementoperator zu verwenden, da man oft nur sehr schwer erkennen kann wie oft er aufgerufen wird.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Seiteneffekte

Beitrag von soufian88 » Fr Feb 06, 2009 11:00 am

#define MIN(a,b) ( (a < b) ? (a) : (b) )
Was hat die Zeile auf sich? zumindest die hälfte der Zeile verstehe ich
C ( Durchschnittlich ) C++ (am Lernen)

Antworten