webForumDet fria alternativet

Kodstil?

17 svar · 1 028 visningar · startad av Auxe

AuxeMedlem sedan apr. 2006135 inlägg
#1

Hej!

Jag hittade en intressant artikel på csharpfriends.com nämligen
"C# Coding Style Guide"

Jag har ibland undrat hur andra döper funktioner, variabler etc.. finns det någon standard.. Och i och med denna guide så fick jag juh svar!

Dock så måste man juh vara lite källkritisk och dubbelkolla detta med er duktiga programmerare här på wF! Verkar denna guide vettig? Representerar den verkligen någon standard på hur man kodar C# ?

Jag hoppas att ni förstår min fundering...

Tack på förhand!

Länk till guiden

mrhazeMedlem sedan juli 2002252 inlägg
#2

Jag tycker det ser bra ut och den verkar stämma bra överens om vad Microsoft själva rekommenderar. Brad Adams , som ligger bakom .NET framework, har skrivit en bok om just detta: Framework Design Guidelines - den rekommenderar jag starkt!

Sen finns det en lite mer kompakt bok The Elements of C# Style som också ger många bra tips och förklaringar varför man skall göra på "rätt" sätt ;)

Något som dessa två böcker inte tar upp är hur man namnger privata fält eller GUI element, men om man ska följa deras guidelines så skall man aldrig använda Hungarian Notation (dvs prefixa med datatypen).

Dvs. döp aldrig GUI element till btnOK, txtName, cboCities etc - det är föråldrat! (och samtidigt så ser det ju fult ut! :bla)

Privata variablar finns det lite olika varianter på:

  • firstName
  • _firstName
  • firstName_
  • myFirstName

Själv kör jag med den sista, dels för att det ser bäst ut och att variablen enbart finns i denna klassen - dvs det är "mitt namn".

spangoMedlem sedan juni 20008 205 inlägg
#3

Ser väl rätt kosher ut, bortsett från att den inte är helt konsekvent med hur den placerar måsvingarna... kan nog även vara värt för dig att kolla på http://blogs.msdn.com/brada/articles/361363.aspx samt i SDK:n under .NET Development -> General Reference -> Design Guidelines for Developing Class Libraries.

AuxeMedlem sedan apr. 2006135 inlägg
#4

Tackar mrhaze och spango! Nu fick jag lite att ta i!

MVH Auxe

GladhMedlem sedan maj 20012 812 inlägg
#5

mrhaze skrev:

Dvs. döp aldrig GUI element till btnOK, txtName, cboCities etc - det är föråldrat! (och samtidigt så ser det ju fult ut! )

Jag är av annan uppfattning, men så är jag mer praktisk än utseende fixerad ;)

Jag döper alla mina GUI-komponenter till prefix för att jag inte skall få kollisoner när mina privata variabler får samma namn som GUI-kontrollen. Ex: är om du har ett textfält där du vill skriva in förnamn och du efteråt i din kod vill plocka ut det namnet och lägga i en variabel så blir det.

string firstName = txtFirstName.Text;

På något sätt måste dessa 2 variabler särskiljas och då jag (man) oftas använder mindre GUI-kontroller än rena variabler så blir det mindre extra arbete att prefixa GUI-kontroller.

Sedan använder jag _FirstName på mina privata variabler i klassen och inte myFirstName eftersom det blir enklare när man vill omvandla variablen till en propertys med VS 2005, då tar den själv bort _ medans my står kvar... återigen praktiskt nytta före utseende...

Men det är ju bara som jag vill ha det, och som du märker så finns det olika synpunkter på det och du kommer garanterat stötta på de flesta olika typerna i din karriär....

- M

emissionMedlem sedan dec. 19996 721 inlägg
#6

Gladh skrev:

Jag döper alla mina GUI-komponenter till prefix för att jag inte skall få kollisoner när mina privata variabler får samma namn som GUI-kontrollen. Ex: är om du har ett textfält där du vill skriva in förnamn och du efteråt i din kod vill plocka ut det namnet och lägga i en variabel så blir det.

Precis. Den är en allmänt tillämpad praxis att fortsätta med ungersk notation (heter de herrNilsson och frökenOlssson i Ungern?) för kontroller, just av detta skäl. Det gäller dock inte namn på formulär-klasser o.dyl, eftersom de ju är klasser och ska behandlas som sådana. Inte frmMain.cs alltså, utan MainForm.cs och därefter frmMain=new MainForm()

AuxeMedlem sedan apr. 2006135 inlägg
#7

