Archief - [PROG][c++] Universeel systeem voor naamgeving klassen,functions,variabelen... ?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

NecroNeo

Legacy Member
Ik ben sinds kort terug begonnen wat te programmeren (en ik hoop binnen enkele weken het resultaat hiervan te kunnen tonen). Maargoed het zit dus zo, ik probeer m'n code zo herbruikbaar mogelijk te maken, en het zou erg handig zijn mocht er een sluitend/consystent systeem zitten in de naamgeving van alle classes, functions, variables, ... Zelf probeer ik mij altijd wel aan een aantal (zelf uitgevonden) regels te houden, maar die zijn meestal toch niet in alle gevallen toepasbaar.

Ik vroeg me af of er geen min of meer universele afspraken waren hierrond. (ik gebruik C++, hoewel dat hier weinig uitmaakt natuurlijk) (ik heb al ff gegoogled maar niet echt iets gevonden).

Iemand die zo'n systeem kent of wat tips heeft hiervoor ?

killgore

Legacy Member
in c++ zijn er ondertussen al zoveel gekomen en gegaan
-hungarian
-java-like
-...

Ik gebruik tegenwoordig een beetje combinatie van java-stijl en hungarian notatie (hoewel sommige die ouderwets, onnuttig en onduidelijk noemen blijf ik ze eigenlijk wel vrij makkelijk en duidelijk vinden).

NecroNeo

Legacy Member
oké, dus er is jammer genoeg geen universeel systeem voor handen.

Zou je een header file kunnen posten? Kan ik eens een kijkje nemen.
Persoonlijk maak ik nu gebruik van iets wat lijkt op wat er in delphi gebruikt wordt, maar dit is niet altijd even bruikbaar in C++.

Vich

Legacy Member
NecroNeo zei:
oké, dus er is jammer genoeg geen universeel systeem voor handen.

Zou je een header file kunnen posten? Kan ik eens een kijkje nemen.
Persoonlijk maak ik nu gebruik van iets wat lijkt op wat er in delphi gebruikt wordt, maar dit is niet altijd even bruikbaar in C++.

Via Google:
http://www.google.com/search?hl=en&q=hungarian+C++
http://www.google.com/search?hl=en&lr=&q="hungarian+notation"+C++

vind je
http://www.lowter.com/articles/174
alles
http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CodingStyle.html
wat je
http://web.umr.edu/~cpp/common/hungarian.html
nodig hebt
:)


Persoonlijk gebruik ik een eigen variant op de Hungarian notatie, maar dankzij jouw post ga ik m'n code binnenkort maar eens wat meer compatible maken :)

NecroNeo

Legacy Member
hehe, die hungarian had ik al wel gevonden maar over java-like dan weer niet wat ik zocht.

killgore

Legacy Member
NecroNeo zei:
hehe, die hungarian had ik al wel gevonden maar over java-like dan weer niet wat ik zocht.
mja, khebbet zo genoemd omdat dit universele afspraak zowat is onder java-proggers, dunno hoe de officiële stijlnaam luidt:

methoden & variabelenamen beginnen met kleine letter, klassen met grote letter
als een naam bestaat uit 2 woorden dan beginnen alle woorden behalve het eerste (zie bovenstaande regel) met een hoofdletter.

Krueger

Legacy Member
killgore zei:
in c++ zijn er ondertussen al zoveel gekomen en gegaan
-hungarian
-java-like
-...

Ik gebruik tegenwoordig een beetje combinatie van java-stijl en hungarian notatie (hoewel sommige die ouderwets, onnuttig en onduidelijk noemen blijf ik ze eigenlijk wel vrij makkelijk en duidelijk vinden).
Vind je dat echt duidelijker, die Hungarian methodde? Als je voor je variabelen deftige namen kiest, dan is het meestal toch niet nodig om er ook nog eens het type voor te zetten? Persoonlijk vind ik zo code redelijk onleesbaar, omdat ik altijd over die eerste letters moet kijken, voordat ik echt weet wat de variabele nu juist is.

killgore

Legacy Member
goh, niet altijd, daarom dak ze ook niet de volle 100% gebruik. Maar als je sommige systemen maakt waar je bv. constant tussen datatypes moet veranderen kan het wel zeer handig zijn. Die hungarian notatie is gewoon iets handig om uw type bij te houden.

Ma in het algemeen ben ik nu meer aan het overgaan zoals ze in java coden ze :).

wlibaers

