real 0x0badc0de

Status
Nicht offen für weitere Antworten.
S

Spacerat

Gast
Hallo zusammen...

Das folgende sind weder Hausaufgaben oder sonst irgendwie was unheimlich Wichtiges. Eigentlich ist das nur reines Brainstorming.

...und zwar:
Code:
if(write = cnt++ == SIG.length) cnt = 0;
Es geht mir um die Frage, wann cnt den Wert 0 bekommt.
1. Wenn SIG.length erreicht wurde,
2. Wenn cnt = SIG.length - 1 ist oder
3. Wenn cnt = SIG.length + 1 ist?

Ohne es voher ausprobiert zu haben, würde ich mal auf 2. tippen. Ist da jemand anderer Meinung (... auch ohne es vorher auszuprobieren)?
Zu solch einer Code-Zeile gibt es doch eigentlich nur einen Kommentar: "...das lässt man lieber".

mfg Spacerat
 

Ark

Top Contributor
Nach Ausführung dieser Zeile ist write identisch mit cnt == SIG.length und cnt gleich 0, wenn write true ist, und sonst eins höher. Oder anders: Wenn cnt == SIG.length gilt, wird cnt zu 0.

Ark
 

Marco13

Top Contributor
Jetzt bin ich auch unsicher, ob das == oder das = höhere Priorität hat, aber ... in jedem Fall müßte doch der vorherige Wert von 'write' egal sein - es bekommt irgendwas zugewiesen (entweder cnt oder "cnt++ == SIG.length", also true oder false) ???:L

Man sieht: Der Titel passt....
 

Ark

Top Contributor
Marco13 hat gesagt.:
Jetzt bin ich auch unsicher, ob das == oder das = höhere Priorität hat
== hat höhere Priorität als =.
Marco13 hat gesagt.:
in jedem Fall müßte doch der vorherige Wert von 'write' egal sein - es bekommt irgendwas zugewiesen (entweder cnt oder "cnt++ == SIG.length", also true oder false) ???:L
write bekommt immer den Wert cnt == SIG.length zugewiesen, und bis jetzt hat doch niemand etwas anderes behauptet. oO Oder missverstehe ich dich gerade?

Ark
 

Marco13

Top Contributor
:lol: Mein Problem und mein Meta-Problem waren das gleiche :lol:

(Nach Ausführung dieser Zeile ist write identisch mit cnt == SIG.length und cnt gleich 0), wenn write true ist, und sonst eins höher. Oder anders: Wenn cnt == SIG.length gilt, wird cnt zu 0.

vs

Nach Ausführung dieser Zeile ist write identisch mit cnt == SIG.length und (cnt gleich 0, wenn write true ist), und sonst eins höher. Oder anders: Wenn cnt == SIG.length gilt, wird cnt zu 0.


(und wie beim eigentlichen Problem würde die falsche Interpretation des Meta-Problems nur begrenzt Sinn machen...)
 
S

Spacerat

Gast
Ok... Das nächste mal dann ins Java Quiz...

Aber mal angemerkt. Es ging mir hier nicht um die Prioritäten von == oder =, sondern mehr um das Postinkrement. Wann wird denn cnt mit SIG.length verglichen? bevor, oder nachdem es inkrementiert wurde?

@Leroy42: Bei der kurzen Antwort scheinst du dir ja absolut sicher zu sein... Hast du "gemogelt" und es doch ausprobiert? (ach... und selbst wenn...)

mfg Spacerat
 

Ark

Top Contributor
Spacerat hat gesagt.:
Es ging mir hier nicht um die Prioritäten von == oder =, sondern mehr um das Postinkrement. Wann wird denn cnt mit SIG.length verglichen? bevor, oder nachdem es inkrementiert wurde?
cnt hat zum Vergleich den Wert vor der Inkrementierung (deswegen heißt es ja auch Post-Inkrement).
Code:
if(write = cnt++ == SIG.length) cnt = 0;
sollte identisch sein mit
Code:
cnt = (write = cnt == SIG.length) ? 0:cnt+1;
(ungetestet)

Ark
 
S

Spacerat

Gast
@Ark: Ich schätze das muss man nicht testen. Wenn man einer Aufgabenstellung entsprechend Möglichkeit 2 forcieren müsste wäre deine Zeile natürlich meiner vorzuziehen. Was tut man denn beim Entwickeln von Software? Das Problem lösen oder Programmzeilen auf Verwendbarkeit prüfen. Doch wohl eher das Erste. Deswegen passt der Titel des Themas ja auch so gut. Denn was ich da gecodet habe ist schlicht der reinste Müll auch wenn es rein Zufällig Möglichkeit 2 ergibt. Denn wenn man nicht sicher ist, in welcher Reihenfolge eine Zeile abgearbeitet wird, sollte man einen anderen Weg finden.

@Marco13: Ich such mir 'nen Wolf... aber ich kann deinen Beitrag nicht finden. Auf welcher der 62 Seiten geht's denn los?

BTW: fallen euch möglicherweise ähnliche Codezeilen ein?

cu Spacerat
 

Ark

Top Contributor
Spacerat hat gesagt.:
@Ark: Ich schätze das muss man nicht testen. Wenn man einer Aufgabenstellung entsprechend Möglichkeit 2 forcieren müsste wäre deine Zeile natürlich meiner vorzuziehen. Was tut man denn beim Entwickeln von Software? Das Problem lösen oder Programmzeilen auf Verwendbarkeit prüfen. Doch wohl eher das Erste.
Na ja, man sollte schon auf wiederverwendbaren Code setzen. Ich würde deine Variante vorziehen. Bei meinem Code ging es nur darum, die Abhängigkeit der Variablen write von cnt klarer darzustellen.

Ark
 
S

Spacerat

Gast
Ark hat gesagt.:
Na ja, man sollte schon auf wiederverwendbaren Code setzen.
Dazu muss der Code (und sei es nur eine Zeile) selber aber erstmal verwendbar sein :wink: .

Ark hat gesagt.:
Bei meinem Code ging es nur darum, die Abhängigkeit der Variablen write von cnt klarer darzustellen.
Eben. Wenn in irgend einem Quelltext etwas klarer gestellt werden muss, kann es kein guter sein. Wie gesagt. Bei meiner Zeile ging es im Prinzip darum, wann inkrementiert und wann verglichen wird. Daraus resultiert dann ob "write" wahr oder falsch wird bzw. ob cnt 0 wird oder nicht. Wenn man genau weis, das das Postinkrement eine höhere Priorität als der Vergleich hat, ist meine Zeile kein Problem. Weis man es nicht, sucht man sich im Fehlerfall möglicherweise 'nen Wolf (oder vllt. auch mal ein anderes Tier... Wölfe hab' ich schon genug :D ). Bei deiner Zeile dagegen weis jeder sofort Bescheid. Du erinnerst dich noch an die ersten Überlegungen von Marco13 ?

Ark hat gesagt.:
Ich würde deine Variante vorziehen.
Waaahhhh... Tu' das blos nicht! Das ist böse... :lol:

cu Spacerat
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben