Variabler och deras moraliska läge i C#

Jag har tänkt igenom variablers läge i program och kommit fram till följande ”godhetsordning”, från godast till ondast:

  • a) Blockvariabler (inuti loopar, if etc.) (snällast)
  • b) Parametrar (argument till metoder)
  • c) Instansmedlemmar (per-instans)
  • d) Klassmedlemmar (per-klass) (ondast — väldigt lika vanliga globala variabler i C t.ex.)

Ett intuitivt exempel på varför en förändring från c till b förbättrar läsbarheten hos en metod:

c) Metoden använder instansmedlem i definitionen

public double SumCount()
{
double sum = 0;
foreach(double d in m_list)
sum += d;
return sum;
}
// m_list, vad är det för något?
// när/var skapas den?
// vi får leta i hela klassen...
// efter letande hittar vi dess
// deklaration, men vi vet fortfarande
// inte när/var den initieras etc.
...
private List<double> m_list;
...

b) Metoden använder endast parametrar till metoden

public double SumCount(List<double>  list)
{
double sum = 0;
foreach(double d in list)
sum += d;
return sum;
}
// parameter denna gång.
// lätt att förstå funktionen!


Ju mindre ”yta” man behöver söka igenom för att förstå en metod, desto mer lättläst är den. Samtliga steg d till a förbättrar då läsbarheten hos en metod.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: