Habt ihr Programmier-Prinzipien?

Übersicht Sonstiges Smalltalk

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

the FR3AK

Betreff: Habt ihr Programmier-Prinzipien?

BeitragSo, Feb 19, 2012 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Mich würde es interessieren (nicht nur für die Blitz-Dialekte) ob ihr beim Programmieren selbstbestimmte Muster für Variablennamen, Funktionsnamen, etc. benutzt, also eine Variable z.B. immer nach dem Muster

Code: [AUSKLAPPEN]
wort1_wort2


und eine Funktion immer z.B.

Code: [AUSKLAPPEN]
wort1Wort2Wort3()


schreibt, um Missverständnisse im Code zu verhindern und eine bessere Übersicht beizubehalten.

Ich selbst nutze derartige Muster und bin gespannt ob ich der einzige bin, der das macht (was ich aber nicht denke).


*discuss*
 

konstantin

BeitragSo, Feb 19, 2012 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Was bei mir sowohl fuer Variablen als auch fuer Funktionen gilt: erster Buchstabe klein (es sei denn es handelt sich um eine Konstante) und so gut wie nie die Verwendung von _ (ich mag das Teil einfach nicht). Ansonsten auch immer: () nach Statements wie if.
 

PhillipK

BeitragSo, Feb 19, 2012 23:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Uff, da habe ich viele varianten die ich nutze.

Fields von Types schreibe ich immer eindeutig, in englisch.
For-variablen (for local XXXX = 0 to 10) kriegen immer eine bezeichnung mit tmp oder act (act = aktuell, tmp = temporär, je nach anwendungsart)

funktionen die locale variablen nutzen kriegen immer ein _ davor, zb local _x:int.

Globale variablen haben meist auch einen eindeutigen, englischen namen, zb timer oder map.

Funktionen kriegen je nach nutzen einen recht aussagekräftigen namen, zb ScanNonAlphaNumReverse (so hieß eine funktion, die einen string von position X an nach hinten durchsucht und die position des ersten nicht-alphanumerischen zeichen zurückgibt.)

Ansonsten kommt auch sehr oft 'Set' bzw 'Get' vor. GetResolution() oder auch SetTile. Solche funktionen verwende ich überwiegend um mit Types zu hantieren bzw auch um Arrays zu manipulieren. Die Setter und Getter prüfen da immer brav auf in-range, ob etwas belegt werden darf etc.

Allerdings ist bei mir überwiegend sehr viel schrott als variablenname vorhanden. Sowas wie Blar oder narf, das kennzeichnet das ich durchs programmieren schlechte laune hatte (*g*) und unbedingt die funktion / methode / was auch immer neuschreiben muss Very Happy

Nicdel

BeitragSo, Feb 19, 2012 23:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Meistens, mir passiert aber auch häufig sowas:

Code: [AUSKLAPPEN]
void derp()
{
   FILE *lolz = fopen("C:\\srcds\\derp.txt","w");
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Holzchopf

Meisterpacker

BeitragSo, Feb 19, 2012 23:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup, solche Richtlinien - äh, Programmiererprinzipien habe ich. Aktuell* benutze ich hauptsächlich CamelCase (variablen beginnen mit einem Kleinbuchstaben, Funktionen mit einem Grossbuchstaben, Folgewörter ohne Unterstrich direkt mit Grossbuchstaben angehängt, bei Konstanten verwende ich Kapitälchen mit Unterstrich als Worttrenner), auf Ungarische Notation hingegen verzichte ich mehrheitlich (Ausnahme: Funktionsparameter beginnen mit p). Das sieht dann bei mir so aus:
Code: [AUSKLAPPEN]
Local ichBinEineVariable:Int
Function TestMePlease:Int(pNumber1:Int, pNumber2:Int)
Const THIS_KEY_DOES_NOTHING:Int = $0F

Je nach Laune schreibe ich Hexadezimalbuchstaben gross/klein. Und der Übersicht zuliebe rücke ich Werte bei Zuweisungsblöcken gleich weit ein...

*) Der eigene Stil ändert im Laufe der Zeit. Man arbeitet immer so, wie's einem am besten geht.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

