Gibt es eigentlich in der "klassischen" Programmierung eine Art Operator, die den vorhergehenden Ausdruck ignoriert?

... komplette Frage anzeigen

5 Antworten

In Mathematica (zwar auch keine prozedurale Sprache, aber das spielt in diesem Fall ausnahmsweise keine Rolle) kann man einfach

(ausdruck1; ausdruck2; ausdruck3; ...; ausdruck_n)

verwenden; die Ausdrücke werden der Reihe nach ausgewertet und das Ergebnis des Gesamtausdrucks ist das Ergebnis des letzten Ausdrucks.

In C# kann man das - wenn auch etwas sufwendiger - simulieren:

return (new object[] { a++, Math.Pow(a, 2) }).Last();

Ggf. mit dem nötigen Typecast

Übrigens steht der Operator "^" in C# und Sprachen vergleichbarer Syntax nicht für die Potenz, sondern für den bitweisen XOR-Operator.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von KnorxyThieus
08.11.2016, 22:13

Wow, ist das diese "Wolfram Language"? Die wollte ich mir auch schon mal anschauen ... guter Hinweis!

In C# aber mit der Einschränkungen, dass keine void-Aufrufe möglich sind ... :(

Wenn man eine Funktion wie

public static Do<T>(this T obj, Action action)
{
    action();
    return obj;
}
// Pseudocode

hätte, angewendet etwa:

x =
(y > 10)
? true.Do(() => Log("Aha!"))
: false;

, käme man ja auch auf dasselbe.
Bloß ist beides syntaktisch immer doch recht umständlich ... :(

Übrigens steht der Operator "^" in C# und Sprachen vergleichbarer Syntax nicht für die Potenz, sondern für den bitweisen XOR-Operator.

Ups, glatt vergessen ^^ ;)

0

Ich meine in C gibt es einen Operator der das hintereinander ausführen von zwei Anweisungen ermöglicht. Weiß es aber nicht mehr sicher.
Dazu gibt es bedingte Ausdrücke in Kurzschrift die in einer Zeile die Auswertung machen und je nachdem die eine oder andere Anweisung ausführen.

Antwort bewerten Vielen Dank für Deine Bewertung

In Javascript gibt es übrigens tatsächlich so etwas, den Komma-Operator:

(function() {
return console.log("hallo"), "welt";
})();

Ausgabe:

> hallo
> "welt"

:)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von KnorxyThieus
27.11.2016, 09:40

Oh, das klingt ja interessant!

Wie funktioniert der genau? Wieso wird "Welt" mit Anführungsstrichen ausgegeben? ☺

0

Inwiefern ignoriert dein fiktiver Operator denn etwas? Sieht für mich eher so aus als würdest du mehrere komplexe Anweisungen in ein return statement quetschen wollen. Was spricht denn gegen die Verwendung einer Funktion?


Anstatt:

return a++ ~ a^2;


(Pseudocode):

function plusEinsUndHochZwei(a) {
  a++; 
  return a^2;
}

...

return plusEinsUndHochZwei(a);

Zweites Beispiel:

function logAndReturnTrue() {
   Log("Aha!");
   return true;
}

x = (y < 10) ? logAndReturnTrue() : false;


Ist nebenbei noch viel einfacher zu lesen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Dory1
08.11.2016, 21:03

Du bist übrigens nicht gezwungen den ?: Operator zu verwenden ;)

if (y < 10) {
  Log("Aha");
  return true;
} 
return false;

tut's doch auch :)

?: ist nur in den Fällen schöner wenn eben keine komplexen Operationen mehr durchgeführt werden müssen:

return y < 10 ? 0 : 1;
1
Kommentar von KnorxyThieus
08.11.2016, 21:32

Na ja, mich begeistert das Konzept langer Ausdrücke immer, es kann doch nicht sein, dass man wegen einer einzelnen Bedingung davon abweichen muss!

0

Wofür bitte sollte sowas zB gut sein??? Also warum sollte man das a++ da hinschreiben aber ignorieren?

return a++ ~ a^2;
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von KnorxyThieus
08.11.2016, 21:36

Okay, das Beispiel war schlecht gewählt ... dann mögest du dich doch bitte auf das zweite beziehen.

0

Was möchtest Du wissen?