[Progra] Methoden beenden

[Progra] Programmierung
[DSAL] Datenstrukturen und Algorithmen
[SWT] Softwaretechnik
[DB] Datenbanken und Informationssysteme

Beitragvon O.D. » 23.12.08 10:55

C-Otto hat geschrieben:Das ist Absicht, da Programmierer gerne if(true) und while(false) benutzen.
Ok, dann nehm ich alles zurück und behaupte das Gegenteil.
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Beitragvon thana » 23.12.08 16:55

O.D. hat geschrieben:Oh man ...
ich hatte gedacht Java sein ein klein wenig schlauer als das.

Wieso zur Hölle sollte der Compiler das denn evaluieren?
*kopfschüttel*
thana
 
Beiträge: 264
Registriert: 18.10.07 17:01

Beitragvon MaoDelinSc » 23.12.08 23:52

Und wieso sollte man überhaupt etwas von der Form

{
Anweisung
return;
weitere Anweisung
}

machen? Die weitere Anweisung ist doch eh überflüssig, da diese niemals ausgeführt wird...

Stattdessen also

{
Anweisung
if (true) return;
weitere Anweisung
}

zu schreiben, mag der Compiler vll kapieren, aber es ist doch sinnlos, oder nicht? Die weitere Anweisung wird ja eh niemals erreicht, von daher kann man sie ja auch einfach weglassen oO

Und wenn's zu Testzwecken ist, kann man ja auch // davorsetzen, geht eh viel schneller als ein if (true) return; dazwischenzuschreiben...
Was macht man, wenn man ein ungelöstes Problem hat?
Man gibt ihm einfach einen Namen!

(copyright Hawi)
MaoDelinSc
 
Beiträge: 296
Registriert: 07.12.07 10:28
Wohnort: Aachen
Studiengang: Informatik (B.Sc.)
Studiert seit: WS 09/10
Anwendungsfach: Medizin

Beitragvon C-Otto » 23.12.08 23:54

Ein while(false) hat den Vorteil, dass im eingeschlossenen Block auch Kommentare stehen koennen. Genestete Kommentare sind sonst problematisch.
Dr. rer. nat. Carsten Otto
http://verify.rwth-aachen.de/otto/
Benutzeravatar
C-Otto
 
Beiträge: 568
Registriert: 10.08.06 00:20
Wohnort: Schwalbach am Taunus
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon O.D. » 24.12.08 09:33

C-Otto hat geschrieben:Ein while(false) hat den Vorteil, dass im eingeschlossenen Block auch Kommentare stehen koennen. Genestete Kommentare sind sonst problematisch.
Jap. Außer in D, da gibt es schachtelbare Kommentare:
Code: Alles auswählen
ich bin code
/+
ich bin ein kommentar
/+
ich auch
+/
und ich auch
+/
ich bin wieder code

Und ich bin D Fan ;)

P.S.: Frohes Fest.
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Beitragvon Coolcat » 24.12.08 12:47

Genestete Kommentare sind sonst problematisch.

Dann nimmt man halt einen Editor der damit umgehen kann. Beispielsweise KWrite kann das, einfach ein paar Zeilen markieren und Strg+D bzw. Shift+Strg+D drücken.

Ansonsten wird es erst richtig schön wenn man bedingte Kommentare in Java benutzt. In C++ kann man ja einfach sowas wie #ifdef DEBUG .... #endif schreiben, in Java muss man halt explizit vorher einen Präprozessor laufen lassen... Ich benutzte das beispielsweise um JUnit Code ein- oder eben nicht einzubinden. So läuft in der Release-Version kein unnötiger Ballast mit.

Sieht hässlich aus und ist auch so beabsichtigt:
Code: Alles auswählen
/* GNU M4 macro processor statement: DO NOT CHANGE THIS COMMENT!
   M4_SHOWCODE(`M4_JUNIT',`SHOW') */
import org.blablubb.JUnitRunner;

//...

JUnitRunner.run();      
/* M4_ENDCODE */


Mein Skript für den M4 sieht so aus:
Code: Alles auswählen
m4_define(`M4_SHOWCODE',`m4_ifdef(`$1',`m4_ifelse(`$2',`SHOW',``M4_SHOWCODE(`$1',`SHOW')'',``M4_SHOWCODE(`$1',`SHOW') */'')',`m4_ifelse(`$2',`SHOW',``M4_SHOWCODE(`$1',`HIDE')'
m4_dnl',``M4_SHOWCODE(`$1',`HIDE') '')')')
m4_define(`M4_HIDECODE',`m4_ifdef(`$1',`m4_ifelse(`$2',`SHOW',``M4_HIDECODE(`$1',`HIDE')'
m4_dnl',``M4_HIDECODE(`$1',`HIDE') '')',`m4_ifelse(`$2',`SHOW',``M4_HIDECODE(`$1',`SHOW')'',``M4_HIDECODE(`$1',`SHOW') */'')')')


M4 hat ne richtig widerliche Sprache...aber den Präprozessor hatte ich halt gerade zur Hand. Das ganze macht nichts anderes als das */ in der zweiten Code Zeile zu entfernen bzw. wieder einzufügen.

zum Ausführen nimmt man ein kleines Bash-Skript:
Code: Alles auswählen
m4 -P -F $SCRIPTSDIR/macro.m4f $SCRIPTSDIR/macro.m4
m4 -P -R $SCRIPTSDIR/macro.m4f -DM4_JUNIT <$sourcefile >$sourcefile.tmp
mv -f $sourcefile.tmp $sourcefile
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon user » 24.12.08 15:13

Ist zwar schon länger her, dass ich das benutzen musste, aber ich glaube mich zu erinnern, dass die Compiler auch bei

Code: Alles auswählen
if (true) return;


Gemeckert hat. Was dafür damals(TM) funktioniert hat war

Code: Alles auswählen
if (1 != 0) return;


Vermutlich bekommt das Java-Codeoptimizer da 'ne Exception weil sie nicht genug Heapmemory hat.
user
 
Beiträge: 104
Registriert: 26.05.08 00:58
Wohnort: Tokyo

Vorherige

Zurück zu Praktische Informatik