the FR3AK

BeitragMo, Feb 20, 2012 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Also meine Prinzipien sehen so aus (in C++ zumindest):

Variablen:
Code: [AUSKLAPPEN]
meine_variable


Funktionen/Methoden:
Code: [AUSKLAPPEN]
helloThere()


Parameter (es wird der Variablenname benutzt, dem der Parameterwert zugewiesen wird nur mit einem _ davor - sofern der Wert übergeben werden muss)
Code: [AUSKLAPPEN]
_halli_hallo


Klassennamen
Code: [AUSKLAPPEN]
MeineKlasseIstCool
ODER - sofern sie in einem Namespace liegt - wird der Anfangsbuchstabe des Namespaces noch davor gesetzt (warum? Ich weiß es nicht) z.B. Code: [AUSKLAPPEN]
WMeineKlasseIstNochCooler


defines
Code: [AUSKLAPPEN]
ICH_BIN_NICHT_DA


Die geschweiften Klammern werden wie folgt gesetzt:
Code: [AUSKLAPPEN]
herpDerp()
{
     //hurrdurr
}


Und - bis auf Kommentare - wird alles englisch geschrieben.


Zum Thema geschweifte Klammern:

Bevorzugt ihr es die Anfangsklammer hinter den Funktions/Methodenkopf zu setzen oder in einer extra Zeile?

DaysShadow

BeitragMo, Feb 20, 2012 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
BMax:
Fields bekommen einen Unterstrich als Markierung für Private, Methoden-/Funktionen-/Variablennamen in CamelCase.
Generell lieber eine Leerzeile mehr als zuwenig, jeweils ein Leerzeichen nach und vor der öffnenden/schließenden Klammer.
Konstanten wie es halt üblich ist groß und mit Unterstrichen.
Types beginnen wie üblich mit T.
Generelle Vermeidung der Datentypkürzel %,# usw., ich schreibe immer :Int, :Float usw.

Sprachen mit geschweiften Klammern:
Die geschweifte öffnende Klammer kommt _nicht_ in die gleiche Zeile wie der Funktionskopf oder was auch immer, sondern in die nächste.
Ich bekomme immer einen Hass, wenn ich aneinander geklatschten Code sehe der direkt nach dem Funktionskopf oder Klassenname anfängt...bäh.^^
Ansonsten eben nach den klassischen Richtlinien richten sofern sie zusagen.

Generell ist ja nur wichtig, dass man einen Stil einhält und nicht in einer Datei so und in einer anderen wieder so schreibt.
Solange man also privat arbeitet oder keine Vorgabe hat reicht es ja wenn man Code schreibt den man selbst gut lesen kann.

Edit: @theFreak: Guter Mann, öffnende geschweifte Klammer in die nächste Zeile, brav! Mr. Green
Blessed is the mind too small for doubt
 

feider

ehemals "Decelion"

BeitragMo, Feb 20, 2012 8:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Jep, habe ich.
Vor Funktionen/Teilen, die noch nicht fertig sind, ausführliche Kommentare, wofür sie denn gut sind bzw was dort mal passieren wird.
Bei Type/Klassennamen wird der erste Buchstabe groß geschrieben.
Bei Funktionen/Variaben wird der erste Buchstabe klein geschrieben (CamelCase).
Geschweifte Klammern werden in die nächste Zeile geschrieben.
Einrücken. Immer, wenn es sinnvoll ist. Und wenn nach dem if auch nur ein Befehl steht: Einrücken.
Auslagerung von öfter werwendeten Codes in Headerfiles/Includes.
Zwischen verschiedenen Blöcken in einem Code, in denen verschiedenes geschieht, wird Platz gelassen.
In Sprachen, in denen Zeiger existieren, möglichst viel mit Zeigern arbeiten.

mfg
Dece
 

konstantin

