Stilfrage: C als Präfix für Klassen



  • Original erstellt von Kauz01:
    Grundsätzlich mal richtig. In der Praxis bin ich aber ganz froh, wenn ich der Variable ansehe, ob ein (eigentlich nummerischer) Schlüssel an dieser Stelle als long oder als string abgelegt ist.

    ok, es gibt fälle...
    nubes schreiben gerne vor jeden zeiger ein p. vorteil: man sieht den fehler von if(pa==pb) wo ein if(*pa==*pb) gemeint war. mir isses auch schon vorgekommen, daß ich alte C-funktionen las (das sind die verkorksten apparate über mehrere bildschirmseiten), und auf seite 3 nicht mehr wissen konnte, was nu f war.
    ob der schlüssel nu numerisch ist, ob da ne zahl oder ein string verwendet werden darf. ich weiß nicht, evtl läßt sich hier mit der recht strengen typprüfung was rausfischen. (wenn man ne mißratene API hat, die einem void* vollschreibt und typprüfung gar nicht andeutungsweise mag, sollte man auch mißratenen code damit bauen, sonst paßts gar nicht.)
    aber vor allem: heute, wo funktionen 2 oder 3 und die dicken funktionen 6 zeilen haben oder trivial sind, kann man erwarten, daß die regeln zum guten programmieren sich leicht geändert haben zu damals.
    (ich erinnere mich mit schaudern an klassen, die 30 attribute hatten! jo, da hab ich bezeichner mit n am anfang geliebt. kann aber sein, daß es vor allem daran lag, daß ich nicht 30 maximal 6-buchstabige bezeichner auseinanderhalten konnte.)

    [/QUOTE]Wir können jetzt natürlich Diskussionen führen, ob so was generell nicht vorkommen sollte. Mit Generalisierungen ist das aber so eine Sache :).[/QUOTE]
    genau, die sind nämlich alle falsch.



  • Nachdem wir erst letztens ausführlichst über die Präfixe diskutiert haben, wollt ich nix mehr zu schreiben.
    Ich bin wie Volkard der Meinung, dass der Name der Variable die Bedeutung verraten soll. Im Gegensatz zu Volkard bin ich aber durchaus geneigt, neben der Bedeutung auch noch die Zusatzinformationen über den Typ mit in den Namen zu nehmen. Das schadet nicht und wenn es mir nur einmal erspart, das Tippen zu unterbrechen, weil ich erst im Header nachgucken muss, was das für ein Typ ist, bin ich schon glücklich drüber.

    Aber warum ich jetzt eigentlich hier Poste:

    Da erinnere ich mich doch daran, dass ich mit dir und Shade gestritten habe, ob es Fällen geben könnte in welchen es sinnvoll sein [b|könnte[/b]

    0 == i
    statt

    i == 0
    zu schreiben. Das wurde aber von dir (und Shade) generell abgelehnt.

    Dass das ein semantischer Unterschied sein sollte ist Quatsch imho. "Gleich" ist eine mathematisch-logisch definiert und da isses egal, wie rum das ist. Dass man bei ner Gleichung die Seiten tauschen kann wisst Ihr alle.
    Dabei gibts aber in C/C++ ein imho schlagendes Argument 0 == i zu verwenden:

    if( i = 0) //upsala
    {
    }

    Da kommt, wenn ich Glück hab ne Warnung, die nicht zischen X anderen Warnungen untergeht, die mir der Compiler wegen irgendwelchen Bibliotheken, die ich verwende bringt (für die kann ich nix).

    if( 0 = i) hingegen macht nen Compilerfehler.

    Ich versuche "ziemlich generell" die zu untersuchende variable allein auf eine seute zu stellen.

    Versuch ich auch. Nur eben andersrum und wenn eines von beiden const ist, dann kommt das nach links. Einfach aufgrund eines Unschönheit in der Syntax von C.



  • Ich verwende ebenfalls Präfixe für var, member und class - also:

    class CWhatever
    {   int m_iVar;
        // ...
    }; // class CWhatever
    

    Macht das Lesen des Codes einfacher - einmal angewöhnt einfach nur praktisch. Man weiss immer wen man eine Variable verwendet, welchen Typs sie ist.

    my 0.02€



  • ach diese diskussion ist herrlich.

    man könnte auch malern zuhören, die sich darüber streiten, ob man nun pinsel oder kelle, oder rot oder grün, öl oder aquarell verwenden soll 🙂

    Ich seh das so: Der Programmierer ist der Künstler, der Quelldatei seine leinwand.
    Wenn man sich nur ein schönes Bild malen will, ist es reichlich wurscht, welche technik man benutzt. Da kann auch kartoffeldruck schon tolle ergebnisse bringen.

    Wenn man aber bilder für auftraggeber machen will, die unbedingt gerade kanten in ihrem bild haben wollen, dann muss man wohl oder übel mal ein lineal benutzen.

    😃 😃 😃

    grüsse



  • Hallo,
    lustig. Einige von euch tun so, als ob Präfix == Professionell und alles andere gleich Hobby wäre. Dazu noch so gönnerhaft nach dem Motto: "Ach naja, solange man nur Spielzeugprogrammierung macht, ist das alles egal. Wenn ihr dann aber mal groß seit und professionell in einer so tollen Firma programmiert wie ich, dann werdet ihr einsehen, dass mein Weg der einzig logische ist." So argumentieren meine Großeltern auch immer. Wenn ihnen nichts mehr einfällt, kommt einfach ein: "Naja, in deinem Alter kannst du das noch nicht verstehen."

    Ihr vergesst dabei aber ein wenig, dass die Sutters, Meyers', Volkards, Martins, Alexandrescus... dieser Welt ebenfalls professionell programmieren. Die Argumente gegen Präfixe kommen also nicht von irgendwelchen Sandkasten-Fetischisten.

    Also von mir aus kann jeder programmieren wie er will. Auf dem Kopf stehend, unterm Tisch liegend, mit 17 Seiten Präfix vor jeder Variablen oder ganz ohne Variablen. Nur in dem Moment wo er behauptet, seine Methode wäre die Richtige bevorzuge ich echte Argumente statt Scheinwahrheiten wie "in der professionellen Programmierung macht man das so", "OOP Code ist wiederverwendbar" und "Java ist langsam".



  • Original erstellt von <prokker>:
    @DocJunioR ich hab schonmal Code von dir gesehen und ich finde ihn sehr sehr unübersichtlich. Du programmierst auch eher so'n C und C++ mischmasch. 😡 🙄

    Und ich hab schonmal gesagt, solch Kommentar nur mit Anmeldung. Ich kann Leute nicht ausstehen, die nicht offiziell zu ihrer Meinung stehen!

    Dass ich objektorientiertes C programmiere weiß ich. Bin halt ein C-Umsteiger und seh's nicht ein, dinge fallen zu lassen, die gut sind, nur damit ich in einen ISO reingequetscht werden kann.
    Im Übrigen bin ich Individualist. Ich mache immer alles so, wie's mir gefällt *fg*



  • Original erstellt von Dimah:
    also das 50 leute in firma xyz das auch so machen ist kein stichhaltiges argument.
    die leute haben nicht die zeit sich mit solchen fragen zu bescheftigen, außerdem gild ja oft "never change a running system" d.h. in der steinzeit der programmierung werden irgend welche regel festgelegt und gelten noch bis heute 😞

    Naja, Steinzeit. Es wird seit letztem Jahr offiziell C programmiert und dementsprechend sind die Richtlinien relativ neu.
    So nebenbei: Was vor 15 Jahren sinnvoll war, muss doch jetzt nicht plötzlich sinnlos sein, oder?

    Naja, ich habe hier jetzt wenigstens 4 Leute gelesen, die einen Präfix benutzen. Abschließend sag ich nur noch einmal:
    Man sollte sich Gedanken über Namenskonventionen machen! Wenn man dann zum Schluß kommt, dass man keine braucht, okay. Man hat sich wenigstens damit beschäftigt.

    So, ich werde mich aktiv aus diesem Thread zurückziehen, lediglich mal schauen, was es neues gibt. Ich bin hier, um meine Sicht zu erklären, und nicht, um mich mit euch zu streiten. Das wäre dann nämlich eine sinnlose Sache, die nur Antipathien erzeugt - muss ja net sein 😉

    cYa
    DjR



  • Man sollte sich Gedanken über Namenskonventionen machen! Wenn man dann zum Schluß kommt, dass man keine braucht, okay.

    Wieder so ein eigenartiger Satz. Wer behauptet, dass nicht-Präfix-Nutzer keine Namenskonventionen haben/brauchen? Namen sind ein fundamentaler Bestandteil der Programmierung. Man sollte sehr viel Gehirnschmalz in die Benennung von Objekten und Konzepten stecken. Das gilt für Präfix-Anhänger genauso wie für alle anderen Programmierer auch. Ich habe noch nie ein Projekt ohne Namenskonventionen gesehen, aber schon viele bei denen in eben diesen der Gebrauch von Präfixen missbilligt wurde.

    Um es noch mal klar zu sagen. Nur weil man auf den Einsatz von Präfixen verzichtet, heißt das nicht, dass man Humpty-Dumpty-Namen verwendet.



  • muss mich doch nochmal melden.
    Oracle hat beispielsweise Konventionen für PL/SQL-Programme eingerichtet. (die Beispiele und von Oracle entwickelten Scripte benutzen dies grundsätzlich)
    Hier bekommen Parameter den Präfix p_ und andere variablen v_. Cursors bekommen ein c_

    Dies sind übrigens Namenskonventionen. Okay, ich habe mich insofern falsch ausgedrückt, als dass ich natürlich Prafixe meine. Aber weiter sich darüber zu streiten, find ich sinnlos. Es wird eh immer so viele Meinungen geben, wie Programmierer.

    cYa
    DjR



  • Original erstellt von DocJunioR:
    muss mich doch nochmal melden.
    Oracle hat beispielsweise Konventionen für PL/SQL-Programme eingerichtet. (die Beispiele und von Oracle entwickelten Scripte benutzen dies grundsätzlich)
    Hier bekommen Parameter den Präfix p_ und andere variablen v_. Cursors bekommen ein c_

    Wie ich bereits dargelegt habe, ist es ein himmelweiter Unterschied zwischen C und C++, was die eher sinnvollen Konvestionen angeht.
    Unter PL/SQL übliche Konventionen sind in keiner Hinsicht Argument für einen Stil in C++. (Ich hab damals in PL/SQL auch keine Präfixe benutzt, sondern wartete nur, bis das Semester um war und ich dieses schlechtdokumentierte Oracle-Zeugs nie mehr verwenden mußte.)



  • Konventionen von einer Sprache auf die andere zu konvertieren ist echt dumm, es gibt zB Leute die benutzen das C vor Klassen auch bei Java weil sie sichs in c++ angewöhnt haben...in Java gibts ja auch soviel anderes als Klassen 😉 aber auch in C++ ist es einfach ein unnötiger Auswuchs am Namen... sagt was ihr wollt , des is einfach sinnlos (und auch keine Frage von Geschmack)



  • @HumeSikkins

    Einige von euch tun so, als ob Präfix == Professionell und alles andere gleich Hobby wäre. Dazu noch so gönnerhaft nach dem Motto: "Ach naja, solange man nur Spielzeugprogrammierung macht, ist das alles egal. Wenn ihr dann aber mal groß seit und professionell in einer so tollen Firma programmiert wie ich, dann werdet ihr einsehen, dass mein Weg der einzig logische ist."

    Ich verstehe deine Einschätzung nicht. Ich hatte nicht das Gefühl, als ob sich hier irgendwer als extrem professionell darstellen will. Jeder hat über seine Erfahrungen berichtet. Die meinen sind halt so. Hätte ich einen anderen Programmierstil und würde ich meine Methoden kurz genug programmieren (Gruß an Volkard), dann tendierte die Notwendigkeit von Präfixen und ungarischer Notation gegen Null. Natürlich nur, wenn ich mich auch auf meine Kollegen verlassen kann.

    hr vergesst dabei aber ein wenig, dass die Sutters, Meyers', Volkards, Martins, Alexandrescus... dieser Welt ebenfalls professionell programmieren.

    Das vergesse ich sicher nicht. Vor dem Wissen Volkards kann ich sicher nicht bestehen. Werde ich auch nie können, da ich mich in meiner Arbeit oft mehr um das kümmern muss, was wir programmieren, als um das wie. Das heißt aber nicht, dass ich keinerlei Erfahrung in der Programmierung habe. Wie gesagt: Diese Erfahrung muss sich nicht mit den Erfahrungen anderer decken. Imho geht es aber etwas zu weit, wenn es schon als überheblich angesehen wird, seine eigene Meinung zu präsentieren.



  • Ich hatte nicht das Gefühl, als ob sich hier irgendwer als extrem professionell darstellen will.

    Na dann kann einer von uns beiden nicht sonderlich gut lesen. Ich lese das aus nahezu jedem Beitrag von DocJunioR heraus. Aber ich habe auch eine Rechtschreibschwäche. Vielleicht ist die Leseschwäche da nicht weit.

    Vor dem Wissen Volkards kann ich sicher nicht bestehen. Werde ich auch nie können, da ich mich in meiner Arbeit oft mehr um das kümmern muss, was wir programmieren, als um das wie. Das heißt aber nicht, dass ich keinerlei Erfahrung in der Programmierung habe. Wie gesagt: Diese Erfahrung muss sich nicht mit den Erfahrungen anderer decken. Imho geht es aber etwas zu weit, wenn es schon als überheblich angesehen wird, seine eigene Meinung zu präsentieren.

    Scheinbar kann ich nicht nur nicht lesen sondern auch nicht schreiben. Ich habe nicht denjenigen als überheblich angesehen, der seine Meinung kund tut sondern denjenigen als gönnerhaft, der so Großmutterhaft daher redet.

    Und btw. Es geht hier überhaupt nicht um Erfahrung. Erfahrung kann schließlich in vielerlei Hinsicht auch hinderlich sein. Nimm einen erfahrenen C Programmierer und versuche ihm ordentliches C++ beizubringen. Da stört die Erfahrung mehr als das sie nützt.



  • [ Dieser Beitrag wurde am 21.03.2003 um 23:18 Uhr von klausmuell editiert. ]



  • Erster Beitrag und gleich *edit*. Find ich geil. 😃
    Naja, muss einfach auch mal meinen Senf dazugeben. Wer schonmal professionell in einer Firma gearbeitet hat der weiss, dass man einfach gewisse Namenskonventionen braucht. Dass diese einem nicht immer gefallen, kann da durchaus vorkommen. Nun hat man die Möglichkeit dies zu ändern oder auch nicht. Jedenfalls kann ich aus eigener Erfahrung sagen, dass dies selten Erfolg hat, da wie schon jemand sagte oft die Devise gilt "never change a winning team". Auch wenn "winning team == uralt Programmierung" bedeutet. Persönlich nutze ich so gut wie gar keine Präfixe. Der Name muss aussagen worum es sich handelt bzw. was ES macht, ich will ja nicht wissen wann und wie ES geboren wurde oder auf welche Schule ES ging. Nur in ganz seltenen Fällen nutze ich noch Präfixe, zB bei Zeiger Variablen, also

    p_anzahl_autos
    

    Hier weiss ich sofort, dass es sich nicht direkt um die Anzahl der Autos handelt, sondern lediglich um einen Zeiger darauf. In C nutze ich noch h_ für Handle, da diese eine Art Objekte darstellen mit eigenem Interface. In C++ sind das ja Klassen und damit unnötig. Das wars dann aber auch schon mit den Präfixen.
    Absolut genial finde ich solche Sachen: 😉

    typedef struct {
      int xyz32_ein;
      int xyz32_paar;
      int xyz32_struktur;
      int xyz32_variablen;
    } XYZ32;
    

    No comment!
    Das gleiche bei Klassen Membern (m_ *lol*).
    Ich will ja hier niemandem zu nahe treten, aber ich hab so das Gefühl, dass manche ihre Quellcodes mit Notepad schreiben. Jede ordentliche IDE bringt doch Features mit, um schnell zu bestimmen welchen Typ eine Variable hat, wo sie definiert ist, wo sie verwendet wird, etc. Da muss ich doch sowas nicht im Variablennamen verschlüsseln. Ich benutze zB MSVC 6.0 mit Visual Assist (supi Tool!), will damit nicht sagen dass es das beste ist wo gibt, bin aber völlig zufrieden damit. Nur ab und zu muss ich feststellen, dass MS einige spezifische Dinge eingebaut hat *verwundernmichdastutehnichtmehr*. So wird hier bei der Erstellung einer neuen Klasse über das Menü das C Präfix berücksichtigt.
    Und wenn jetzt einer anfängt zu behaupten er müsse Präfixe verwenden, weil er uU auch mal in einem billigen Editor was nachschauen muss, kann ich nur sagen: VERSORG DIR 'NE ANSTÄNDIGE IDE! 😉
    Ich denke es reicht Namen grob mit Hilfe von Gross- und Kleinschreibung zu unterscheiden. So mach ich es zB:
    EIN_DEFINE
    EINE_REINE_C_STRUKTUR
    EineGlobaleVariable
    EineFunktion
    EineKlasse
    eine_lokale_variable
    ein_struktur_member
    Absolute bzw. globale Sachen also gross oder als Capital, relative bzw. lokale Sachen klein (für Anregungen oder Verbesserungsvorschläge hab ich durchaus ein offenes Ohr).
    Letztendlich muss jeder selbst entscheiden, ob und wie er Namenskonventionen benutzt. Nur sollte man sich ab und zu fragen, ob es tatsächlich einen Sinn hat was man. Manchmal ist es besser mit der Zeit zu gehen auch wenn dies vielleicht einige Überwindung kostet.

    Nochwas zu dieser i == 0 Geschichte. Semantisch mag beides, also i == 0 und 0 == i korrekt sein, syntaktisch jedoch denke ich sollte man i == 0 immer den Vorzug geben. Nicht umsonst kann ein x86 Prozessor dies

    cmp [i], 0
    

    verarbeiten, dies aber nicht

    cmp 0, [i]
    


  • Original erstellt von groovemaster2002:
    **Nochwas zu dieser i == 0 Geschichte. Semantisch mag beides, also i == 0 und 0 == i korrekt sein, syntaktisch jedoch denke ich sollte man i == 0 immer den Vorzug geben. Nicht umsonst kann ein x86 Prozessor dies

    cmp [i], 0
    

    verarbeiten, dies aber nicht

    cmp 0, [i]
    

    **

    auf c++ ebene ist das aber egal und da rum gehts hier.
    Ich glaube ihr seid blos 0 == i weil ihr es als anfänger anders gelernt habt und fast nie ein i = 0 statt i == 0 geschrieben habt.



  • auf c++ ebene ist das aber egal und da rum gehts hier

    Wusste gar nicht, dass wir uns im C++ Forum befinden. Mein Browser zeigt jedenfalls "Rund um die Programmierung" an. 😉

    Ich glaube ihr seid blos 0 == i weil ihr es als anfänger anders gelernt habt und fast nie ein i = 0 statt i == 0 geschrieben habt.

    Dazu kann ich nur sagen, dass ich seit über 12 Jahren programmiere, Assembler, C und bin jetzt dabei die Mysterien von C++ zu erforschen. Vor 4 Jahren wurde dann aus Hobby der Beruf. Da denk ich kann man nicht mehr von Anfänger sprechen. Und mit der Begründung, die hier schon jemand gebracht hat, dass eine Warnung bei i = 0 im Getümmel von X Warnungen untergeht, der sollte besser mal versuchen ein Programm so zu schreiben, wo weder Fehler noch Warnungen entstehen (JA, das ist doch tatsächlich möglich 😉 ). Schliesslich will ich mich nicht um jede Unzulänglichkeit bezüglich Fehlervorbeugung kümmern müssen, da will ich mich voll und ganz auf meinen Compiler verlassen.



  • Original erstellt von groovemaster2002:
    Dazu kann ich nur sagen, dass ich seit über 12 Jahren programmiere, Assembler, C und bin jetzt dabei die Mysterien von C++ zu erforschen. Vor 4 Jahren wurde dann aus Hobby der Beruf. Da denk ich kann man nicht mehr von Anfänger sprechen.

    das du jetzt anfänger bist will ich damit nicht sagen, ich meine als du es mal warst

    Original erstellt von groovemaster2002:
    Und mit der Begründung, die hier schon jemand gebracht hat, dass eine Warnung bei i = 0 im Getümmel von X Warnungen untergeht, der sollte besser mal versuchen ein Programm so zu schreiben, wo weder Fehler noch Warnungen entstehen (JA, das ist doch tatsächlich möglich 😉 ). Schliesslich will ich mich nicht um jede Unzulänglichkeit bezüglich Fehlervorbeugung kümmern müssen, da will ich mich voll und ganz auf meinen Compiler verlassen.

    jup und auch wenn man fremd header und libs benutzt gibt es z.b. beim msvc ein nettes #pragma

    #pragma warning( push, 3 )
    #include <irgendwas.h>
    #pragma warning( push, 4 )
    
    int main()
    {
        int i = 0;
        if(i = 0);
    }
    


  • Original erstellt von groovemaster2002:
    Ich denke es reicht Namen grob mit Hilfe von Gross- und Kleinschreibung zu unterscheiden.

    Das ist in deutschen Texten so üblich, ja. Ist auch extrem praktisch, weil ich dann Texte schön schnell überfliegen kann (die meisten Menschen lesen dann nur die Wörter die mit einem Großbuchstaben beginnen, weil Deutsch im Gegensatz zum Englischen eine eher 'Substantiv-Basierte' Sprache ist), aber genau das sollte man mit Progammcode nicht(!) machen.
    Das 'Problem' liegt bei C++, weil dort einige Programmteile nicht lokal interpretierbar sind: 'a b(c);' ist zB in C eine Funktionsdeklaration, in C++ könnte man auch ein Objekt b vom Typ a in Abhängigkeit von c erzeugen wollen. Um dieses globale Wissen zu kompensieren verwendet man eine Notation, die es in C nie gebraucht hat. In C ist die Notwendigkeit eine Notation irgendeiner Art zu verwenden (damit meine ich jetzt nicht, kein sinnbasiertes Namensschema einzuführen) nicht gegeben.



  • @Dimah
    #pragma versuch ich idR zu vermeiden, da nicht alle von jedem Compiler gleich gut unterstützt werden. Habe da zB zwischen MS und Borland schon Unterschiede festgestellt (kann aber auch daran liegen, dass ich nur relativ alte Borland Compiler kenne wie der bei BC5).

    @Daniel E.

    Um dieses globale Wissen zu kompensieren verwendet man eine Notation, die es in C nie gebraucht hat.

    Und wie sieht diese Notation genau aus? Vielleicht könntest du mal ein konkretes Beispiel posten. Da ich mich momentan gerade als C++ Rookie versuche würde mich das schon sehr interessieren.


Anmelden zum Antworten