Legacy Member
killgore zei:
goh, niet altijd, daarom dak ze ook niet de volle 100% gebruik. Maar als je sommige systemen maakt waar je bv. constant tussen datatypes moet veranderen kan het wel zeer handig zijn. Die hungarian notatie is gewoon iets handig om uw type bij te houden.

Ma in het algemeen ben ik nu meer aan het overgaan zoals ze in java coden ze :).

Als je het type van een bestaande variabele moet vervangen kan je wel overal de naam gaan veranderen.

Vich

Legacy Member
Krueger zei:
Vind je dat echt duidelijker, die Hungarian methodde? Als je voor je variabelen deftige namen kiest, dan is het meestal toch niet nodig om er ook nog eens het type voor te zetten? Persoonlijk vind ik zo code redelijk onleesbaar, omdat ik altijd over die eerste letters moet kijken, voordat ik echt weet wat de variabele nu juist is.

Je kan niet met naam alleen aanduiden wat een variabele is.

Voorbeeldjes:
- Stel je hebt een DeviceId, wat is dat dan?
Dat kan een int/long/char/string zijn, maar ook een templatized klasse die meer dan dat alleen bevat. Misschien is het een hash, gebaseerd op een van vorige? Kortom: je kan niet altijd aan de naam zien wat het doet of hoe je het kan gebruiken.
- Device: is dat een pointer(een gewone? reference counted? autopointer?)? Of een referentie? Of gewoon een 'heel' Device object?
- En hoe weet je of het een member is van de klasse of een van de variabelen die je een 100-tal lijnen code eerder hebt aangemaakt in je functie-member?
- etc.

Voor kleine projecten is het niet nodig om een prefix te gebruiken, maar voor grotere projecten is het een must vind ik.

killgore

Legacy Member
Vich zei:
- En hoe weet je of het een member is van de klasse of een van de variabelen die je een 100-tal lijnen code eerder hebt aangemaakt in je functie-member?
eens kijken of er iets verschijnt als ge this->naam typt :p (j/k ze ;))

Als je het type van een bestaande variabele moet vervangen kan je wel overal de naam gaan veranderen.

Ooit van find/replace all gehoord :p? Voor de keren dat je dat moet doen ... .
Sommige IDE's hebben trouwens ook mogelijkheid dat als je een varnaam bij declaratie aanpast dat alle andere refrenties die je getypt hebt ook aanpast

forloRn_

Legacy Member
Behoorlijk lelijk en onoverzichtelijk, die Hungarian. Als je zodanig veel variabelen nodig hebt dat je niet kan onthouden welke types er achter die variabelen schuilen, wilt het zeggen dat je functie te lang is, en moet je ze opdelen in subfuncties.

killgore

Legacy Member
forloRn_ zei:
Behoorlijk lelijk en onoverzichtelijk, die Hungarian. Als je zodanig veel variabelen nodig hebt dat je niet kan onthouden welke types er achter die variabelen schuilen, wilt het zeggen dat je functie te lang is, en moet je ze opdelen in subfuncties.
:wtf:

lelijk, kan ek inkomen, ma wtf bedoelde met onoverzichtelijk? Met hungarian komde zowat alles te weten wa ge moet weten over uw variabele: type & binding in de prefix, doel in de naam...
en da van zoveel mogelijk opsplitsen is je reinste zever. Ge moet natuurlijk opsplitsen waar mogelijk en vooral nuttig, maar het is niet omdat je code van 500 regels in 1 of in 5 functies zit dat die daarom beter en overzichterlijker is. (k, 500 regels is veel, ma twas om vb te geven :p)
Ik zeg niet dat hungarian constant nuttig is, soms is uw code zo beperkt/kort/duidelijk dat hungarian gewoon belachelijk is, maar in iets complexere functies/klassen/berekeningen/lowlev zaken heeft het nog steeds zijn nut hoor.

Het is gewoon nu een trend om ze af te breken, zoals het vroeger een trend was ze te gebruiken. Persoonlijk haat ik trends :p.
Hungarian is niet perfect, noch zoals ze het in java doen (daar heb je soms gewoon te lange namen nodig om iets duidelijk te omschrijven).

Vich

Legacy Member
forloRn_ zei:
Behoorlijk lelijk en onoverzichtelijk, die Hungarian. Als je zodanig veel variabelen nodig hebt dat je niet kan onthouden welke types er achter die variabelen schuilen, wilt het zeggen dat je functie te lang is, en moet je ze opdelen in subfuncties.

