Słowo kluczowe – var – używać czy nie używać?

Słowo kluczowe var wprowadzone w C# 3.0 pozwala w codziennej pracy programisty .NET unikać definiowania typów danych, zrzucając odpowiedzialność na ustalenie typu kompilatorowi. W większość przypadków kompilator domyśla się jaki typ ma mieć dana zmienna i życie toczy się dalej. Jednak z czasem można zauważyć pewne efekty uboczne w czytelności kodu. Poniżej moje przemyślenia na temat var.

Wstęp

Słowa kluczowe var powstało po to aby w LINQ można było zwracać typy anonimowe. Przykład poniżej, bez słowa kluczowego var, typ zmiennej listaTypowAnonimowych oraz typAnonimowy musiał by być jawnie określony w programie.

            var intList = Enumerable.Range(0, 100);

            var listaTypowAnonimowych = intList
                .Where(x => (x % 2 == 0) && (x != 0))
                .Select(x => new
                {
                    Liczba = x,
                    CzyParzysta = true
                });

            foreach (var typAnonimowy in listaTypowAnonimowych)
            {
                WriteLine($"Wartość właściwości Liczba: {typAnonimowy.Liczba}");
                WriteLine($"Wartość właściwości CzyParzysta: {typAnonimowy.CzyParzysta}");
            }

Dodatkowym efektem słowa kluczowego var jest to, że możemy stosować je przy tworzeniu praktycznie każdej zmiennej.

            var tekst = "123";
            var liczba = 12M;
            var slownik = new Dictionary<string, string>();

W przypadku długich nazw typów zyskujemy sporo na czasie kodowania i unikamy literówek.

Czytelność

Głównym i chyba jedynym problemem słowa stosowania var jest jego przejrzystość w kodzie. Człowiek to jednak nie kompilator i nie zawsze z samego czytania kodu może poprawnie określić jaki typ jest wynikiem na przykład działa takiej metody:

var jakiToMożeMiećTyp = this.SetParametr();

Aby to sprawdzić podczas czytania kodu, należało by najechać myszką na nazwę metody i to sprawdzić. Jednak czy w takim przypadku nie było by lepiej określić zwracaną wartość jawnie?

SetResult jakiToMożeMiećTyp = this.SetParametr();

Teraz czytający wie, że metoda zwraca jakiś tam rezultat, który pewnie się składa z jakiś właściwości i pewnie gdzieś dalej będzie to wykorzystywane.

Oczywiście można by było zrobić tak:

var setResult = this.SetParametr();

Jednak w ostatnim jak i w pierwszym przypadku nie mamy pewności czy metoda zwraca typ prosty czy złożony co może mieć znaczące przełożenie w trakcje czytania kodów (szukania błędów).

Rozwiązanie

Osobiście jestem wielkim zwolennikiem słowa var i (wielu returnów w metodach o czym innym razem). Jego brak odczuwam boleśnie za każdym razem gdy piszę kody w Javie (jedną z różnic między Javą a C# jest właśnie brak w tym pierwszym słowa kluczowego var. Przez co na początku kodowania w Javie trzeba się sporo na pocić). Var stosuje  często i bez krępacji jednak mam pewne zasady, które pomagają mi w moim kolegom w czytaniu kodu.

Gdy nie mam innej możliwości i nazwa metody nie mówi nic o typie zwracanym to nigdy w takich przypadkach nie dopuszczam używania słowa var:

var x = funkcjaA(); // unikam jak ognia

Gdy nazwa metody już coś mówi wtedy sprawdzam jaką nazwę ma nazwa zmiennej. Jeśli nazwa zmiennej nie mówi w logiczny sposób co to jest również nie dopuszczam używania słowa var

var x = DajIndeksy(); // jest lepiej ale nadal nie jest idealnie

Jeśli nazwa metody jasno określa co i jak oraz nazwa zmiennej również dobrze opisuje to co trzyma wtedy zawsze używam var.

var indeksy = DajIndeksy(); // idealnie

Mimo, że nadal człowiek nie wie czy to może lista indeksów  czy tablica int-ów. To jednak to już nie jest takie istotne wiem na pewno, że to zbiór.

Jeśli potrafie to określić tylko czytając kod wtedy słowa kluczowego var można używać bez ograniczeń

Skąd tyle var w programach?

Odpowiedz brzmi: resharper. Większość osób, które namiętne używa słowa var to programiści, którzy mają zainstalowanego Resharpera-a, który domyślnie podpowiada gdzie się tylko da (czyli praktycznie wszędzie) aby używać słówka var. Dlaczego tak robi? Podejrzewam, że to tylko domyślna konwencja jednak takie lenie jak ja tego nie wyłączyli i w końcu się nauczyliśmy pisać gdzie się słowo var.

Podsumowanie

Używanie var jest dobre jeśli możemy określić z jakiem mniej więcej typem danych mamy do czynienia. Nie musimy mieć dokładnej wiedzy jaki to typ, wystarczy, że potrafimy się słusznie domyśleć. Gwarantuje, że kod pisany z używaniem właśnie takich zasad będzie czytelny dla każdego w miarę kumatego programisty.

 

2 przemyślenia nt. „Słowo kluczowe – var – używać czy nie używać?

  1. W resharper, bodajże od wersji 7.1 jest rozróżnienie 2 przypadków podpowiedzi.
    – gdy typ jest jawnie widoczny (metody generyczne, cast’y, przypisanie wrtości)
    – gdy typ przypisywany nie jest jawny

    Osobiście mam ustawioną konfigurację, gdzie var jest używane tylko dla pierwszej grupy. Polecam takie rozwiązanie.

  2. Pingback: dotnetomaniak.pl

Możliwość komentowania jest wyłączona.