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.

Ta interakcja wymaga włączonego JavaScriptu.

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.

Program.cscsharp
Console.WriteLine(Dodaj(2, 3));
Console.WriteLine(Dodaj(10, 4));

static int Dodaj(int a, int b)
{
    return a + b;
}
Wynik
5
14
  1. 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.

Program.cs — osobne uruchomieniecsharp
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;
    }
}
  1. Prześledź kod Zwróć uwagę, że w programie są DWIE metody o nazwie Dodaj — C# rozróżnia je po TYPACH parametrów (int, int vs double, double), nie po nazwie. Wywołanie Dodaj(2.5, 3.1) automatycznie "trafia" do wersji dla double, bo argumenty mają część dziesiętną. Słowo static oznacza, że metoda należy do całej klasy Program, 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.

Oczekiwany rezultat
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ę →
Źródła i dalsza nauka