Stilfrage: C als Präfix für Klassen
-
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 heuteNaja, 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)
-
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, alsop_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 diescmp [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.
-
Original erstellt von groovemaster2002:
**@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).
**#pragma wird vom compiler ignoriert wenn er den befehl nicht versteht
dh man packt das #pragma vielleicht in ein paar guards und die sache ist gegessen -> und man erreicht das sinnlose warnungen wegfallen und man trotzdem mit der höchsten warnstufe kompilieren kann (weil die 'sinnlosen' warnungen nur bei deinem code warnen).gerade bei C/C++ ist das wichtig, da man die fehler zur compileTime erkennen muss.
-
Original erstellt von Dimah:
**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 )
**aber die header des msvc selbser werfen lauter warnungen.
dazu kann man deinen trick erweitern mit #pragma includealias(<iostream.h>,<msvc_bugfix/iostream.h> ) und in der <msvc_bugfix/iostream.h> steht dein code mit
#pragma warning( push, 3 )
#include <iostream>
#pragma warning( pop )
-
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.
Der Satz lässt mich schon den ganzen Tag nicht mehr los. Jetzt muss ich das doch noch kommentieren.
Die Erfahrung ist nicht hinderlich. Das Problem ist, dass man oft zu bequem ist, sich in eine neue Sichtweise einzuarbeiten. Zu faul neu zu lernen. Wenn ein erfahrener C-Programmierer an C++ rangeht und sich auf die Sachen raussucht, die er schon kennt, einfach weil es bequemer scheint, dann findet er seinen Weg nie. Es ist nicht seine Erfahrung, die ihn behindert. Teile seiner Erfahrung können ihm auch in C++ nützlich sein. Behindert wird er, wenn er seine Erfahrung unkritisch auf das neue überträgt, wenn er sich nur auf Gemeinsamkeiten stürzt.
Jetzt mal wieder zurück zum eigentlichen Thema des Threads. Präfixe. Meine Erfahrung aus Projekten mit und ohne Präfixen ist, dass sie mir geholfen haben die Sourcen mit denen ich arbeiten musste leichter und schneller zu verstehen. Im allgemeinen behindert es mich nicht, wenn ich Präfixe benutze. Warum sollte ich sie nicht mehr verwenden?
Sollte aber der (unwahrscheinliche) Fall auftreten, dass ich die Länge von Variablennamen stark beschränken müsste, muss ich eine Entscheidung treffen. Ist es wichtiger einen aussagekräftigen Bezeichner zu haben oder ist es sehr wichtig über Präfixe den Typ zu erkennen. Bei dieser Entscheidung kann mir meine Erfahrung helfen. Wenn ich nie die Erfahrung gemacht habe, dass mir Präfixe was bringen können, werde ich die Vorteile die ich damit haben kann nie erfahren. Sollte ich aber, weil ich positive Erfahrungen mit Präfixen gemacht habe, darauf bestehen, dass diese verwendet werden, und gar nciht darüber nachdenken, dass ich auch Vorteile haben kann, wenn ich sie weglasse, dann bin ich unflexibel und borniert. Es ist nicht die Erfahrung die mich behindert, sondern die Faulheit und die Unfähigkeit über meinen Tellerrand zu gucken.