Jag läser orden "Do not use hungarian notation" i .NET SDK dokumentationen över namngivningstips av klasser, metoder etc - men varför? Jag har lärt in mig detta sedan jag började med VBScript i ASP och har lite svårighet att sluta.
Samtidigt undrar jag varför man använder _ i början av variabelnman, exempelvis _Username eller liknande. Protected, private eller nåt?
r) Ehh, jag menar såklart variabler och inte klasser & metoder.
Eftersom VBScript bara hade datatypen Variant var det ju idé att namnge variabler med ungersk notation. I dotnet är det onödigt eftersom man måste deklarera variablerna. Fast jag gör det ändå. :)
Hungarian Notation var något Microsoft införde i början av 80-talet för att minska risken att göra ogiltiga casts, eftersom C/C++ inte är typsäkert, och kompilatorerna inte alltid kan upptäcka felaktiga casts. Ett hyfsat användbart sätt att minska risken för buggar. Även om Microsofts dokument täcker ganska många primitiva datatyper får man såklart inte med allt. Detta leder till att olika grupper får sina egna tillämpningar.
En inte helt ovanlig fälla med HN är att en variabels datatyp ändras vid någon fas i ett projekt, men namnet inte uppdateras eftersom det finns på många ställen.
Själv kommer jag ihåg ett sådant problem i ett projekt som hade driftsatts där man stötte på patrull. Det visade sig att de från början använt null-terminarade strängar och kallade dessa typ szNånting, men sedan gjort om typen så de inte längre var null-terminerade, utan man skickade med en längd. Desvärre var att namnen inte var ändrade, dvs variablerna hette szNånting utan att vara null-terminerade. Problemet jag hittade var att på ett (1) ställe i en mycket stor kod-mängd användes szNånting ändå som en null-terminerad sträng, vilket gav en heap-corruption ungefär en gång i veckan i ett ganska stort system. Min uppfattning är att Hungarian Notation kan vara förrädiskt på detta sätt. En kompilator ställd till att kompilera på strikt varnings-nivå och som behandlar varningar som fel (så att man inte kan strunta i varningar) är en mycket större hjälp än Hungarian Notation.
C# är (precis som Java) typsäkert. Problemet som HN är till för att lösa existerar helt enkelt inte längre. I min mening är det då bara klumpigt med HN och eftersom det dessutom strider mot guidelines är det bara dåligt att använda. Det är skönt att arbeta med ett språk som har guidelines (istället för att varje arbetsplats slösar tid på att göra sådana), och att dessutom ha ett verktyg (FxCop) för att kontrollera att dessa uppfylls. Det finns ingen anledning att avvika från reglerna.
Att namnge variabler med "_" som prefix/suffix eller "m_" som prefix görs ofta för att påvisa att dessa är medlemsvariabler. Detta ligger utanför Hungarian Notation och strider därför inte mot guidelines för C#. Personligen använder jag "m_" som prefix till medlemsvariabler efterom jag tycker det minskar risken för att glömma "this." om man råkar ha en lokal variabel med samma namn som en medlemsvariabel.
På mitt företag (och de flesta inom samma branch) använder inte ungersk notation. Programmen ska vara dels välkommenterade där alla variabler ändå är beskrivna, dels så är variablernas namn valda efter vad de gör, inte vad de representerar för datatyp.
Fast som utvecklare har man den stora äran att göra som man vill (om man inte är styrd av företagspolicy's)
Stephen Walter författare till ASP.NET Unleashed skrev:
Microsoft recommands that you do not follow this convention in the case of .NET Framework and ASP.NET. The motivation for this recommendation is that they expect you to use an advanced editor, such as Microsoft Visual Studio, to write your code. Visual Studio automatically provides you with information about a variable´s type.
454 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2