Eure Programmierkonventionen ?
-
Original erstellt von <Meinungsfrage>:
@Marc++us: Was meinst du eigentlich zu der Tab und Leerzeichengeschichte? Was benutzt du?
3 Blanks statt Tab. Mein Vorteil ist, daß ich das verbindlich für alle in der Firma festlegen kann.

Aber das ist eigentlich ein Nicht-Thema, das mit Programmierkonventionen gar nichts zu tun hat. Eine Lizenz z.B. für den frei konfigurierbaren SourceStyler kostet 300$ und formatiert jeden Quelltext (einschließlich der {}-Debatte) so um wie gewünscht. Formatierungen sind eigentlich kein wesentlicher Inhalt für eine Programmierkonvention.
Solche Themen wie Namensgebung halte ich für wichtiger.
-
zu { und }
In der C Bibel steht: egal ob
foo() {
oder
foo()
{Hauptache immer gleich.
-
also ich verwende für die Klammern den "Allman style", sprich
void bla()
{
}"K&R style" (also bla(){ ) find ich zu unübersichtlich.......
sonstige Konventionen:
Variablen-, Funktions- und alle anderen möglichen Namen werden aus dem Englischen Abgeleitet, nicht aus dem Deutschen.
Kommentare auch in Englisch (brech ich ab und an für kleinere Projekte - mein engl. ist nicht ganz so doll), und VIELE Kommentare (manche sagen ich kommentiere zu viel), meistens vor jedem längeren Block ein Kommentar, was dieser Block überhaupt macht (quasi eine Überschrift).
Variablennamen beginnen mit einer 1-Buchstaben-Abkürzung ihres Datentypes, z. b. "iIrgendwas" für einen Integer..... Außnahme sind Variablen für for-Schleifen, die meistens beliebige Kleinbuchstaben aus dem Alphabet sind.
gleiches gilt für Konstanten, die anstonsten Groß geschrieben werden
Funktionen ("Fitzelarbeiten" wie getBla()und sonstiger Kleinram natürlich nicht) erhalten nach dem Funktionskopf eine Beschreibung ihrer selbst, inkl. Parameter und Rückgabewert. (will auch beginnen, Nebeneffekte zu kommentieren)
überleg
ach ja, für kleinere Projekte: ich benutze Prototypen, die erste eigentliche Funktion im Quelltext ist immer main, alles andere (z. B. main steht ganz am Ende, auf Prototypen wird komplett verzichtet) ist mehr als nur unübersichtlich, IMHO
-
Also ich kommentiere auch immer in Englisch. Ich kommentiere aber sehr wenig, da ich denke, dass zu viele Kommentare eher überflüssig sind und man lieber den Code eindeutiger schreiben sollte, die meisten Kommentare verweisen bei mir auf das was noch zu tun ist (fangen mit einem [TODO] an) oder mit Warnungen, wo es später hacken könnte (fangen mit [warning] an), dann kann man einfach mit eingem grep die entsprechenden Zeilen auslesen.
@Marc++us
aber führende _ sind dem Compiler vorbehalten, da bleibt mir nur ein _ am ende, aber da ich das nur für Parameter mal benutze, finde ich es nicht alzu schlimm.indent ist auch ein Programm zum umformatieren von Source Code, aber Open Source.
-
Also ich kommentiere auch immer in Englisch.
und hast keine probleme mit dem finden der allerbesten begriffe?
einer, meiner kommentare, die immer wieder hier landen, ist//Ein Heap ist ein Binärbaum mit der Bedingung, daß jeder //Knoten kleinergleich seinen beiden Kindern (falls //vorhanden) ist. Diese Implementierung als Array //garantiert außerdem, daß der Baum ballanciert ist. //Einfügen eines beliebeigen Elements und Ausfügen //des kleinsten haben nur logarhitmischen Zeitbedarf. //Weil die Integritätsbedingung schwächer als beim //normalen Binärbaum ist, ist der Heap auch ein wenig //schneller.was heißt das auf englisch? und: trifft die übersetzung den nagel auf den kopf?
ich gebe ja zu, daß ich englische texte flüssig lesen kann, aber übersetzungen von begriffen wie "Eichmaß", "transitive Hülle", <joke>"kreisfreier zusammenhängender Graph",</joke> "Girokonto" oder "Urvater" fallen mir zu schwer, um auch nur im entferntesten annehmen zu können, es bestünde eine glaubhafte chance, den allerbesten begriff zu wählen, und das geht sowohl den bezeichnern als auch den kommentaren so.
-
@volkard
ja, so Situationen sind oft kritisch, da muss man sich eben auf sein Wörterbuch verlassen.
-
BTW.
was mir gerade einfällt, seit ihr Typen, die Leerzeichen zwischen Operanden und Operatoren machen?Also
a = b + 1;anstelle
a=b+1;Also ich mach nur Leerzeichen, falls ich das Gefühl habe, dass es ansonsten wirklich übersichtlich wird
also
if(a&&!b)da finde ich übersieht man so leicht das wichtige !
-
Original erstellt von kingruedi:
@volkard
ja, so Situationen sind oft kritisch, da muss man sich eben auf sein Wörterbuch verlassen.hast natürlich recht.
das war google.
a heap is a binary tree with the condition that everyone is small knot its two children (if available). In addition this implementation as array guarantees that the tree is ballanced. inserting one like-own element and deleting the smallest have only logarhitmic time requirement. because the integrity condition is weaker than with normal binary tree, is the heap also a little faster.das war ich:
a heap is a binary tree with the condition, that each knot lowerequal his two children (if available) is. this implementation as array guarantees in addition, that the tree ballaced is. insertion and deletion the smallest have only logarithmic time requirement. becaus the integrity condition weaker as at the normal binary tree is, is the heap also a bit faster.ich werde dennoch darauf setzen, daß nur die besten bezeichner und die besten kommentare gut genug sind.
-
Original erstellt von kingruedi:
Also ich mach nur Leerzeichen, falls ich das Gefühl habe, dass es ansonsten wirklich übersichtlich wirdich auch.
-
Ich mache viele Leerzeichen. Ich bin jemand, der sowas schreibt, wie:
for (int i = 0 ; i < blah ; ++i) { a += (i << 1); }
-
Original erstellt von Gregor:
**Ich mache viele Leerzeichen. Ich bin jemand, der sowas schreibt, wie:for (int i = 0 ; i < blah ; ++i) { a += (i << 1); }**
da fehlen aber noch sechs leerzeichen! so ist das ja total unlesbar!
for ( int i = 0 ; i < blah ; ++ i ) { a += ( i << 1 ) ; }
-
Original erstellt von volkard:
**da fehlen aber noch sechs leerzeichen! so ist das ja total unlesbar!
**Die mache ich halt nicht. :p Ich habe aber auch schon oft genug Leerzeichen bei Klammern gesehen. Finde ich nicht so schön.
-
warum nicht nach inhalt zusammenfassen?
for( int i=0 ; i<blah ; ++i ) { a += (i<<1); }
-
Original erstellt von volkard:
**warum nicht nach inhalt zusammenfassen?
**Hmmm... Ich habe gerade gesehen, dass das bei mir doch nicht so konsistent ist. Manchmal fasse ich auch nach Inhalt zusammen. Allerdings kommt bei mir immer ein Leerzeichen nach "for" und keins nach "(" und keins vor ")".

Ich mache z.B. auch oft folgendes :
a += array [i+1];
-
ahja ich nutze namespaces zu dokumention, bei den replace wettbewerb habe ich z.b.
namespace Dimah { namespace Private { template<typename Iter, typename ValueType> Iter mutative_find(Iter b, Iter e, const ValueType& v); template<typename Iter, typename Pred> void duff_for_each(Iter begin, const Iter end, Pred pr); namespace WhatAndWithEqSize { inline std::string & replace(std::string & in, const std::string & what, const std::string & with); } namespace WhatAndWithSizeOne { inline std::string & replace(std::string & in, const std::string & what, const std::string & with); } namespace WhatGreaterAsWith { inline std::string & replace(std::string & in, const std::string & what, const std::string & with); } namespace WhatLessAsWith { inline std::string & replace(std::string & in, const std::string & what, const std::string & with); } } // namespace Private std::string & replace(std::string & in, const std::string & what, const std::string & with) { using namespace Dimah::Private; if(what.size() == with.size()) { if(what.size() == 1) return WhatAndWithSizeOne::replace( in, what, with ); else return WhatAndWithEqSize::replace( in, what, with ); } else { if(what.size() > with.size()) return WhatGreaterAsWith::replace( in, what, with ); else return WhatLessAsWith::replace( in, what, with ); } } } // namespace Dimah
-
mal ehrlich, warum nicht die Funktion statt
WhatLessThanWith::repleace
lieber
ReplaceWhatLessThanWith
zu nennen.
Das haette den vorteil, dass der anwender direkt das richtige aufrufen kann.
Es ist ja oft so, dass man weiss ob with oder what groesser ist...
-
Der User kann doch auch so die Funktionen Aufrufen, ob er jetzt WhatLessThanWith::repleace oder ReplaceWhatLessThanWith nutzen ist doch egal (eigentlich sollte er keins von beiden).
Dadurch das ich Namespaces nutze kann ich lange Bezeichner wählen ohne dem User die langen Namen aufzuwingen (hier in den bsp kommt es schlecht rüber weil die Funktion nur einmal aufgerufen werden)
außerdem muss der Namespace nicht nur eine Funktion enthalten oder er könne auch ein namespace Private haben usw.[ Dieser Beitrag wurde am 30.11.2002 um 19:26 Uhr von Dimah editiert. ]
-
Wegen der Leerzeichen:
Bei mir eher so:for (int i=0; i<blah; ++i) { a += (i<<1); }Ich finde irgendwie ein Leerzeichen vor einem Semikolon nicht so toll. Aber das ist wohl eine frage des Geschmacks und nicht der Konvention.
-
Original erstellt von Dimah:
Der User kann doch auch so die Funktionen Aufrufen, ob er jetzt WhatLessThanWith::repleace oder ReplaceWhatLessThanWith nutzen ist doch egal (eigentlich sollte er keins von beiden).der user muss
Dimah::Private::WhatsLessThanWith::replace
aufrufen!
da ist Dimah::ReplaceWhatsLessThanWith schon besser!warum sollte er dass denn nicht? da spart er sich doch sinnlose ifs und aufrufe von string::size()
nicht dass das so teuer waere, aber in 90% der Faelle weiss der Anwender ja schon, was groesser ist!
-
Original erstellt von Shade Of Mine:
**der user muss
Dimah::Private::WhatsLessThanWith::replace
aufrufen!
da ist Dimah::ReplaceWhatsLessThanWith schon besser!warum sollte er dass denn nicht? da spart er sich doch sinnlose ifs und aufrufe von string::size()
nicht dass das so teuer waere, aber in 90% der Faelle weiss der Anwender ja schon, was groesser ist!**
naja ob
Dimah::WhatsLessThanWith::replace Dimah::ReplaceWhatsLessThanWithVom Schreibaufwand ist es doch fast gleich und die Vorteile der namespace Lösung habe ich schon genant.
Jetzt ist die Frage ob Private oder nicht Private, ok in diesen Fall ist der Private teil noch Eingärmassen brauchbar für den User, aber anderseits will ich den User der die lib nutzt und nur einfach replacen will nicht mit unnötigen Details belasten "welches replace brauche ich den?, was ist waht?" und am Ende bringt es ihn nichts messbares.
Der normale User sieht "Private" ah ok weiter brauche ich nicht zu gehen, der User der unnötige size aufrufe sparen will, oh "Private" ;).