Met vele variabelen bedoelde ik niet per se vele variabelen in 1 klasse of vele in 1 functie, maar gewoon vele variabelen in 1 project. Als je 100 klassen of meer hebt en die hebben elk gemiddeld 10 variabelen, dan zit je aan 1000 variabelen in je project. Hoe ga jij bijhouden welke variabele wat is/doet?
En stel dat je het zelf toch kan onthouden(er zijn altijd zo van die knappe koppen): hoe gaat iemand die jouw project onder de neus krijgt ooit begrijpen wat alles is?

Ik geef toe dat het niet altijd even netjes staat, maar 't is veel belangrijker dat code duidelijk en leesbaar is. Daar zorgt Hungarian goed voor en dat is (voor mij en vele anderen) veel belangrijker.

Ollie

Legacy Member
Vich zei:
Hoe ga jij bijhouden welke variabele wat is/doet?

Door er een duidelijke naam aan te geven natuurlijk. Ik ga geen double waarde in een variabele genaamd firstName steken.

Vich zei:
En stel dat je het zelf toch kan onthouden(er zijn altijd zo van die knappe koppen): hoe gaat iemand die jouw project onder de neus krijgt ooit begrijpen wat alles is?

Die heeft waarschijnlijk een IDE die weergeeft van welk type een variabele is.

killgore

Legacy Member
Ollie zei:
Door er een duidelijke naam aan te geven natuurlijk. Ik ga geen double waarde in een variabele genaamd firstName steken.

Die heeft waarschijnlijk een IDE die weergeeft van welk type een variabele is.
het leest wel vlotter als je onmiddelijk weet wat he is en niet constant mouse-over moet doen en eventuele typedefs/preprocessor defines moet gaan volgen.

Over die duidelijke naam: akkoord, maar er zijn veel gevallen waarin je een zeer lange naam zou moeten gebruiken voor juist alle info te geven, en dat is zeker niet wenselijk.

Ollie

Legacy Member
killgore zei:
het leest wel vlotter als je onmiddelijk weet wat he is en niet constant mouse-over moet doen en eventuele typedefs/preprocessor defines moet gaan volgen.

Ik moet ook niet constant mouse-overs doen. Om één of andere reden komt het ongelofelijk zelden voor dat ik niet weet van welk type een variabele is. Nu, ik programmeer dan ook niet (meer) in C++.

killgore zei:
Over die duidelijke naam: akkoord, maar er zijn veel gevallen waarin je een zeer lange naam zou moeten gebruiken voor juist alle info te geven, en dat is zeker niet wenselijk.

zoals?

wlibaers

Legacy Member
Voor een vrij goed ontwerp van naamgeving kan je eens naar stdio.h kijken. Een hele hoop functies die met bestanden werken. Die functies (met beginletter f) werken op bestanden, van het type FILE*. Als je een programma schrijft, moet je je geen zorgen maken over de interne details of het exacte type van zo'n FILE. Je houdt gewoon een pointer naar dat ding bij, en alle functies die een bestand nodig hebben verwachten datzelfde type pointer.

Ik weet dat je niet overal een even goede abstractie kan toepassen, maar dit is wel het soort ontwerp waar je naar kan streven, en dan heb je gewoon niet al te veel rommel bij die variabelenamen nodig.

Een andere uitstekende naamgeving zijn de klassieke namen die elke programmeur in een bepaalde taal als typisch herkent. In het geval van C bijvoorbeeld i,j en k als tellers in lussen. Een letter, heel compact, en toch meteen duidelijk.

forloRn_

Legacy Member
Die Hungarian-methode vertelt je ook niet wat een variabele doet, dus dat is een loos argument. En, zoals Ollie hierboven zei, als je het ding een duidelijke naam geeft, moet je je toevlucht niet zoeken tot die prefixen.

killgore

Legacy Member
Ollie zei:
Ik moet ook niet constant mouse-overs doen. Om één of andere reden komt het ongelofelijk zelden voor dat ik niet weet van welk type een variabele is. Nu, ik programmeer dan ook niet (meer) in C++.

zoals?
1) hij had het over mensen die uw code bekijken, niet gijzelf.
2) lees vich zen voorbeeld van hier enkele posts boven ivm dat device.

Die Hungarian-methode vertelt je ook niet wat een variabele doet, dus dat is een loos argument. En, zoals Ollie hierboven zei, als je het ding een duidelijke naam geeft, moet je je toevlucht niet zoeken tot die prefixen.
Heb ik dat ooit gezegd, ik zeg dat ze je informatie verschaft over de variabele, niet wat ze doet, daarvoor heb je de naam. En soms is informatie over een variabele al even belangerijk als het doel van een variabele.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan