Syntax im C-Stil == Schlecht?



  • Scheinbar finden viele, dass eine C-artige Syntax schlecht ist. Warum? Ich finde die besser als die meisten anderen, kann aber auch daran liegen, dass C++ meine Muttersprache ist(was Programmieren angeht ;)).



  • Schon alleine deswegen, weil sie viel Ballast und syntaktischen Müll mit sich bringt.

    Und dann natürlich noch deswegen. 😉

    for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
    


  • Zum Beispiel? Ich meine jetzt nicht die paar unsinnigen Dinge aus einer speziellen Sprache sondern generell Sprachen mit einer Syntax in dem Stil. Also auch Java und C# und so.

    Ein Beispiel, das ich mal gelesen hab, war dass man bei einer einzelnen Anweisung keine {} braucht aber bei zwei schon und man das leicht vergessen könne, wenn man eine zweite anweisung z.B. hinter ein if machen will. Halte ich für kein schwerwiegendes Problem, akzeptiere ich aber.



  • Hmm... ein paar Dinge, wo ich immer wieder aneck wenn ich vorher grad Python geschrieben hab:

    die Klammern bei Kontrollstrukturen oder fuer Bloecke sind ueberfluessig, ebenso die Semikolon am Zeilenende. Vergleich z. B. mal:

    // C style:
    while (doLoop && foo.isConnected())
    {
        if (state == VALID)
        {
            doSomething();
            somethingElse();
        }
        else
        {
             try
             {
                  errorCorrection();
             }
             catch(SomeError e)
             {
                  closeConnection();
                  return;
             }
        }
    }
    
    #Python
    while doLoop && foo.isConnected():
        if state == VALID:
            doSomething()
            somethingElse()
        else:
             try:
                  errorCorrection()
             except SomeError e:
                  closeConnection()
                  return
    

    Nahezu gleicher Code, aber wesentlich kompakter, schon allein weil all die Klammern wegfallen. Gut man kann jetzt sagen "man kann die Klammern auch anders setzen, dann stoeren sie nicht. Stimmt. Aber man muss sie machen, und obiger C++ Code ist nunmal gaengiger Stil in C++.
    Ausserdem fallen Anfaenger immer mal wieder in die "fehlende Klammern" - Falle. Fuer Profis kein Problem, aber trotzem laestig. Sind mit Sicherheit alles Kleinigkeiten, aber das Programmieren in Python ist eben durch so Kleinigkeiten wesentlich angenehmer. Am C-Syntax ist nichts falsch wenn man ihn erst mal beherrscht und wenn man sich an gewisse Regeln haelt. Aber manchmal waer's halt aners angenehmer.



  • Einer der Vergleiche die immer wieder gerne gezeigt werden.
    Pascal (übersichtlich):

    Function StringToUppercase(Zeile: String): String;
    
    type Kleinbuchstaben = ['a'..'z'];
    
    var temp: String;
        i    : Byte;
    
    begin
      temp:=zeile;
      for i:=1 to Length(zeile) do
        if zeile[i] in Kleinbuchstaben then 
          temp[i]:=chr(ord(temp[i])-32);
    
      StringToUppercase:=temp;
    end;
    

    und C (weniger übersichtlich, aber immernoch verständlich):

    char * StringToUpper(char * zeile)
    {
      static char temp [256];
      int i;
      for (i=0; zeile[i]!=0 && i<256; i++)
        if (zeile[i]>='a' && zeile[i]<='z')
          temp[i]=(char) zeile[i]-32; 
        else  
          temp[i]=zeile[i];
      temp[i]=0;
      return temp;
    }
    

    Leicht verändert übernommen von hier.

    Was allerdings so schlimm an Klammern sein soll, verstehe ich nicht. "if ... do .. end if" oder "do while ... end do while" ist genau dasselbe nur mehr Schreibarbeit 😕 Ehrlich gesagt, ich mag diese "hier ist restlos alles besser als bei c weil übersichtlicher"-Sprachen nicht, ich will programmieren - keine Romane schreiben 🤡



  • Wie macht man in Python eigentlich folgendes:

    void foo()
    {
        {int i;}
        {int i;}
    }
    

    ?



  • gogno schrieb:

    Wie macht man in Python eigentlich folgendes:

    void foo()
    {
        {int i;}
        {int i;}
    }
    

    ?

    In Python deklariert man seine Variablen nicht, das geschieht automatisch sobald man ihnen das erste mal was zuweist, dein Stueck Code waer in Python demnach:

    def foo():
        pass
    

    wobei "pass" die leere Anweisung ist, die gar nix macht. 😉

    Wenn du aber meinst, wie in Python verschiedene Code-Stuecke voneinander abgetrennt werden, wie die Bloecke die man in C mit { und } machen kann: das geht durch die Einrueckungen. Code, der auf die selbe Ebene eingerueckt ist, ist im selbem Block.
    Wenn du hingegen meinst, wie man 2 Bloecke im gleichen "Oberblock" hat, die gleiche Variablennamen haben: AFAIK geht das nicht, weil man in Python keine Deklarationen hat. Aber ich hab mich mehr darauf bezogen dass es toll waer, auch in C++ Bloecke nur durch ihre Einrueckung zu definieren. Dein Beispiel wuerde dann zugegebenermassen geschrieben werden als:

    void foo()
    {
        int i;
    ; // Einrueckungslevel zurueckgehen, damit die naechste Anweisung einen neuen Block beginnt
        int i;
    }
    

    Aber so oft kaeme dein Beispiel in der Praxis wohl nicht vor 😉



  • Ich meinte wie man einen lokalen Scope macht. Weiß aber nicht, ob man das in Python überhaupt gebrauchten kann. Gibt es da eigentlich vernünftige Destruktoren? ^^



  • Naja, würde das nicht die Funktion "schließen"?



  • C Syntax läßt sich leider schlecht parsen - Preprozessor, Konfigurationsabhängig (z.B. welche Standard-Include-Verzeichnisse), Ausnahmen. Das ist zwar für den Compiler nicht weiterschlimm, aber z.B. für IDE - Tools.



  • Hallo,

    also ich mag die C-Syntax sehr gerne (in der Kürze liegt die Würze 😉 ) zum Schreiben, das Lesen von anderer Leute Code kann aber schon etwas kniffliger werden, als, sagen wir mal mit VB oder Python. Trotzdem ist sie meine bevorzugte Syntax, nicht nur aus Gewohnheit. Ist aber wohl Geschmackssache.

    Python ist auch sehr schön zum coden, v.a. übersichtlich. Was mir aber an Python fehlt, ist der Inkrement und Dekrementoperator und die do - while Schleife. Das wäre mal gar nicht übel.

    MfG

    GPC



  • Ich finde die C Stil Syntax in Ordnung und besser als viele andere Stile. Beispielweise ist mir der Stil der BASIC Dialekte oder Delphi etwas zu "geschwätzig". Ich finde einfach ein {} wesentlich übersichtlicher als begin end.
    Allerdings gibt es auch einige Sprache, deren Syntax mit besser als die von C gefällt. Die Python Syntax find ich beispielweise noch angenehmer zu lesen.



  • Die Syntax ist zu umfangreich und komplex. Schlüsselwörter an sich finde ich schon sehr problematisch, daher kommen auch ständig die foreach-Diskussionen (uä).

    C++ fügt der Syntax noch mal enorm viel hinzu. Das ist alles sehr komplex und umfangreich.

    Am coolsten sind eh Programmiersprachen, bei denen der Quelltext gleich einem Datenform entspricht (zB Lisp)



  • kingruedi schrieb:

    Die Syntax ist zu umfangreich und komplex. Schlüsselwörter an sich finde ich schon sehr problematisch, daher kommen auch ständig die foreach-Diskussionen (uä).

    C++ fügt der Syntax noch mal enorm viel hinzu. Das ist alles sehr komplex und umfangreich.

    Am coolsten sind eh Programmiersprachen, bei denen der Quelltext gleich einer Datenform entspricht (zB Lisp)

    Einer Datenform? Was genau meinst du damit? In Lisp ist ja alles eine Liste... oder so. Habe da nie einen Vorteil sehen können, war nur saumäßig unübersichtlich. Was bringt einem das? 😕

    Und warum sind Keywords so schlecht? Wenn eine Sprache komplex und umfangreich ist, dann hilft einem die Syntax da doch auch nicht gegen, oder? (Über Lisp weiß ich fast nichts.)



  • Der Vorteil ist ganz einfach, dass du den Quellcode wie normale Daten bearbeiten kannst. Wenn du dadrin keinen Vorteil sehen kannst, dann kann ich dir auch nicht helfen 🙂



  • Jo, das schon, nur ist das imho eher ein technischer Aspekt. Mir geht es ausschließlich um die Syntax. Sowas wäre in C++ o.ä. wohl nicht möglich.



  • gogno schrieb:

    Jo, das schon, nur ist das imho eher ein technischer Aspekt. Mir geht es ausschließlich um die Syntax. Sowas wäre in C++ o.ä. wohl nicht möglich.

    genau deshalb geht es um die syntax: die syntax von lisp erlaubt dir sachen, die in c++ ziemlich ausarten würden. (zum schreiben eines lisp-interpreters, zum beispiel.)



  • Wieso fühl ich mich jetzt nur unangenehm an XSLT erinnert? 😉



  • sarfuan schrieb:

    Wieso fühl ich mich jetzt nur unangenehm an XSLT erinnert? 😉

    Das unangenehme an XSLT ist doch nur XML.

    @gogno
    aber das ist ja eine fundamentale Sache für die Syntax.



  • Was ich damit sagen wollte ist, dass solche Features nicht in solche Sprachen wie C++ passen. Da fehlen dann übersichtliche Syntax und Performance. 😃 Kann aber auch Quatsch sein.


Anmelden zum Antworten