Personligen förespråkar jag inte att instansiera alla variabler vid deklarering. Det finns massvis av situationer där man vet att man alltid kommer att ha ett värde när man accessar variabeln för första gången. Ex:
Code:
XmlDocument doc;
try {
doc = XmlDocument.Parse(xmlString);
} catch(Exception ex) {
Log(ex);
throw;
}
XmlNode root = doc.DocumentElement;
Antingen så tilldelas ett nytt värde, eller så bryts flödet (throw). Skulle vi tilldela ett värde vid deklareringen, så skulle det vara ett som vi vet aldrig kommer att användas. En sådan tilldelning skulle kännas mycket överflödig.
Vad gäller medlemsvariabler på klasser har vi dock ett beroende på ett speciellt kod-flöde, som det inte finns någon motsvarighet till i ovanstående exempel. Beroende på var vi tilldelar, och var vi läser en variabel, kan vi kanske inte veta att den alltid kommer att ha ett värde. När sådana beroenden på flöden uppstår, är det alltid värt att fråga sig om inte ett större fel har inträffat i hur flödet är upplagt. I Nepsirs kod skulle jag till exempel hellre deklarera tv i run() (och skicka in kontrollkodActivity.this istället för this) med tanke på att den som det ser ut just nu inte används någon annanstans.
Hursomhelst; i de fall där ett sådant beroende på flöde faktiskt är motiverat, skulle jag fortfarande inte tilldela värde till en medlemsvariabel direkt vid deklarationen. Dock av en helt annan anledning: Jag vill inte ha en massa logik där. För att vara säker på att de alltid har ett värde (om det nu är vad jag vill) skulle jag istället se till att tilldela dessa värden i konstruktorn.
Men för att återgå till scope, så kanske det här är utanför scope för en nybörjarfråga...
Last edited: Dec 29, 2009