Hur ska man igentligen placera första "måsvingen" tycker ni då?

Alt1

for (int i = 1; i < num; ++i) {
meetsCriteria[i] = true;
}

eller

Alt2

for (int i = 1; i < num; ++i) 
{
meetsCriteria[i] = true;
}

Personligen tycker jag att Alt2 känns snyggare.
Är det inte så att Alt1 är vanligt inom Java?

Men som sagt... hur gör ni?

NickemannenMedlem sedan aug. 20003 575 inlägg
#8

Om det bara är en rad så.

for (int i = 1; i < num; i++)
meetsCriteria[i] = true;

Annars så gillar ju inte VS.NET 2005 alternativ 1 och gör automatiskt om det till alternativ 2.

Sedan håller jag med Gladh när det gäller de grafiska komponenterna,

vanligtsvis brukar jag ha så beskrivande namn på variablerna som möjligt t.ex. om jag har ett objekt som heter Transaction kallar jag den för transaction om det är det mest passande namnet.

spangoMedlem sedan juni 20008 205 inlägg
#9

Angående ungersk notation: Microsoft själva rekommenderar ju att man droppar ungersk notation av GUI-element och söper saker till okButton istället för btnOk, osv.

mrhazeMedlem sedan juli 2002252 inlägg
#10

Gladh skrev:

mrhaze skrev:

Dvs. döp aldrig GUI element till btnOK, txtName, cboCities etc - det är föråldrat! (och samtidigt så ser det ju fult ut! )

Jag är av annan uppfattning, men så är jag mer praktisk än utseende fixerad ;)

Jag döper alla mina GUI-komponenter till prefix för att jag inte skall få kollisoner när mina privata variabler får samma namn som GUI-kontrollen. Ex: är om du har ett textfält där du vill skriva in förnamn och du efteråt i din kod vill plocka ut det namnet och lägga i en variabel så blir det.

string firstName = txtFirstName.Text;

På något sätt måste dessa 2 variabler särskiljas och då jag (man) oftas använder mindre GUI-kontroller än rena variabler så blir det mindre extra arbete att prefixa GUI-kontroller.

Sedan använder jag _FirstName på mina privata variabler i klassen och inte myFirstName eftersom det blir enklare när man vill omvandla variablen till en propertys med VS 2005, då tar den själv bort _ medans my står kvar... återigen praktiskt nytta före utseende...

Men det är ju bara som jag vill ha det, och som du märker så finns det olika synpunkter på det och du kommer garanterat stötta på de flesta olika typerna i din karriär....

- M

Självklart, glömde kanske skriva det - men som Microsoft själva rekommenderar och som spango skriver suffix på GUI element för att skilja dem från privata variablar.

Om du är mer praktiskt fixerad så förstår jag dock inte varför du vill köra med prefix då de treställiga perfixen är ett arv från när Visual Basic var ett otypat språk. Man skrev strName, intAntal, dblSumma, btnSpara och så vidare. Detta är i dag förlegat, då typen är känd av utvecklingsmiljön och man får fel om man blandar typer utan explicit konvertering. Dessutom gör prefixen att det blir svårare att använda intellisens.

Namnet skall motsvara det substantiv som bäst beskriver objektet. Namnet bör kunna utläsas som vanlig svenska eller engelska. Exempel: om objektet är en knapp man kan klicka på för att spara, bör namnet vara "SparaKnapp" eller "SaveButton".

Ser man hur bland annat Microsofts gurus anser att man skall koda, har man övergett detta med prefix, till förmån mot mer språkligt korrekta benämningar, allt i syfte att göra koden med läsbar och förståelig.

Själv anser jag att en stringent namnsättning ger kod som kan läsas rakt av. Exempel:

Dim theBus as New Bus (1234)

With theBus
  .NumberOfSeatings = 54
  .Fuel.Fill(45)
  Dim theEngineData As Bus.Engine.Data = .GetEngineData()
End With

Håller du inte med om att:

string firstName = FirstNameField.Text

är enklare, snyggare och mer logisk än:

firstName = txtFirstName.Text

Ingen risk för kollisioner där.

Tänker man till när man döper kontroller och variablar så skall man inte behöva prefixa dem, utan då skall namnet tala för sig själv - precis som Microsoft själva har gjort .NET ramverket. ;)

mrhazeMedlem sedan juli 2002252 inlägg
#11

Auxe skrev:

Hur ska man igentligen placera första "måsvingen" tycker ni då?

Alt1

for (int i = 1; i < num; ++i) {
meetsCriteria[i] = true;
}

eller

Alt2

