Ist eine If-Anweisung / ein Ausdruck immer direkt ein Seiteneffekt?

2 Antworten

Beginnen wir noch mal ganz von Vorne:

Eine IF-Anweisung ist abhängig von einem Ausdruck, der etweder Ja oder Nein ist, es gibt auch noch SWITCH und ELSE IF ugl.

Das sind Zwar Anweisungen die danach aussehen, als gäbe es keine Seiteneffekte. Das wird nur bei Hochsprachen ausgeblendet.

Heruntergebrochen ist eine Fallunterscheidung in Assembler ein Sprung (JMPx) und die haben alle unterschiedliche Seiteneffekte wie Register in der CPU ändern sich oder Flags werden gesetzt, je nach dem.

Genaugenommen ist der Seiteneffekt des PRINT Befehls, dass ein Zeichen ausgegeben wird.

Ein Ausdruck kann kein Literal sein sondern nur eine Berechnug, deren Ergebnis True oder False ergibt. Klar gibt es andere Ausdrücke aber die IF-Anweisung bricht jeden Wert als boolschen Wert herunter so ergibt "A" oder 1 oft in Programmiersprachen True und 0 False. Minus wird generell als True gewertet falls ich mich nicht irre also giltet (Pseudocode):

Strikt Off;
If -1 {...} // True
// oder
If 1=1 {...} // Wird oft gemacht zu Testzwecken
Woher ich das weiß:Berufserfahrung

Valentin1720653 
Fragesteller
 16.08.2022, 16:17

Danke dir, das ist nachvollziehbar.

0
Valentin1720653 
Fragesteller
 16.08.2022, 16:19

Das bedeutet doch dass eine void Funktion in einer Sprache wie C immer einen Seiteneffekt produziert oder ?

Weil sonst würde die Funktion doch überhaupt nichts machen.

0
geri3d  16.08.2022, 16:24
@Valentin1720653

Nicht zwangsläufig. Eine sinnfreie Foo Void wird keinen Effekt auslösen ausser, dass sie aufgerufen wird und 50-60 Takte für das Ausführen von keinem Code aufwenden muss.

Void ist zwar ein Typ aber ein eigener, der nur dafür ist, damit man nichts Returnen muss sondern nur tun soll was sie tun soll, egal was das Ergebnis als Wert für der Rendern eines Bildes auf dem Bildschirm zuückgeben soll, während sie womöglich asyncron läuft.

Void's sind die Sub's in Visual Basic.

0

ich schreibs mal nicht doppelt da hier alle verschiedenen system sprachen erklärt werden. (dein beispiel ist so nciht nachvollziehbar weil wir nciht wissen ob du etwas via referenz oder via value übergibst .

https://en.wikipedia.org/wiki/Side_effect_(computer_science)

In computer science, an operation, function or expression is said to have a side effect if it modifies some state variable value(s) outside its local environment, which is to say if it has any observable effect other than its primary effect of returning a value to the invoker of the operation. Example side effects include modifying a non-local variable, modifying a static local variable, modifying a mutable argument passed by reference, performing I/O or calling other functions with side-effects.[1] In the presence of side effects, a program's behaviour may depend on history; that is, the order of evaluation matters. Understanding and debugging a function with side effects requires knowledge about the context and its possible histories.[2][3]
Side effects play an important role in the design and analysis of programming languages. The degree to which side effects are used depends on the programming paradigm. For example, imperative programming is commonly used to produce side effects, to update a system's state. By contrast, declarative programming is commonly used to report on the state of system, without side effects.
Functional programming aims to minimize or eliminate side effects. The lack of side effects makes it easier to do formal verification of a program. The functional language Haskell eliminates side effects such as I/O and other stateful computations by replacing them with monadic actions.[4][5] Functional languages such as Standard MLScheme and Scala do not restrict side effects, but it is customary for programmers to avoid them.[6]
Assembly language programmers must be aware of hidden side effects—instructions that modify parts of the processor state which are not mentioned in the instruction's mnemonic. A classic example of a hidden side effect is an arithmetic instruction that implicitly modifies condition codes (a hidden side effect) while it explicitly modifies a register (the intended effect). One potential drawback of an instruction set with hidden side effects is that, if many instructions have side effects on a single piece of state, like condition codes, then the logic required to update that state sequentially may become a performance bottleneck. The problem is particularly acute on some processors designed with pipelining (since 1990) or with out-of-order execution. Such a processor may require additional control circuitry to detect hidden side effects and stall the pipeline if the next instruction depends on the results of those effects.

Valentin1720653 
Fragesteller
 16.08.2022, 16:10

Wieso spielt in diesem Beispiel die Art der Übergabe eine Rolle ? Ich modifiziere die Werte doch gar nicht...

0
TechPech1984  16.08.2022, 16:17
@Valentin1720653

aber es geht doch genau darum ob du innerhalb was änderst was ausserhalb ist , dann ist es ein side effekt, weil du halt was draussen änderst , wenn du es einfach nur zurück gibst, ist es kein side effekt, weil du hier nicht innerhalb der funktion was änderst sondern ds ergebnis zurück gibst .

call by referenz = side effect ,

call by value = kein site effekt, es verändert sich ncihts ausserhalb was nicht ausserhalb erkennbar ist .

thisval= 5;
myvar = thisfunc(thisval)  // call bei value , 
echo thisval; // 5

da ändert sich in der funktion nichts an der aufrufenden sache , hier weiss jeder das das ergebnis der funktion myvar zugeorndet wird

thisval= 5;
myvar = thisfunc(thisval) // call by referenz ,
echo thisval; // 15

hier weisste nicht das mit thisval passiert , thisval könnte sich in der funktion ändern und hätte auswirkungen auf den weiteren programm verlauf .

das nennt sich side effect .

bei javascript sehr beliebt, den manchmal hängt es davon ab wer das this object ist , somit wird dann die function manchmal im ganz anderen context aufgerufen als man denkt . ergo das this ist nicht das was man denkt , sondern etwas ganz anderes .

2
TechPech1984  16.08.2022, 16:49
@Valentin1720653

ich geb zu dein beispiel könnte man als side effct sehen, aber eigentlich nicht, den es geht daum ob der output nicht determinstisch zu erschließen ist . wenn die funktion also genau dafür gedacht wurde ist 1 und 0 auch die richtige zu erwartende rückgabe . damit passiert also kein side effekt , weil das soll ja so sein . ist also erwartbar .

istoday(date) , sagt nun einmal JA oder NEIN . würde dann 65 rauskommen hätten wir ein side effect , eine unerwartbare ausgabe . obwohl man immer vorsichtig sein sollte . dieser begriff side effect wird inflationär benutz weil leute nicht wirklich verstanden haben wie sprache und definition funktioniert und dann alles als side effect einstuffen .

wenn istoday(date) halt definiert wird als , gibt Ja zurück oder die anzahl an abweichenden tagen , haben wir kein site effekt , den genau das ist ja erwünscht und auch erwartbar und genau determiniert .

0