INF.04 · C# · lekcja 7
Metody i przeciążanie
Wywołaj metodę, zamiast kopiować obliczenie
- Zrozum
- Sprawdź
- Napisz sam
Po tej lekcji: wywołaj metodę, zamiast kopiować obliczenie
Dzisiaj zrobisz konkretną rzecz
Bez metod cały program musiałby być zapisany jako jeden ciąg instrukcji w Main() — nieczytelny i niemożliwy do ponownego wykorzystania. Metody to pierwszy krok w stronę dzielenia dużego problemu na mniejsze, zarządzalne fragmenty — dokładnie tak, jak zaczniesz projektować klasy w dalszej części tego działu (Lekcja 10 i kolejne).
Metoda Dodaj(a, b) działa jak przepis kulinarny zapisany raz na kartce — możesz go użyć wielokrotnie, za każdym razem z innymi składnikami (parametrami), bez przepisywania całej receptury od nowa.
Sprawdź w działaniu
Wywołaj metodę, zamiast kopiować obliczenie
Najpierw przewidź wynik. Zmień dane w modelu i porównaj efekt. Spróbuj także przypadku granicznego, a nie tylko pierwszego poprawnego przykładu.
Model pokazuje wybraną zasadę. Nie uruchamia ani nie ocenia wklejonego kodu C#.
1. Przygotuj i uruchom własny projekt
2. Najpierw mały przykład
Wykonaj tę próbę przed dłuższym rozwiązaniem. int przed nazwą to typ wyniku, a int a i int b to parametry. Wywołanie przekazuje argumenty2 i3. return oddaje wartość i kończy metodę. Przeciążenie wymaga innej listy parametrów, nie tylko innego typu wyniku.
Console.WriteLine(Dodaj(2, 3));
Console.WriteLine(Dodaj(10, 4));
static int Dodaj(int a, int b)
{
return a + b;
}
5 14
- Co sprawdzić? Zmień jedną wartość i przed uruchomieniem zapisz przewidywany rezultat. Porównaj go z opisem wyniku; przy błędzie wróć do konkretnej instrukcji.
Jak to działa — 1
Metoda (funkcja) to nazwany, samodzielny fragment kodu, który możesz wywołać wielokrotnie z różnymi danymi, zamiast powtarzać ten sam kod w wielu miejscach. To jeden z najważniejszych sposobów organizowania kodu w każdym programie, niezależnie od jego rozmiaru.
Składnia metody w C#:
typZwracany NazwaMetody(typ parametr1, typ parametr2) { ... return wartość; }
Metody bez parametrów, bez zwracanej wartości (void oznacza "nic nie zwraca"):
static void Przywitaj() { Console.WriteLine("Cześć!"); }
Metody z parametrami, bez zwracanej wartości:
static void PrzywitajImieniem(string imie) { Console.WriteLine("Cześć, " + imie); }
Metody z wartością zwracaną (typ zwracany zamiast void, i słowo kluczowe return):
static int Dodaj(int a, int b) { return a + b; }
Przeciążanie metod (overloading) — możesz mieć KILKA metod o tej samej nazwie, różniących się liczbą lub typem parametrów. C# sam wybierze właściwą wersję na podstawie tego, jakich argumentów użyjesz przy wywołaniu:
int Dodaj(int a, int b) i double Dodaj(double a, double b) mogą współistnieć w tym samym programie.
Jak to działa — 2
Przeciążanie jest wskazane, gdy operacja logicznie robi "to samo", tylko dla różnych typów danych — nadużywanie go dla operacji, które robią RÓŻNE rzeczy, tylko myli czytelnika kodu.
3. Pełny przykład — czytaj od Main
Teraz zastąp Program.cs tym programem. Zanim uruchomisz, znajdź dane wejściowe, operację i miejsce prezentacji wyniku. W tym wariancie zachowujemy jawny Main. Nie wklejaj kilku pełnych programów do jednego pliku.
using System;
class Program
{
static void Main()
{
Przywitaj();
PrzywitajImieniem("Kasia");
int suma = Dodaj(3, 5);
Console.WriteLine("Suma: " + suma);
double sumaZDziesietnymi = Dodaj(2.5, 3.1); // wywołuje przeciążoną wersję dla double
Console.WriteLine("Suma z częścią dziesiętną: " + sumaZDziesietnymi);
}
static void Przywitaj()
{
Console.WriteLine("Witaj w programie!");
}
static void PrzywitajImieniem(string imie)
{
Console.WriteLine("Cześć, " + imie + "!");
}
static int Dodaj(int a, int b)
{
return a + b;
}
static double Dodaj(double a, double b) // przeciążenie - ta sama nazwa, inne typy
{
return a + b;
}
}
- Prześledź kod Zwróć uwagę, że w programie są DWIE metody o nazwie
Dodaj— C# rozróżnia je po TYPACH parametrów (int, intvsdouble, double), nie po nazwie. WywołanieDodaj(2.5, 3.1)automatycznie "trafia" do wersji dladouble, bo argumenty mają część dziesiętną. Słowostaticoznacza, że metoda należy do całej klasyProgram, a nie do konkretnego obiektu — więcej o różnicy dowiesz się w Lekcji 10.
Sprawdź, zanim przepiszesz cały program
Częsty błąd to zapomnienie return w metodzie, która ma zwracać wartość (typ inny niż void) — kompilator zgłosi wtedy błąd "not all code paths return a value". Drugi błąd: próba przeciążenia metod różniących się TYLKO typem zwracanym (bez zmiany parametrów) — C# tego nie dopuszcza, bo przy wywołaniu nie dałoby się jednoznacznie rozstrzygnąć, której wersji użyć. Trzeci: nadmierne przeciążanie metod, które w rzeczywistości robią zupełnie różne rzeczy — utrudnia to zrozumienie kodu innym programistom.
Ćwiczenie z pomocą · samodzielna praca
4. Teraz Twoja zmiana
Napisz metodę Kwadrat(int liczba) zwracającą kwadrat podanej liczby, i wywołaj ją dla kilku różnych wartości.
Spełnij warunki polecenia. Zapisz wejście, otrzymany wynik i wyjaśnij, która część kodu za niego odpowiada.
? Potrzebujesz pomocy? Rozwiązuj krok po kroku.
Krok 1 — pokaż podpowiedź
Wróć do podstawowej formy oraz objaśnienia: int przed nazwą to typ wyniku, a int a i int b to parametry. Wywołanie przekazuje argumenty2 i3. return oddaje wartość i kończy metodę. Przeciążenie wymaga innej listy parametrów, nie tylko innego typu wyniku.
Krok 2 — pokaż podpowiedź
Zmień tylko część potrzebną do polecenia. Zachowaj działającą wersję przed zmianą i uruchamiaj po każdym małym etapie.
Krok 3 — pokaż podpowiedź
Sprawdź przypadek zwykły i graniczny; porównaj z regułą: 5 14
Otwórz tylko tyle podpowiedzi, ile potrzebujesz. Po każdym kroku wróć do zadania i sprawdź wynik.
5. Sprawdź rozumienie, nie tylko uruchomienie
Dalej na swoim koncie
Rozgrzewki, quiz i zadania są w biurku ucznia.
Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.
Zaloguj się →