1. Funkcje/Metody w C#
Już nauczyłeś się sporej ilości komend w C#, więc możesz pisać całkiem złożone programy. 10, 20, 30 linii kodu w programie — to przecież nie taki wielki program, prawda?
Ale program mający 100+ linii — to już spory kawałek, i ogarnąć taki kod jest dość trudno. Da się jakoś uprościć pisanie i czytanie programów z dużą ilością kodu?
Tak, i tu właśnie pomagają nam metody (funkcje).
Czym właściwie jest metoda? W dużym uproszczeniu, metoda to grupa komend, która ma unikalną nazwę. Innymi słowy, po prostu grupujemy kilka komend razem i nadajemy im unikalną nazwę. I gotowe — mamy metodę.
Załóżmy, że masz kod do rysowania kota:
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
Oto co on wypisuje:
|\__/,| (`\
|o_o |__ _) )
(____/ (_/
Możesz po prostu przenieść to do osobnej metody i rysować tyle kotów, ile chcesz:
void WriteCat()
{
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
}
//rysujemy trzy koty
WriteCat();
WriteCat();
WriteCat();
Gdy program jest uruchomiony, za każdym razem gdy wywołasz WriteCat(), wykona wszystkie komendy wewnątrz metody WriteCat(). Po prostu stworzyliśmy nową komendę (metodę), łącząc kilka komend w jedną grupę.
Po co są funkcje:
- Dzielą program na części, z których każda robi swoją robotę.
- Ułatwiają ponowne użycie: raz napisane, używasz ile chcesz razy.
- Zmniejszają szansę na bugi: błąd w funkcji poprawiasz w jednym miejscu.
- Dają kodowi "nazwy" dla złożonych działań — czytelność od razu rośnie.
Terminologia: funkcja, metoda, procedura
W C# terminy funkcja i metoda zwykle znaczą to samo, ale są drobne niuanse.
- Metoda — funkcja należąca do klasy lub obiektu (w C# prawie wszystko to metody).
- Procedura — funkcja, która nic nie zwraca (void-metody).
- Funkcja — w szerokim sensie każda nazwana część programu, którą można wywołać.
Oficjalnie w C# wszystko to nazywa się metodami, ale jeśli gdzieś dalej trafisz na "funkcję" — nie panikuj!
2. Składnia deklaracji metody: rozkład na czynniki pierwsze
Rozłóżmy na czynniki prostą funkcję, klasyczne "Hello, World!", tylko wypiszemy to przez osobną metodę:
using System;
class Program
{
static void Main()
{
PrintHello();
}
static void PrintHello() // wypisujemy tekst Hello, World!
{
Console.WriteLine("Hello, World!");
}
}
Rozkład składni:
| Część | Przykład | Opis |
|---|---|---|
| Modyfikator | |
Wskazuje, że metoda należy do klasy (więcej o tym później) |
| Typ zwracanej wartości | |
Wskazuje, że metoda nic nie zwraca |
| Nazwa metody | |
Nazwa metody, przez którą ją wywołujesz |
| Parametry | |
Argumenty (puste — brak argumentów) |
| Ciało metody | |
Kod wykonywany przy wywołaniu metody |
Analogicznie:
Metodę możesz porównać do automatu z kawą: wrzucasz kasę (argumenty), wciskasz guzik (wywołujesz metodę), automat parzy kawę (ciało metody), i daje ci wynik (zwracana wartość) — albo nie daje, jeśli to void-metoda!
3. Jak wywoływać metody
Wywołanie metody — to po prostu jej nazwa i nawiasy i tyle:
PrintHello(); // Metoda bez parametrów
int sum = Add(2, 3); // Metoda z parametrami i wynikiem
Ważne: metodę możesz wywołać tylko po jej deklaracji (albo jeśli jest "wyżej" w kodzie, albo w tej samej klasie).
4. Metody z parametrami
Do metody możesz przekazywać parametry. To sprawia, że metoda jest elastyczna i możesz ją dostosować do różnych sytuacji. W praktyce parametry to zmienne metody, którym przypisujesz wartości w momencie wywołania. Parametry trzeba podać podczas tworzenia metody.
static void Greet(string name)
{
Console.WriteLine($"Cześć, {name}!");
}
// Użycie:
Greet("Alicja");
Greet("Bob");
Parametry — to zmienne, których wartości przekazujesz metodzie przy wywołaniu.
| Część | Przykład | Opis |
|---|---|---|
| Typ parametru | |
Typ przyjmowanej wartości |
| Nazwa parametru | |
Nazwa do użycia w metodzie |
Wywołania:
Greet("Alicja"); — name dostaje wartość "Alicja".
Kilka parametrów
Możesz zadeklarować kilka parametrów, oddzielając je przecinkiem:
static void PrintSum(int a, int b)
{
Console.WriteLine($"Suma: {a + b}");
}
// Użycie:
PrintSum(5, 7); // Suma: 12
5. Parametry-wartości i parametry-referencje
Parametry funkcji to zwykłe zmienne i obowiązują dla nich te same zasady, co dla innych zmiennych.
Pamiętaj więc: gdy przekazujesz do metody tablicę, przekazujesz referencję do tablicy, czyli metoda może zmienić zawartość tej tablicy. Dla prostych typów (int, double), przekazywana jest wartość.
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // Zmienia oryginalną tablicę!
}
// Użycie:
int[] a = {1, 2, 3, 4, 5};
ZeroFirstGrade(a);
Console.WriteLine(a[0]); //wypisze 0
W praktyce dzieje się tu coś takiego:
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // Zmienia oryginalną tablicę!
}
// Użycie:
int[] a = {1, 2, 3, 4, 5};
//ZeroFirstGrade(a);
int[] grades = a;
grades[0] = 0;
Console.WriteLine(a[0]); //wypisze 0
GO TO FULL VERSION