Mannen komen van Mars Tweakers, vrouwen van Venus Bokt
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
In een for(){} ga ik *altijd* een variable genaamd c gebruiken.
Puur een gewoonte zonder betekenis
Website
Drones: Air 3s, Mini 4 Pro, Avata 2
Camera's: Canon R6, Canon 5d2, Dji Osmo Action 4
Objectieven: 8 fisheye, 14f2.8, 24f2.8, 50f1.8, 135f2, 17-40f4, 24-105f4, 70-300f4-5.6, 150-600f5-6.3, 25f2.8-2.5x-5x
Net zoals foo en bar in "alle" programmeer voorbeeldjes.
Verder maakt het natuurlijk geen reet uit.
Volgens mij is 't ook een Pascal trekje dat ik by default ++i schrijf in plaats van i++, in verband met de inc() functie in Pascal.
En dat maakt natuurlijk ook geen reet uitSoultaker schreef op 01 november 2002 @ 16:28:
Volgens mij is 't ook een Pascal trekje dat ik by default ++i schrijf in plaats van i++, in verband met de inc() functie in Pascal.
ligt eraan in welke context:
j = i++
is volgens mij anders dan:
j = ++i
Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."
Verwijderd
nouja het maakt (in ++C dan) wel een klein beetje uit (i++ geeft i terug voor de optelling, ++i erna).
Verder gebruik ik zelf ook altijd i, maar ik moet altijd aan 'i'terator denken. Nu ik erover nadenk is de meest logische dat het van index komt. Integer of ivm hungarian style lijkt me onwaarschijnlijk.
lekker vrijdag topic weer
Verwijderd
denk aan incrementlordsnow schreef op 01 november 2002 @ 16:20:
i van index, waarschijnlijk, of van increase?
van-tilburg.info -=- meka (sega emulator) - Proud MEDION fanclub member - KOPPIG VOLHOUDEN !
Yep, dat geloof ik ook.ZeRoXcOoL schreef op 01 november 2002 @ 16:24:
Ik dacht ook dat het van integer kwam...
En in i-- dan?
i Is gewoon de canonieke loopvariabele, dat komt denk ik uit de wiskunde:
bvb xi(i=1,2,3)
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Alarmnummer schreef op 01 november 2002 @ 16:25:
moet je even zoeken naar : hungarian style.
In hoeverre dit verhaal klopt weet ik niet, 'i' is een lastige term om op te googlen.
[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet
1
2
| for(int l_Index = 0; l_Index != 10; l_Index++) DoSomeFunctionWithALongClearDescription(m_MyHugeArrayOfBollocks[l_Index]); |
Gelukkig doen er nog weinig programmeerboeken mee aan de 'how to obfuscate your code' hype met 1-letterige identifiers....
Alleen om scope en naam te scheiden:Nielsz schreef op 01 november 2002 @ 17:17:
En de underscore_in_een_variabele_naam valt niet onder de Bollocks?
1
2
3
4
5
6
7
| l_LocalVariable m_MemberVariable p_Parameter c_Constant g_Global t_Type e_Enumerate |
Daar waren variabelen die begonnen met i,j,k (dacht ik) impliciet gedefinieerd als [b]i[/i]nteger. Dus was i de eerste en simpelste integer om te gebruiken voor loops.
(Hoewel je ook expliciet kon definieren, en geen hond die dat verwacht. Zo bijna een keer gezakt voor een tentamen: "Ja, maar je gebruikt een variabele die begint met een b als iterator! dat kan niet!" - Welles!)
Omdat i minder typewerk is dan l_Index?curry684 schreef op 01 november 2002 @ 17:15:
C++:
1 2 for(int l_Index = 0; l_Index != 10; l_Index++) DoSomeFunctionWithALongClearDescription(m_MyHugeArrayOfBollocks[l_Index]);
Iig gebruik ik het alleen voor loops, en alleen als er geen onduidelijkheid bestaat (een i, j en k maken het weer niet zo heel duidelijk
Exact expert nodig?
Omdat de l voor de underscore altijd hetzelfde betekent in deze naming convention met als specificatie dat het een 'Index' is, terwijl de naam 'i' kan staan voor integer, iterator, index, Ierland, iris, inburgering, invalide, Irak en ga zo maar door.Verwijderd schreef op 01 november 2002 @ 17:19:
Waarom kort je de l dan wel af? l_Index vind ik niets duidelijker dan i.
[edit]
Ter verduidelijking een uitdaging:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| int g_Index; const int c_Index = 684; class Index { public: int ExchangeIndex(int p_Index) { int l_Index = m_Index; m_Index = p_Index; return l_Index; } private: int m_Index; }; |
En dan nu dit stukje aub. herschrijven zonder scope prefixes... probeer het daarna eens met Hungarian
[ Voor 0% gewijzigd door curry684 op 01-11-2002 17:28 . Reden: uitbreiding ]
Verwijderd
curry684 schreef op 01 november 2002 @ 17:24:
[...]
Omdat de l voor de underscore altijd hetzelfde betekent in deze naming convention met als specificatie dat het een 'Index' is, terwijl de naam 'i' kan staan voor integer, iterator, index, Ierland, iris, inburgering, invalide, Irak en ga zo maar door.
En als ik nu in mijn naming convention definieer dat éénletterige variabelen altijd iterators in for loops zijn? Dan is het mij in ieder geval duidelijk.
Verwijderd
integer
increment
iterator
Meer dan genoeg redenen om i te gebruiken
Het verschil tussen prefix en postfix increment/decrement is in C++ (en wellicht ook C) precies één temporary (die overigens wellicht vaak kan worden weggeoptimaliseerd). De postfix increment/decrement kan dan ook vaak simpel m.b.v. de prefix increment/decrement als volgt geimplementeerd worden:
1
2
3
4
5
6
| T T::operator++ (int) // int parameter => postfix { T r (*this); operator++(); return r; } |
Omdat loop variabelen meestal een heeel kleine scope hebben (1-10 regels code) is er nix op tegen om ze zo kort mogelijke naam te geven.
Volgens mij komt i trouwens vanaf index of iterator.
FireFox - neem het web in eigen hand
Verwijderd
Ik denk dat vrijwel niemand namen als i gebruikt omdat die sneller zouden compileren. Ikzelf gebruik i in loopjes simpelweg omdat ik het leesbaarder vindt dan bijvoorbeeld l_Index. Overigens gebruik ik dit soort namen alleen in (private) class implementaties waar het gebruik ervan duidelijk te overzien is, in een class interface gebruik ik langere namen (maar nog steeds zeker geen hongaarse of andere prefix toestanden).curry684 schreef op 01 november 2002 @ 17:15:
Ben ik nu de enige die doorheeft dat tegenwoordige compilers niet echt meer beperkt worden door geheugenruimte voor variabelenamen? Kom op, C en C++ identificeren 256 significante karakters voor een identifier... ik ben dan ook een jaar of 5 geleden opgehouden met korte variabelenamen en typ nu gewoon netjes
Je hebt gewoon extra informatie ter beschikking, en je zult veel mindersnel een stomme fout maken:
vb (java)
int i;
void set(int i){
...i=i;
}
dit soort stomme fouten krijg je niet meer zo snel.
Die gebruik ik ook, vooral omdat ik eigenlijk te lui ben om vaak this te typenAlarmnummer schreef op 01 november 2002 @ 17:42:
Prefix bij variablen is echt super handig. Ik gebruik '_' voor member variablen,
public static final int s_MY_CONSTANT;'s_' voor statische variablen en zonder prefix is het een lokale variable.
*brrrrr*
Die krijgen we allang niet meer als we onze variabelen encapsuleren(...)
Je hebt gewoon extra informatie ter beschikking, en je zult veel mindersnel een stomme fout maken:
vb (java)
int i;
void set(int i){
...i=i;
}
dit soort stomme fouten krijg je niet meer zo snel.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public class Blaat { private int _i; Blaat( int i ) { setI( i ); } private void setI( int i ) { // check if i is valid // _i = i; } public void getI( ){ returnI; } } |
Natuurlijk gebruik ik geen i voor klassevariabele naam normaalgesproken.
Aangenomencurry684 schreef op 01 november 2002 @ 17:24:
[...]
Ter verduidelijking een uitdaging:
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int g_Index; const int c_Index = 684; class Index { public: int ExchangeIndex(int p_Index) { int l_Index = m_Index; m_Index = p_Index; return l_Index; } private: int m_Index; };
En dan nu dit stukje aub. herschrijven zonder scope prefixes... probeer het daarna eens met Hungarian
1
2
3
4
5
6
7
8
9
10
11
12
13
| int MostRecentlyUpdatedFooInBar; const int LastFooInBar = 684; class Index { public: void swap(Index& rhs) { std::swap( rhs.WrappedIndex, this->WrappedIndex ); } private: int WrappedIndex; }; |
[hk] Mag ik een poll maken wat we duidelijker vinden? [/hk]
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Bij constants gebruik ik ze niet, daar schrijf ik de naam gewoon met hoofdletters.
Het was ook een fragment van een stukje code. Je kan namelijk helemaal geen variablen declaren buiten een class. Dus dan moet dit wel binnen een class zijnDie krijgen we allang niet meer als we onze variabelen encapsuleren
Today's subliminal thought is:
Verwijderd
Daar zeg je zo wat! Maar daar wordt net zo vaak (bijvoorbeeld) k of n gebruikt, in combinatie met sommatie- en produkttekens, bijvoorbeeld.Verwijderd schreef op 01 november 2002 @ 20:04:
Volgens mij is het gebruik nog van voordat er ueberhaupt computers bestonden... laat staan programmeertalen. Het wordt namelijk standaard in de wiskunde gebruikt voor vectoren x_i bijvoorbeeld (i als subscript van de vector x).
Maar je maakt geen gebruik van get/setters. Dat bedoelde ik ook met het encapsuleren van variabelen.Alarmnummer schreef op 01 november 2002 @ 19:59:
Het was ook een fragment van een stukje code. Je kan namelijk helemaal geen variablen declaren buiten een class. Dus dan moet dit wel binnen een class zijn
Dus ook binnen de classe i benaderen met getI() en setI(). Dan wordt uw code dus:
1
2
3
4
| int i; void set(int i){ setI(i); } |
Euh.... dan heb je toch nog precies hetzelfde issue in de method setI()Glimi schreef op 01 november 2002 @ 19:40:
Die krijgen we allang niet meer als we onze variabelen encapsuleren
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class Blaat { private int _i; Blaat( int i ) { setI( i ); } private void setI( int i ) { // check if i is valid // _i = i; } public void getI( ){ returnI; } }
CyeZ schreef op 01 november 2002 @ 16:59:
Het verhaal zoals ik het ken is dat de naam 'i' voor counter variabelen afkomstig is uit een oude programmeertaal waarbij de types van variabelen waren bepaald door de variabele naam. i,j,etc... waren integers alles daarvoor floating points oid. Hierdoor was het dus logisch om i als counter te gebruiken aangezien dit de eerste integer was.
In hoeverre dit verhaal klopt weet ik niet, 'i' is een lastige term om op te googlen.
* Glimi kijkt nog eens goedtomato schreef op 01 november 2002 @ 22:16:
Euh.... dan heb je toch nog precies hetzelfde issue in de method setI()
Je hebt inderdaad gelijk!
Daar kun je dan weer wel gemakkelijk op zoeken...Sjaaky schreef op 01 november 2002 @ 23:32:
Waar komen foo en bar eigenlijk vandaan?
Foobar stond voor "Fucked Up Beyond All Recognition". Ik dacht dat te maken had met Vietnam, waarbij iedereen die niet meer te herkennen was na een granaat inslag fubar genoemd werdt, zo'n beetje de john doe van tegenwoordigSjaaky schreef op 01 november 2002 @ 23:32:
Waar komen foo en bar eigenlijk vandaan?
Iemand een idee waarom in BASIC altijd k gebruikt werd? Wat ik nog steeds wel eens doe moet ik bekennen.. ik heb er wel eens iets over gelezen maar kan het me niet meer echt herinneren
http://www.tuxedo.org/~esr/jargon/html/entry/foo.htmlSjaaky schreef op 01 november 2002 @ 23:32:
Waar komen foo en bar eigenlijk vandaan?
Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com
Mee eens, v(i) als index i van vector v of xi als index i van x ofVolgens mij is het gebruik nog van voordat er ueberhaupt computers bestonden... laat staan programmeertalen. Het wordt namelijk standaard in de wiskunde gebruikt voor vectoren x_i bijvoorbeeld (i als subscript van de vector x).
v(xi) als, nou ja ga maar na.
Door Soultaker - Friday 01 November 2002 20:11
Meestal wordt in de wiskunde n genomen als het totaal voor index i. m voor het totaal van de tweede sommatie met index j en p voor het totaal van de derde sommatie met index k. Dus:Daar zeg je zo wat! Maar daar wordt net zo vaak (bijvoorbeeld) k of n gebruikt, in combinatie met sommatie- en produkttekens, bijvoorbeeld.
1
2
3
4
5
6
7
8
9
| for(i=0;i<=n;i++)
{
for(j=0;j<=m;j++)
{
for(k=0;k<=p;k++)
{
}
}
} |
Aangezien je veel algoritmen kort en bondig in wiskundige notatie kan opschrijven, is voor de implementatie van het algoritme in een programmeertaal dit waarschijnlijk letterlijk overgenomen.
Verwijderd
voorbeeld, 3 arrays, apparaat, onderdeel en subonderdeel. Die wil je itereren.. met i,j,k krijg je dan bv:
1
| oApparaat[i].oOnderdeel[j].oSubonderdeel[k] |
(nu is dit nog vrij leesbaar, maar de onleesbare voordelen zijn er talloze, maak er bv. eens een uitgerekte lus van waarbij per object nog acties uitgehaald worden)
Dan is:
1
| oApparaat[nApparaatLus].oOnderdeel[nOnderdeelLus].oSubOnderdeel[nSubOnderdeelLus] |
al een stuk leesbaarder en minder foutgevoelig.
Beide leveren overigens na compilatie dezelfde code op, dus daarvoor hoef je het niet te doen. Daarnaast kan iemand die midden in zo'n routine begint met lezen gelijk bevatten wat er gebeurd.
Verwijderd
Het gaat er om dat de lezer eenvoudig inzicht krijgt in wat er gebeurd.. en dat is met termen als 'lus' of 'loper' wel zo en met gewauwel als 'i,j,k' niet zo.
//edit
sterker nog, index is gewoon domweg fout. De term 'lus' geeft aan dat het een waarde is afkomstig uit een for-next lus, oftewel dat je aan het itereren bent. Zeg je 'index' dan suggereer je dat je een waarde gevonden hebt en alleen die waarde wilt gebruiken.. als ik alleen de regel:
1
| oOnderdeel[nOnderdeelLus] |
zie staan dan weet ik gelijk dat het hier om een loop gaat, geen twijfel over mogelijk. Zie ik daarentegen:
1
| oOnderdeel[nOnderdeelIndex] |
staan dan weet ik dat niet.
Ik kan dit het best uitleggen met een TStringlist van Delphi:
gebruik lus:
1
2
| for nLus:=0 to oMijnStringlist.count-1 do oMijnStringlist[nLus].Add(<iets>); |
gebruik index:
1
2
| nIndex:=oMijnStringList.IndexOff(<iets>); ShowMessage(oMijnStringlist[nIndex]); |
Index suggereert 1 waarde, niet een veranderende waarde.
Yeah right! Ik ga me daar zeker identifiers als nSubOnderdeelLus gebruiken! Dan zit ik twee keer zo lang te tikken en naar mijn bescheiden mening is korte, bondige code aanzienlijk duidelijk dan paginalange code, met duidelijk identifiers maar zonder overzichtelijke structuur.Verwijderd schreef op 02 november 2002 @ 14:36:
Beide leveren overigens na compilatie dezelfde code op, dus daarvoor hoef je het niet te doen. Daarnaast kan iemand die midden in zo'n routine begint met lezen gelijk bevatten wat er gebeurd.
Het is ook niet voor niets dat in de wiskunde vrijwel uitsluitend enkele letters als identifiers worden gebruikt. De uitleg van hoe het werkt staat los van de formele definitie beschreven.
Ik ben het met je eens dat als je een schermenlang algoritme schrijft, je dat beter niet met a,b,c, i,j,k, x,y,z, kan doen, maar de vraag is of je dan niet beter wat commentaar kan toevoegen of je algoritme opsplitsen in verschillende functies. Als ik echter de verschillende waarden uit een array wil printen gebruik ik gewoon "i"; er is niemand die dat verkeerd kan interpreteren.
Verwijderd
Ik heb het dan ook iets overtrokken om duidelijk te maken wat ik bedoel.Yeah right! Ik ga me daar zeker identifiers als nSubOnderdeelLus gebruiken! Dan zit ik twee keer zo lang te tikken
Toch ben ik het ook op dat punt niet helemaal met je eens. In feite zeg je hier gewoon 'ik ben te lui om het goed te doen'. Als je zo gaat redeneren kun je zaken als functioneel ontwerp, technisch ontwerp e.d. ook de deur uit doen; is alleen een hoop typewerk wat voor de code zelf geen functie heeft... (wederom, iets overtrokken, nofi)
Hier koppel je twee zaken aan elkaar om tot een punt te komen, volgens mij is die koppeling niet goed. In mijn ogen is korte, bondige code MET duidelijke identifiers gewoon het beste...Dan zit ik twee keer zo lang te tikken en naar mijn bescheiden mening is korte, bondige code aanzienlijk duidelijk dan paginalange code, met duidelijk identifiers maar zonder overzichtelijke structuur.
Wiskunde != programmeren. Er zitten wel overeenkomsten tussen, echter de verschillen geven je in dit opzicht ongelijk. In de wiskunde gaat het vaak om handgeschreven werk, waarbij de oplossingsroute besloten ligt in de te gebruiken formules. Daarnaast is het niet zo (of iig. veel minder) dat de 'formules' in kwestie onderhouden moeten worden en bijgewerkt als er functionaliteit veranderd. Wiskunde is veel statischer. Wiskundige formules worden opgesteld teneinde een soort van 'absolute, logische waarheid' te definieren. Daarnaast is het bij de wiskunde zo dat er veel meer mensen zijn die een bep. formule gewoon gebruiken, en dat het aantal mensen dat die formule zou gaan wijzigen een stuk kleiner is.Het is ook niet voor niets dat in de wiskunde vrijwel uitsluitend enkele letters als identifiers worden gebruikt.
Bij code is dat heel anders. Code wordt gebruikt om een dynamisch proces te beschrijven. Code wordt aangepast aan een proces niet om een 'absolute waarheid' te definieren, maar om het betreffende proces te omvatten. Bij code is het ook zo dat de verhouding 'toepassenden' en 'muterenden' voor een regel code heel anders ligt; het zijn geen wetten oid. Bij code is het veel meer van belang dat men het onderliggende proces eenvoudig kan doorzien door het lezen van de code, ivm. onderhoudbaarheid.
Hier gebeurd hetzelfde als bij je eerste argument. Of schermenlange algoritmes goed zijn of niet, is een heel andere discussie (waarin ik het overigens met je eens bent.. ellenlange algoritmes zijn zelden goed en behoren uitgesplitst te worden imho).Ik ben het met je eens dat als je een schermenlang algoritme schrijft, je dat beter niet met a,b,c, i,j,k, x,y,z, kan doen, maar de vraag is of je dan niet beter wat commentaar kan toevoegen of je algoritme opsplitsen in verschillende functies.
Ook dit ben ik met je eens. Het ging me dan ook niet over een eenvoudige for-next lus, maar juist zodra je gaat werken met situaties met geneste lussen e.d. is het m.i. beter wat extra typewerk te doen om een beter beschrijvende iterator te gebruiken. In het (overtrokken) voorbeeld van mij zou ik bv. nALus, nOLus en nSOLus kunnen gebruiken.Als ik echter de verschillende waarden uit een array wil printen gebruik ik gewoon "i"; er is niemand die dat verkeerd kan interpreteren.
Glimi schreef op 02 november 2002 @ 00:00:
[...]
Foobar stond voor "Fucked Up Beyond All Recognition". Ik dacht dat te maken had met Vietnam, waarbij iedereen die niet meer te herkennen was na een granaat inslag fubar genoemd werdt, zo'n beetje de john doe van tegenwoordig
Fubar stamt uit WOII, niet Vietnam. En volgens mij hoeft het ook niet per se over een persoon te gaan; de situatie waarin je als soldaat verkeerde kon ook fubar zijn...
Persoonlijk gebruik ik meestal r voor indexen in een loop; komt omdat ik begonnen ben met Basic, en daar was r nu eenmaal gebruikelijk
4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1
Sterker nog, ik gebruik i met opzet om aan te geven dat het een lokale index is, met geen bijzondere semantische betekenis (anders dan de loop index). Variabelen die gerbuikt worden in een scope die het scherm overstijgt krijgen wel langere namen; dan zie je aan de grootte van de naam dus de grootte van de scope.Soultaker schreef op 02 november 2002 @ 15:54:
[...]
Yeah right! Ik ga me daar zeker identifiers als nSubOnderdeelLus gebruiken! Dan zit ik twee keer zo lang te tikken en naar mijn bescheiden mening is korte, bondige code aanzienlijk duidelijk dan paginalange code, met duidelijk identifiers maar zonder overzichtelijke structuur.
Ik ben het met je eens dat als je een schermenlang algoritme schrijft, je dat beter niet met a,b,c, i,j,k, x,y,z, kan doen, maar de vraag is of je dan niet beter wat commentaar kan toevoegen of je algoritme opsplitsen in verschillende functies. Als ik echter de verschillende waarden uit een array wil printen gebruik ik gewoon "i"; er is niemand die dat verkeerd kan interpreteren.
En aangezien mijn functies de neiging hebben om op een scherm te passen zijn de meeste loopindices van mij i ( of j, als'k weer met MSVC6 loop te klooien. ).
Hoeveel twijgfel is er over de scope van i in for (int i ... ) ... ?
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Ik citeer mezelf: Toon mij een programmeur die serieus in resultaten beperkt wordt door z'n typsnelheid en niet z'n denksnelheid en ik ben onder de indrukSoultaker schreef op 02 november 2002 @ 15:54:
Yeah right! Ik ga me daar zeker identifiers als nSubOnderdeelLus gebruiken! Dan zit ik twee keer zo lang te tikken en naar mijn bescheiden mening is korte, bondige code aanzienlijk duidelijk dan paginalange code, met duidelijk identifiers maar zonder overzichtelijke structuur.
Ik typ 320 tekens per minuut sustained zonder fouten, en kan over het algemeen een stuk sneller typen dan ik kan programmeren (of het moet echt dom klopwerk zijn
Typen is vervelend en leid af van de feitelijke implementatie. Als je aan 't typen bent, ben je niet aan 't denken. Hoe minder je typt, hoe meer je aan 't nadenken bent over het probleem in kwestie. Als ik het idee heb dat ik code in zit te typen die 3 keer zo kort had gekund, dan is de lol er voor mij snel af.curry684 schreef op 02 november 2002 @ 21:28:
Ik citeer mezelf: Toon mij een programmeur die serieus in resultaten beperkt wordt door z'n typsnelheid en niet z'n denksnelheid en ik ben onder de indruk
Ik typ 320 tekens per minuut sustained zonder fouten, en kan over het algemeen een stuk sneller typen dan ik kan programmeren (of het moet echt dom klopwerk zijn). Ik raak dus netto echt geen tijd kwijt aan die lange identifiers die het programma zoooooooo veeeeeeeeeeeeeeel duidelijker te lezen maken.
Ik kan me trouwens wel redelijk vinden in hezik's genuanceerde versie van zijn betoog.
Een reden waarom i te gebruiken ipv een langere naam? Als ik wil experimenteren en vlug een loop moet afhebben (slordig, maar werkend) met 1 of 2 lijntjes code, dan is het makkelijker gewoon i te gebruiken ipv eerst nog eens een naampie te verzinnen terwijl het na het compilen/executen toch gewoon verwijdert wordt... eigen mening natuurlijk
If you come here... you'll find me... I promise
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| // ------------------------------------------------------------------------ // Connect: Creates a connection to a server // ------------------------------------------------------------------------ MBegin(void CClientSocket::Connect(const BString &p_Host, t_UInt2 p_Port, t_Bool p_Datagram)) HOSTENT* l_HostEntity; SOCKADDR_IN l_Address; BAsciiString l_Host = p_Host; t_Handle l_Socket = m_Socket; t_UInt4 l_IpAddress; t_UInt4 l_Size; // Check whether we are already connected if(m_Connected) throw ESockAlreadyConnected(L"CClientSocket::Connect"); // Buffer properties for reconnect and info m_RemoteHost = p_Host; m_RemotePort = p_Port; m_Datagram = p_Datagram; // Create a socket if required if(l_Socket == c_InvalidSocket) { l_Socket = (t_Handle)socket(AF_INET, p_Datagram ? SOCK_DGRAM : SOCK_STREAM, 0); if(l_Socket == c_InvalidSocket) throw ESockInvalidSocket(L"CClientSocket::Connect"); } // Translate the given address, determine type first and prepare struct memset(&(l_Address), 0, sizeof(l_Address)); l_Address.sin_port = htons(p_Port); l_IpAddress = inet_addr(l_Host); if(l_IpAddress == INADDR_NONE) { // Use DNS resolving to get the host l_HostEntity = gethostbyname(l_Host); if(!l_HostEntity) throw ESockUnknownHost(L"CClientSocket::Connect", p_Host); memcpy(&(l_Address.sin_addr), l_HostEntity->h_addr, l_HostEntity->h_length); l_Address.sin_family = l_HostEntity->h_addrtype; } else { // Connect straight away l_Address.sin_addr.S_un.S_addr = l_IpAddress; l_Address.sin_family = AF_INET; } // Do the actual connect if(connect((SOCKET)l_Socket, (sockaddr*)&l_Address, sizeof(l_Address))) throw ESockConnectionFailed(L"CClientSocket::Connect", p_Host); // Set properties m_Connected = True; m_Socket = l_Socket; // Get local address l_Size = sizeof(SOCKADDR_IN); if(getsockname((SOCKET)l_Socket, (sockaddr*)m_LocalAddress, (int*)&l_Size)) throw ESocketException(L"CClientSocket::Connect"); MEnd // ------------------------------------------------------------------------ |
Let vooral op het stukje waar 3 parameters toegewezen worden aan 3 membervariabelen. Door de scopeprefixes hadden ze desnoods alle drie dezelfde naam kunnen hebben.
ps. om die 'vreemde' casts tussen SOCKET en t_Handle te verklaren moet je even weten dat de class-definitie platformindependent is en dit toevallig de Win32 WinSock implementatie is. De header files hiervoor zijn zonder preprocessor statements volledig portable.
[ Voor 2% gewijzigd door curry684 op 17-12-2002 00:04 . Reden: voor de highlighter :) ]
Verwijderd
Het is gewoon irritant om te moeten typen.curry684 schreef op 02 november 2002 @ 21:28:
Ik citeer mezelf: Toon mij een programmeur die serieus in resultaten beperkt wordt door z'n typsnelheid en niet z'n denksnelheid en ik ben onder de indruk
Daarnaast is het een feit dat in C++ specifiek niet na te gaan is waar een variabele vandaan komt, terwijl dat in een taal als C veel simpeler na te gaan is, omdat je weinig scopes hebt. De meeste talen hebben dit soort obfuscatie van variabele namen helemaal niet nodig.
Toon mij aan waarom voor een codelezer/-schrijver m_index, s_index, p_index, i_index etc. duidelijker is dan elke variabele z'n eigen naam geven die dus aangeeft wat die variabele nou eigenlijk echt doet? Zal wel aan mij liggen, maar als je variabelen gaat onderscheiden puur en alleen door hun scope, dan ben je gewoon enorm fout bezig. Dat op zich mag dus geen argument zijn. Het enige argument is dan nog dat het de scope aangeeft naast de functie van e variabele op zich, en dat is dus een C++ probleem wat niet in alle talen aanwezig is...
Je verwart de bewerking (itereren) met wat de definitie is hoe je een waarde referereert in een vector, array.Het gaat er om dat de lezer eenvoudig inzicht krijgt in wat er gebeurd.. en dat is met termen als 'lus' of 'loper' wel zo en met gewauwel als 'i,j,k' niet zo.
//edit
sterker nog, index is gewoon domweg fout. De term 'lus' geeft aan dat het een waarde is afkomstig uit een for-next lus, oftewel dat je aan het itereren bent.
Uit de dikke van Dale:
in·dex (de ~ (m.))
1 inhoudsopgave
2 'index librorum prohibitorum', lijst van door de roomse curie verboden boeken
3 toegevoegd cijfertje of lettertje dat een grootheid in een bepaalde categorie rangschikt
4 verhoudingscijfer
Als je dit opschrijft:
Door hezik - Saturday 02 November 2002 14:53:
1
| oOnderdeel[nOnderdeelLus] |
dan is volgens mij definitie 3 van index van toepassing.
Met oOonderdeel de grootheid, array, vector.
nOnderdeelLus de index.
Naast iteraties zijn er heus wel momenten in de code waarbij je alleen naar de waarde van een array referereert. Ik zou voor eenduidigheid op beide verschillende momenten ze als nOnderdeelIndex noemen en niet bij een iteratie de "index" nOnderdeelIterator/nOnderdeelLus noemen en even later nOnderdeelIndex bij een referentie.
float f;
double d;
triviale, tijdelijke variabelen zoals nodig in counters etc. worden gewoon afgekort, scheelt weer wat typewerk ipv index etc. (een float zou dan bijv float_index worden of fIndex). Door de eerste letter van het type aan te nemen is ook nog te zien wat het type is. Duidelijk en simpel
Verwijderd
Dat is in feite wat ik bedoel met mijn verklaring met .indexoff en de for-next loop. Als je de waarde enkelvoudig gebruikt (om 1 waarde op te halen), vind ik dat het 'index'-zijn waar is, volgens jouw definitie.dan is volgens mij definitie 3 van index van toepassing.
Met oOonderdeel de grootheid, array, vector.
nOnderdeelLus de index.
Echter, gebruik je een for-next loop dan is het imo belangrijker op dat punt duidelijk te maken dat het een itererende waarde betreft, dat prevaleert dan boven het 'index-zijn'. Door 'm op deze manier te beschrijven ZIE je dat het een itererende waarde is, naast dat het de index is.
Maar goed, ik ben het wel met je eens dat dat misschien een persoonlijke zienswijze is.
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea