Neu oder mit Perwoll gewaschen?

Status
Nicht offen für weitere Antworten.

Ice-Tea

Bekanntes Mitglied
Ich bin grad aus zufall auf eine Syntax gestoßen, die mir völlig neu ist und wollte nur mal nachfragen ob diese jemandem schon bekannt ist. In Büchern hab ich sowas jedefalls noch nicht gesehen.

Es geht um das else, das ohne einen Block auskommt bzw. den block von try nimmt:

Code:
            public boolean isLeaf(Object node) {
                if (node == "Keine passende Zutat gefunden!") {
                    return true;
                } else
                    try {
                        if (bedingung) {
                            return false;
                        } 
                    } catch (RemoteException ex) {
                        Logger.getLogger(ZutatToolkit.class.getName()).log(Level.SEVERE, null, ex);
                    }

                return false;
            }
 
S

SlaterB

Gast
apropos unschön:

Code:
            public boolean isLeaf(Object node) {
                if (node == "Keine passende Zutat gefunden!") {
                    return true;
                } else
                    try {
                        if (bedingung) {
                            return false;
                        }
                    } catch (RemoteException ex) {
                        Logger.getLogger(ZutatToolkit.class.getName()).log(Level.SEVERE, null, ex);
                    }

                return false;
            }
hätte auch gereicht als Code-Beispiel,
auf das, was man selber beeinflussen kann, am meisten achten!
 

0x7F800000

Top Contributor
Code:
if(bedingung)
  anweisung
else if(bedingung)
  anweisung
else
  anweisung
ist sicher nichts neues, und dass
Code:
  try{ }catch(Exception){}
zusammengehört ist auch klar... Neu ist es nicht, aber unschön^^ :D
 

Ice-Tea

Bekanntes Mitglied
SlaterB hat gesagt.:
apropos unschön:
...
hätte auch gereicht als Code-Beispiel,
auf das, was man selber beeinflussen kann, am meisten achten!

Sorry. Ich musste grad weg und wollte unbedingt die frage noch loswerden. Da war ich wohl zu faul es noch zu ändern.

Das der Code im mom. jecht bescheiden aussieht ist mir klar.

Aber wenns danach geht was schön aussieht, dann direkt so

Code:
            public boolean isLeaf(Object node) {
                if (node == "Keine passende Zutat gefunden!") {
                    return true;
                } else{
                    try {
                        if (bedingung) {
                            return false;
                        }
                    } catch (RemoteException ex) {
                        Logger.getLogger(ZutatToolkit.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }

                return false;
            }

Mir war halt nur vorher nur noch nicht klar, das auf ein else auch direkt ein try{.. folgen darf. Weil es ja über mehrere Zeilen geht.
Aber es wird dann anscheind der block von try als ersatz genommen.

EDIT:
Ich habs mal geändert, dann leidet das layout auch nicht so.
 

SegFault

Bekanntes Mitglied
Ice-Tea hat gesagt.:
Mir war halt nur vorher nur noch nicht klar, das auf ein else auch direkt ein try{.. folgen darf. Weil es ja über mehrere Zeilen geht.
Aber es wird dann anscheind der block von try als ersatz genommen.

Stimmt nicht ganz. Jede Verzweigung auch Schleifen kommen ohne Block aus. Jedoch wird dabei nur die erste Anweisung ausgeführt. Wenn diese dann in einen Block über mehrere Zeilen geht ist es in bezug auf die Verzweigung dennoch nur eine anweisung.

Bsp.:

Code:
while(1)
{
     if ( blabla )
          for ( int i = 0;i < 20; ++i) //dies ist die anweisung die bei if ausgeführt wird + den zugehörigen block
          {
               machwas();
          } 
          //Würde hier noch eine anweisung stehen würde der Compiler mit einen Fehler eines else ohne zugehöriges if quittieren
      else
          System.out.println("blabla war falsch");
}

Wie schon gesagt ist das for(...) die erste anweisung die zum if gehört und damit die bedingte Anweisung.
Bei reicht einfachen Konstruktionen ist das ganze noch sehr übersichtlich aber man kann damit jede menge müll machen bei dem man kaum noch durchsieht.
Ich weiss das in C++ solche Blöcke sogar genutzt werden um lokale Variablen nur in einen bestimmten raum gültig zu machen. Habs in Java noch nicht probiert müsste dann so aussehen
Code:
int y = 30;
int z = 20;
{
    int i = 10;
    y = i + 20;
} //Hier wird i vergessen
{
    int i = 15;
    z = i + 10;
}
manchmal kann das sinnvoll sein aber für wirklich sauber halte ich das nicht. Und wie schon gesagt ich habs nicht probiert obs für java anwendbar ist solche Lokalen Namespaces auf zu bauen.
 

Ebenius

Top Contributor
SegFault hat gesagt.:
Bsp.:

Code:
while(1)
{
     if ( blabla )
          for ( int i = 0;i < 20; ++i) //dies ist die anweisung die bei if ausgeführt wird + den zugehörigen block
          {
               machwas()
          } 
          //Würde hier noch eine anweisung stehen würde der Compiler mit einen Fehler eines else ohne zugehöriges if quittieren
      else
          System.out.println("blabla war falsch")
}
+ 2 × ';'
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben