Zmienne lokalne w C#
Zmienne lokalne są deklarowane wewnątrz metod i istnieją wyłącznie w czasie, gdy dana metoda jest wywoływana. Gdy tylko metoda zwróci sterowanie, pamięć zajmowana przez jej zmienne lokalne zostaje zwolniona dla innych zastosowań.
Definiowanie typu zmiennej lokalnej
Wprowadź poniższy kod do metody Main, żeby zadeklarować zmienne lokalne i przypisać im różne wartości. Zauważ, że typ zmiennej podaje się przed jej nazwą:
double waga = 1.88; // w kilogramach
decimal cena = 4.99M; // w złotówkach
string owoce = "jabłka"; // ciąg znaków w cudzysłowie
char litera = 'Z'; // znaki umieszczamy między apostrofami
bool radosc = true; // typ bool przyjmuje wartości true lub false
Visual Studio 2017 i Visual Studio Code podkreślą nazwy wszystkich tych zmiennych zielonym wężykiem, ostrzegając w ten sposób, że przypisano im wartości, ale te nigdy nie zostały użyte.
Wywodzenie typu zmiennej lokalnej
Podczas deklarowania zmiennych lokalnych możesz użyć słowa kluczowego var. Kompilator wywiedzie wtedy typ zmiennej z wartości literału umieszczonej za operatorem przypisania (=). Literał zwykłej liczby bez części dziesiętnej zostanie przekształcony na typ int, chyba że do literału dodasz przyrostek L — wtedy kompilator użyje typu long. Literał liczby zawierający przecinek zostanie przekształcony na typ double, chyba że będzie miał przyrostek M, co spowoduje użycie typu decimal, albo przyrostek F, który z kolei oznacza typ float. Cudzysłów nakazuje kompilatorowi użycie typu string, a apostrofy — typu char. Z kolei wartości true lub false powodują nadanie zmiennej typu bool.
Zmień swój kod, używając w nim słowa kluczowego var:
var waga = 1.88; // w kilogramach
var cena = 4.99M; // w złotówkach
var owoce = "jabłka"; // ciąg znaków w cudzysłowie
var litera = 'Z'; // znaki umieszczamy między apostrofami
var radosc = true; // typ bool przyjmuje wartości true lub false
Dobra praktyka
Co prawda używanie słowa kluczowego var jest bardzo wygodne, mimo to programiści starają się go unikać, tak żeby osoba czytająca kod mogła łatwiej rozpoznać używany typ danych. Sam wykorzystuję go tylko w przypadku, gdy użyty typ jest całkiem oczywisty. Na przykład w poniższym kodzie pierwsza instrukcja jest równie czytelna co druga, jeżeli chodzi o określenie typu zmiennej xml, a przy okazji jest nieco krótsza. Jednak już w trzeciej instrukcji wcale nie jest jasne, jaki typ otrzyma zmienna, dlatego jej wariant w postaci czwartej instrukcji jest znacznie lepszy. W razie wątpliwości lepiej jest podać typ jawnie!
var xml1 = new XmlDocument();
// niepotrzebnie powtórzona nazwa typu XmlDocument
XmlDocument xml2 = new XmlDocument();
// złe użycie słowa kluczowego var; jaki typ otrzyma zmienna plik1?
var plik1 = File.CreateText(@"C:plik.txt");
// dobre użycie jawnej deklaracji typu
StreamWriter plik2 = File.CreateText(@"C:plik.txt");