BeitragMo, Feb 20, 2012 11:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Als Zaehlvariable verwende ich eigentlich die klassischen i/j/k... Je nach dem, wie tief die Verschachtelung geht.

Jamagin

BeitragMo, Feb 20, 2012 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bezeichne meine Variablen immer nach deren Sinn bzw. Verwendungszweck, das gleiche mache ich bei Funktionen.

Function pe_createDisplay()
Function pe_loadImages()
Function pe_clearDisplay()

und so weiter, ...

so weiß ich gleich welche Funktion was macht und brauch nicht viel kommentieren obwohl ich das zusätzlich vor die Funktion hinschreibe!


lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

Hubsi

BeitragMo, Feb 20, 2012 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hänge bei Variablen immer den "Typ" mit an, bzw. was sie speichert, z.B. player_img, player_x, usw. Funktionen notiere ich in CamelCase und was ich auch sehr lieben gelernt habe sind Konstanten. Gerade bei Werten wie z.B. dem Index eines Bmp-Fonts (fällt mir jetzt so ein weil ich gerade damit zu tun habe Smile) ist es kaum möglich sich den numerischen Wert zum Font zu merken, etwas wie 'Arial15' dagegen ist einfach. Zudem muß ich im Laufe der Programmierung Werte die ich den User verändern lassen will (Auflösung als Beispiel) nur von Const nach Global schieben. Aber ich schweife ab... Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

PSY

BeitragMo, Feb 20, 2012 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,

ich mach das so:

1. Alle Variablennamen, Funktionen, Kommentare usw. halte ich grundsaetzlich in Englisch. Das hat mehrere Gruende, aber ich hab keine Lust auf ne Diskussion Very Happy
2. Einruecken! Uebersicht ist ganz wichtig!

Komplexere Functions oder Ablaeufe kommentiere ich (alles in uppercase wegen Uebersicht)
Code: [AUSKLAPPEN]
; SCANS EACH AXIS FOR SHIPS THE AI HAS ALREADY FOUND AND COUNTS THE ONES THE AI HASN'T FOUND YET
; 0-7 = DIRECTIONS, STARTING WITH 0 AT 12 O'CLOCK, GOING CLOCKWISE   


Constants schreib ich komplett uppercase
Code: [AUSKLAPPEN]
const WINDFORCE# = 3.5


Globale Variablen bekommen immer ein kleines "g" vor den Namen, danach uppercase
Code: [AUSKLAPPEN]
global gSpeed% = 50


Allgemein beginnen meine Variablen mit einem kleinen Buchstaben, wenn sie aus mehreren Einzelwoertern bestehen beginnen diese gross
Code: [AUSKLAPPEN]
gunSize = 42
playerRunSpeed = 23


Haben viele Variablen einen gemeinsamen Bezug (hier zB betreffen sie alle eine Art Raster im All), bekommen sie einen passenden Identifikator mit anschliessendem "_" vorgestellt
Code: [AUSKLAPPEN]
grid_dimX = 9
grid_dimY = 7
grid_offX = 106.0
grid_offY = 88.0
grid_sphereRadius = 30.0
grid_sphereDistance = 133.5
grid_scanCubeLineSizeX = 3000
grid_scanCubeLineSizeY = 100
grid_scanCubeAreaSizeX = 350
grid_scanCubeAreaSizeY = 350


Zaehlvariablen sind bei mir ganz oldschool:
Code: [AUSKLAPPEN]
For x=1 To 23
   For y=1 To 42
      While i<1337
         DoSomeWeirdStuff()
         i=i+1
      Wend
   Next
Next


Functions haben bezeichnende Namen, dabei bekommen Functions die einen gemeinsamen Bezug haben den gleichen Identifikator mit anschliessendem "_" vorgestellt
Code: [AUSKLAPPEN]
Function AI_RandomMove()
Function AI_BestMove()
Function AI_ScanAll8Axes(x,y)


