The PIT
Röster från ITM-koncernen.

“Do not use Hungarian notation”

August 27, 2008 10:18 by Stefan Karlsson

Namngivning av variabler

Vi gamla VB-knackare är ju väldigt vana med Hungarian notation, dvs, att ha ett prefix som talar om vilken datatyp en variabel har och /eller vilket scope, global, privat osv som gäller.

Microsoft har för länge sedan ändrat de föreslagna namngivningsreglerna till att vi INTE ska använda Hungarian notation, vet inte när det dök upp först, men jag vet att det var minst 5 år sedan.

I .Net 1.1, som släpptes 2003, så stod det explicit att man inte skulle använda Hungarian notation: http://msdn.microsoft.com/en-us/library/ab6a8y1b(VS.71).aspx, jag har inte orkat leta, men jag antar att det stod så redan i .Net 1.0 som kom ut året innan.

“Do not use Hungarian notation.”

Hungarian notation is the practice of including a prefix in identifiers to encode some metadata about the parameter, such as the data type of the identifier.

Vad gäller .Net 2.0 och senare så står det ännu tydligare: http://msdn.microsoft.com/en-us/library/ms229045.aspx

Förbättrade Editorer

I dagens läge så är ju våra utvecklingsverktyg så smarta att vi direkt kan se vad en variabel är för typ, vilket scope den har osv. Ofta genom att hålla musen ovanför variabelnamnet eller genom att börja skriva variabelnamnet i editorn så får man snabbt upp om den är publikt dimensionerad, privat eller vad. Med ett enda klick kan man dessutom komma direkt till definitionen av variabeln och man blir alltid varnad om man försöker använda en variabel innuti ett scoop som har samma variabelnamn utanför scoopet. T.ex. om man dimensionerar upp en variabel inuti en loop som redan finns som dimensionerad precis utanför loopen.

Anledningen till att jag tar upp detta är att jag fortfarande ser Hungarian notation överallt i koder jag stöter på. Speciellt på kontroller, textboxar som döps txtFirstName, eller tbxFirstName istället för FirstNameTextBox (som jag föredrar).

Intellisense

Jag tror att de flesta utvecklare som använder Visual Studio använder Intellisense lika flitigt som jag själv. Skriv de två, tre första tecknena och tryck SPACE så är ordet färdigt. Om man döper ALLA textboxar till något som börjar på txt så innebär det att man måste skriva tre tecken till (txt) innan man ens börjar ge intellisensen ledtrådar på vilken kontroll jag är ute efter. Så det krävs minst 4 tecken för att ens börja låta intellisensen bli verksam på riktigt. Är jag ute efter FirstName, oavsett om det är en kontroll, variabel eller något anant så är det för mig mycket lättare att låta alla börja med “FirstName”, skriver jag FirstName så kommer jag bara få upp ett fåtal alternativ i intellisense-rutan, t.ex. FirstNameTextBox och FirstName om jag nu råkar ha en kontoll och en variabel som hanterar Firstname.

Jag använder dock underscore för lokala variabler som ska hålla property-värden, detta är mot Microsofts generella namngivningsföreskrifter men i det här fallet har jag inte vant mig av med detta, kanske _FirstName istället skulle bli FirstNamePropertyHolder i mina framtida program? :

Private _FirstName As String = ""
Public Property FirstName() As String
        Get
            Return _FirstName
        End Get
        Set(ByVal value As String)
            _FirstName = value
        End Set
End Property

För att se senaste namngivningsförslagen osv gå hit: http://msdn.microsoft.com/en-us/library/ms229042.aspx