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");