Dylematy programisty: var
Zawód programisty wiąże się z nieustannym wybieraniem pomiędzy złym, a gorszym. Nie inaczej jest ze słowem kluczowym var.
Czym jest var?
Słowo kluczowe var służy do inferencji typów na poziomie kompilacji C# do CIL. Inferencja polega na ustaleniu typu zmiennej na podstawie przypisywanej wartości. Var ma swoje korzenie w języku F#, gdzie inferencja jest jeszcze bardziej rozbudowana. Nie jest to w żadnym wypadku typ dynamiczny. Słowo kluczowe var można stosować jedynie wewnatrz metody - nie ma możliwości definiowania w ten sposób typów wejściowych i wyjściowych (w przeciwieństwie do F#), czy też typów pól w klasie.
Ponieważ mój .NET trochę zardzewiał (a rdza słabo schodzi, bo nie piję coli ani nie smaruję się WD-40), byłem przekonany, że każdy developer C# używa go wszędzie gdzie się da. Okazało się, że istnieje spore grono wyznawców podawania typów wprost.
Dlaczego warto używać var?
Słowo kluczowe var, a co za tym idzie - ograniczona inferencja typów, nie zostały wprowadzone bez powodu. Do głównych zalet należą:
- zmiana przypisania wartości nie wymusza zmiany typu zmiennej,
- zapis jest krótszy i czytelniejszy, szczególnie w przypadku rozbudowanych typów ogólnych (less is more),
- wymusza przypisywanie wartości do zmiennej w miejscu jej deklaracji,
- uwalnia od polegania na implementacji na rzecz interfejsu (np. w kolekcjach).
Dodatkowo var jest jedyną możliwością w przypadku tworzenia instancji typów anonimowych.
W jakich sytuacjach var jest utrudnieniem?
Stosowanie słowa var w każdej sytuacji wiąże się jednak z pewnymi komplikacjami:
- na code review nie widać typu zmiennej, przez co trudniej określić intencje autora kodu,
- korzystanie że źle zaprojektowanego api jest mało czytelne,
- odczytanie typu poza środowiskiem programistycznym z intellisense jest utrudnione.
Spotkałem się również z metodą mieszaną - stosowanie var tylko w przypadku tworzenia nowego obiektu za pomocą konstuktora lub metody wytwórczej.
Podsumowanie
Osobiście stosuję var gdzie się da. Prawdę mówiąc mam wrażenie, że unikanie var jest wymówką dla złego nazywania zmiennych i pól. W końcu nazwa zmiennej powie wszystko o jej zawartości. A co jeżeli…
Moje podejście dotyczy to jednak tylko moich własnych projektów. Pracując w zespole dużo istotniejsza jest spójność. W moim obecnym projekcie w pracy stosujemy metodę mieszaną.
A wy? Używacie tego słowa kluczowego w swoich projektach?
PS. Jestem na etapie życia, w którym wszystko zaczyna zasuwać jak gepard goniący gazelę. Pisanie kolejnych postów często spada na dalszy plan. Dlatego potrzebowałem motywacji. Postanowiłem rzucić wyzwanie mojemu dobremu kumplowi Arkowi, który właśnie transferuje się z upadającego WP na Androida. Wyzwanie polega na opublikowaniu przynajmniej jednego wpisu w miesiącu. Arek, jak przystało na człowieka o wyglądzie drwala, podniósł rękawicę. Dzięki temu na naszych blogach będzie więcej contentu dla Was :-)