Pseudodynamsicher l-value

Ein System kann man ja nur von Innen heraus zerstören, deshalb habe ich mir überlegt wie ich zurückschlagen kann. Wenn ich die Menschen schon nicht dazu bringen kann, über ihren eigenen Code nachzudenken, so muss ich sie wenigstens dazu bringen sich über meinen Gedanken zu machen :-)

Mir ist aufgefallen, das viele Programmierer den “tertiären”-Operator ?: überhaupt nicht mögen. Ich finde richtig eingesetzt, ermöglicht er an vielen Stellen einfach schöneren und auch lesbareren Code. Aber da ja eine Aversion gegen diesen Operator zu herrschen scheint, habe ich mir ihn für die ersten Gegenschläge zum “Freund” gemacht #grins#

Folgendes kleines Konstrukt habe ich mir ausgedacht:

iTo < iLastTo ? iTo : iTi += fPrecision ? pi_i64SlaveRaster : pi_i64NetRaster;

Na was macht diese kleine Programmzeile? Ist doch nicht so schwer, oder? :-)

OK, wenn ich diese Zeile irgendwo gefunden hätte, wäre sie sicher auch in meinen Blog gelandet #grins# Aber diese Rubrik heisst ja nicht umsonst “StrikeBack”!

Um zu verstehen was diese Zeile macht, sollte man sich die einzelnen Operatoren separat ansehen. Da wäre als erstes:

iTo < iLastTo ? iTo : iTi

Dieser wählt iTo aus, wenn iTo noch kleiner ist, als iLastTo; andernfalls wird iTi verwendet. Der zweite Ausdruck

fPrecision ? pi_i64SlaveRaster : pi_i64NetRaster;

ist genauso einfach. Wenn fPrecision wahr ist (also wenn eine höhere Präzision verwendet werden soll), dann wird der Wert von pi_i64SlaveRaster gewählt. Ist eine hohe Präzision nicht erforderlich, wird pi_i64NetRaster verwendet.

In der Mitte ist noch das +=, was auf der linken Seite den Wert der Rechten auffaddiert.

Was tut diese Zeile also? Ganz einfach: Sie addiert solange auf iTo das Raster mit der gewünschten Präzision auf, bis der maximale To-Wert erreicht oder überschritten ist (iLastTo). Danach addiert diese Zeile einfach das Raster auf iTi.

Hinweis: Diese Zeile ist in einer while-Schleife verpackt, welche das Abbruchskriterium iTi < iLastTi hat. Wofür man solch ein Konstrukt verwenden kann, bzw. was es genau macht, überlasse ich euch als Hausaufgabe :-)

Eine Antwort zu “Pseudodynamsicher l-value”

  1. apk sagt:

    Außer daß lvalues in ?: wirklich nicht gern gesehen werden. Legal ist das nicht überall (== in allen curly-braces-Sprachen), Details müßte man erst recherchieren.

Hinterlasse eine Antwort

Du musst angemeldet sein, um einen Kommentar abzugeben.