for (int i = 1; i < num; ++i) 
{
meetsCriteria[i] = true;
}

Personligen tycker jag att Alt2 känns snyggare.
Är det inte så att Alt1 är vanligt inom Java?

Men som sagt... hur gör ni?

Alternativ 2 är det som rekommenderas utav Microsoft.

AuxeMedlem sedan apr. 2006135 inlägg
#12

Nu är det många bra inlägg, tack för alla bra svar!

clarkbonesMedlem sedan feb. 20013 023 inlägg
#13

spango skrev:

Angående ungersk notation: Microsoft själva rekommenderar ju att man droppar ungersk notation av GUI-element och söper saker till okButton istället för btnOk, osv.

Microsoft säger många saker, en del jättebra, en del mindre bra. Om ovanstående är bra eller dåligt råder det kanske delade meningar om. Poängen är att man inte ska ta Microsoft som en allmäktig gud, men det vet jag att du inte gör. ;)

emissionMedlem sedan dec. 19996 721 inlägg
#14

Auxe skrev:

Personligen tycker jag att Alt2 känns snyggare.

Jag tycker att alt1 är snyggare, men likförbaskat kör jag till 100% på alt2 av ohejdad vana.

CompusaMedlem sedan jan. 20023 327 inlägg
#15

emission skrev:

Jag tycker att alt1 är snyggare, men likförbaskat kör jag till 100% på alt2 av ohejdad vana.

Nästan samma för mig. Jag tycker också alternativ 1 är snyggast och jag brukar använda det i Java. I c/c++ och c# brukar jag däremot använda alternativ två för att det verkar vara vanligast. Visual Studio "tvingar" väl en mer eller mindre att använda alternativ två...

GladhMedlem sedan maj 20012 812 inlägg
#16

mrHaze skrev:

Tänker man till när man döper kontroller och variablar så skall man inte behöva prefixa dem, utan då skall namnet tala för sig själv - precis som Microsoft själva har gjort .NET ramverket.

Om man prefixar eller postfixar sina GUI-kontroller spelar mindre roll för mig och jag ser varken för eller nackdelar med något av det.

mrHaze skrev:

Dessutom gör prefixen att det blir svårare att använda intellisens.

Tycker jag inte vet jag att jag vill ha tag i min textbox så skriver jag txtf och sedan trycker på ctrl-mellanslag... inte svårare än att du skall skriva fir och sedan trycker ctrl-mellanslag.

mrhaze skrev:

om objektet är en knapp man kan klicka på för att spara, bör namnet vara "SparaKnapp" eller "SaveButton".

Jag kan inte se att det skall var så svårt att förstå att btnSave är en sparaknapp, eller knappspara. Där emot så ser jag inte så mycket mening med att skriv SaveButton istället för SaveBtn även som SaveBtn är svårare att förstå än btnSave. Men btnSave är kortare än SaveButton och betyder mindre tangenttryckningar.

mrhaze skrev:

Själv anser jag att en stringent namnsättning ger kod som kan läsas rakt av. Exempel:

Bus är ingen GUI-kontroll och skall inte ha någon prefix/postfix utan skall döpas till bus och inte theBus.

Men som sagt det är vad jag tycker, tycker du något annat så är det fint med mig, jag kommer inte ändra min ändå :) och jag misstänker att du inte heller kommer ändra dig.

mrHarze skrev:

men som Microsoft själva rekommenderar och som spango skriver suffix på GUI element för att skilja dem från privata variablar.

hehe.. vi hade livliga diskutioner om vi skulle använda _ eller my på våra privata variabler och båda sidor hade dokument där MS rekomenderade sin sidas variant, och när man gick ut och tittade på olika kodexempel så användes de olika typerna helt beroende på vem som hade skrivit kodexemplet. Så vad MS rekomenderar beror nog mer på vilket dokument man råkat läsa....

- M

JosefMedlem sedan mars 20023 561 inlägg
#17

Jag använder ungersk notation på gui-kontroller för att de sorteras bra i intellisensen då. :)

Gladh skrev:

...betyder mindre tangenttryckningar.

Nej, färre. ;)

GladhMedlem sedan maj 20012 812 inlägg
#18

josef skrev:

Nej, färre.

Nej jag lovar tangenttryckningarna blir mindre... jag har inte gjort gjort några dubbeltryckningar på 2 tangenter samtidigt sen jag började med prefix... innan när jag hade postfix var det "jättestora" tangentryckningar... till och med upp till 4 tangenter samtidigt, så prefix är mycket bättre ;)

- M

144 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)