Bei groesseren Codes benutz ich viele Includes, d.h. ich trenne die Hauptbereiche
Code: [AUSKLAPPEN]
Include "particle labs.bb"
Include "init.bb"
Include "graphics.bb"
Include "ki.bb"


Types bekommen ein grosses "T" davor
Code: [AUSKLAPPEN]
Type TTerrain
   Field soil%
   Field top%   
   Field bottom%
End Type
Global terrain.TTerrain


Medienvariablen erhalten immer einen passenden Identifikator, genau wie die files selbst, getrennt durch ein "_". Diese Namen halte ich normalerweise komplett lowercase
Code: [AUSKLAPPEN]
gfx_mainmenue = loadimage ("GFX\gfx_mainmenue.png")
sfx_explosion = loadsound ("SFX\sfx_explosion.ogg")


Mein Code ist immer so unterteilt
Code: [AUSKLAPPEN]
CONSTANTS
VARIABLES
----------------------------------------------
MAIN
----------------------------------------------
FUNCTIONS


Benutze ich ne lib fuer mehrere Projekte (zB ne Particle-Lib), bekommen alle Variablen (ausser in Functions) und Constants in der Lib einen Identifikator mit vorgestelltem "_", um Problemen mit identischen Variablennamen in anderen Codes vorzubeugen
Code: [AUSKLAPPEN]
pl_maxAngle# = 23.23
pl_meshCount% = 42
pl_otherStuff% = 1337


Das is grad alles was mir im Moment einfaellt, sind bestimmt noch ein paar Dinge mehr, aber da komm ich grad nich drauf Very Happy

Cheers,
PSY
(edit) Schreibfehler und Erklaerung
PSY LABS Games
Coders don't die, they just gosub without return

Noobody

BeitragMo, Feb 20, 2012 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Konstanten in UPPER_CASE.
Lokale/Globale Variablen, Fields und Funktionen in CamelCase mit führendem Grossbuchstaben.
Types in CamelCase mit vorgestelltem T (z.B. TFoo, TSuperCoolType).

Schleifenvariablen sind entweder X/Y/Z/W in einem geometrischen Kontext, I/S/T, wo nur strikte hochgezählt wird, und ansonsten ein aussagekräftiger Variablenname.

Globale Variablen vermeiden, wo sinnvoll möglich, und stattdessen zusammengehörige Funktionalität in einen Type packen.

Wo es sinnvoll ist, einzelne Klassen (oder mehrere kleine, zusammengehörige Klassen) in ihre eigene Datei.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Tankbuster

BeitragMo, Feb 20, 2012 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Lokale Variablen fangen mit "L_" an.

2. Meine Funktionen heißen oft Create_Irgendwas() und Update_Irgendwas().

3. Als Zählervariable für For-Schleifen benutze ich immer i, j und ii

4. Ich benutze die Sonderzeichen $,%,# um Variablen zu definieren.

5. Auch wenn es nicht "sauber" ist, verwende ich immer Strings Code: [AUSKLAPPEN]
"Deine Zahl ist: "+Variable
, anstatt Code: [AUSKLAPPEN]
"Deine Zahl ist: "+Str(Variable)
solange die Programmiersprache das zulässt. Laughing

6. Als Hauptschleife in Blitz immer While/Wend anstatt Repeat/Until

7. Types in Blitz heißen immer A.Alien, E.Enemy oder P.Player.... erst, wenn die Buchstaben ausgehen, darf etwas anderes benutzt werden Razz

8. Denglisch darf definitiv benutzt werden, aber nicht in einem Funktionsname...

Sowas wieCode: [AUSKLAPPEN]
Local Spieler_Leben%
Local Player_Health

ist okay, aber sowas wie
Code: [AUSKLAPPEN]
Local Spieler_Health
geht garnicht! Very Happy
Twitter
Download Jewel Snake!
Windows|Android

Thunder

BeitragMo, Feb 20, 2012 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe früher immer alles mehr oder weniger wild durchgemischt und versuche daher jetzt etwas Ordnung ins Chaos zu bringen.
Variablen- und Funktionsnamen schreibe ich klein. Manchmal bestehen diese aus mehreren Wörtern - dann schreibe ich einfach klein weiter (wenn es schlecht lesbar ist, kommt zwischen die zwei Wörter ein Unterstrich). Keine weitere Unterscheidung zwischen lokaler, globaler oder Parameter-Variable.
Typenamen beginnen mit T und sind CamelCase.
Konstanten bestehen nur aus Großbuchstaben und eventuell Unterstrichen.
Optionale Klammern (BB/BMax) lasse ich grundsätzlich immer weg. Zum Beispiel die Klammern, die man um die Parameter bei einem Funktionsaufruf setzt, wenn kein Wert zurückgegeben wird, oder Klammern zwischen If und Then.
Lokale Variablen stehen immer am Beginn von Funktionen - Assembler und ANSI C lassen grüßen. Eventuelle Ausnahme: Lokale Variablen, die in For-Schleifen definiert werden.

Und wegen der geschwungenen Klammern: Ich denke, nach kurzem Abschweifen zu K&R-Stil, bleibe ich bei meiner vorherigen Methode - öffnende geschwungene Klammern stehen immer direkt nach dem Codeteil, der sie verlangt (kein Abstand, keine Leerzeile). Schließende Klammern sind auf einer eigenen Zeile.
Ich lasse geschwungene Klammern aber auch meistens weg, wenn möglich.

BladeRunner

Moderator

BeitragMo, Feb 20, 2012 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Schliesse mich Noobody komplett an.
EDIT: oh nee, kleine Abweichung: Variablennamen halte ich idR komplett klein, Camelcase ist für Funktionen und Types reserviert.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

MasterK

BeitragMi, Feb 22, 2012 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Präxife und suffixe sind grundsätzlich mist.

PhillipK hat Folgendes geschrieben:
For-variablen (for local XXXX = 0 to 10) kriegen immer eine bezeichnung mit tmp oder act (act = aktuell, tmp = temporär, je nach anwendungsart)

"actual" heisst aber nicht "aktuell" Wink
+++ www.masterk.de.vu +++
Lila FTW!

DaysShadow

BeitragMi, Feb 22, 2012 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
"actual" heißt auch "aktuell", es hat aber auch weitere Bedeutungen.
"current" wäre aber z.B. die klarere Wahl, ich greife aber auch meist zu "actual".
Falsch ist es jedenfalls nicht.
Blessed is the mind too small for doubt

Chester

BeitragMi, Feb 22, 2012 23:34
Antworten mit Zitat
Benutzer-Profile anzeigen
DaysShadow hat Folgendes geschrieben:
"actual" heißt auch "aktuell", es hat aber auch weitere Bedeutungen.
Auch wenn es vllt. wörtlich in manchen Bezügen so übersetzt werden kann, hat actual aber eine andere Bedeutung. Also ne englischsprachige Person würde nicht wissen, dass das den aktuellen Wert einer Zählvariable ausdrücken sollte. Der würde in dem Kontext eher denken, dass das ein von irgendetwas anderem abstrahierter Wert oder sowas in dieser Richtung wäre. Aber letztendlich ist es natürlich wurschd, solange ihr nicht mit einem Muttersprachler zusammenarbeitet.

Um mal wieder auf das Thema zurückzukommen:

Ich halte mich momentan an keinerlei Konventionen, ganz einfach, weil ich aktuell nur noch "Zweck"programmiere, wenn ich mal gerade irgendwas schnell visualisiert oder simuliert haben möchte und das nicht längerfristig ausgelegt ist. Wenn ich mit anderen zusammenarbeite natürlich nicht Smile

Vertex

BeitragDo, Feb 23, 2012 2:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Der offizielle Begriff dafür ist nicht "Programmierprinzipien" sondern "Style-Guide". Für Java halte ich mich an den, der von Sun vorgeschlagen wurde und auch in Eclipse durch den Autoformatter umgesetzt wird.
vertex.dreamfall.at | GitHub

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group