Krotki

VarrComodoo

Zastosowanie

Czasami w kodzie występuje parę zmiennych ściśle ze sobą powiązanych, nad którymi potrzebujemy pracować jednocześnie (traktować je jako grupę). Przykład:

enum Plec
        {
            Kobieta,
            Mezczyzna
        }

        static void Main(string[] args)
        {
            string Imie = "Jan";
            string Nazwisko = "Kowalski";
            int RokUrodzenia = 1939;
            Plec plec = Plec.Mezczyzna;

            Console.WriteLine($"Dane osoby: \r\n" +
                $"Imie: {Imie}\r\n" +
                $"Nazwisko: {Nazwisko}\r\n" +
                $"Rok urodzenia: {RokUrodzenia}\r\n" +
                $"Plec: {plec.ToString()}\r\n");
            Console.ReadLine();
        }

Załóżmy że potrzebujemy pracować nad tymi danymi w ściśle związany sposób, np. przesyłać komplet tych danych do metody, spójnie obrabiać je w metodzie, np. edytować je naraz, i zwracać wynik wszystkich 4 zaktualizowanych danych:

Obecnie jest parę sposobów na zrobienie tego:
• Jeżeli wszystkie powiązane zmienne są tego samego typu to możemy zastosować jakąś tablice, listę itp.
• Jeżeli wszystkie powiązane zmienne są różnych typów możemy je zgrupować w klasie i odwoływać się do nich przez obiekt typu tej klasy
• Druga opcja to zamiast w klasie grupować je w strukturze
• Można je wszystkie przekazywać do metod z parametrem ‘ref’ lub ‘out’ i przez to zwracać większą liczbę zmiennych z jednej metody
• Dużo mniej poprawna /może lepiej pasuje określenie „patologiczna”/ możliwość to połączyć je w jeden łańcuch string i potem „wyłuskiwać” je z łańcucha, konwertować na właściwe typy, obrabiać i znów budować łańcuch żeby jako jeden string zwracać go z metody – to raczej w życiu niedopuszczalna możliwość ale na upartego da się.

##Sposób definiowania i korzystania

Od wersji C# 7.0 można te powiązane dane zgrupować w krótki, jako jedną krotke przekazywać do metody i jako jedna krotkę zwracać z metody:
Przykłady jak można korzystać z krotek /tworzyć je i z nich korzystać/:

  • Przyklad 1
    przypisywanie krotki do osobno deklarowanych zmiennych
            (string Imie, string Nazwisko, int RokUrodzenia, Plec plec) = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);

            Console.WriteLine(
            $"Dane osoby: \r\n" +
            $"Imie: {Imie}\r\n" +
            $"Nazwisko: {Nazwisko}\r\n" +
            $"Rok urodzenia: {RokUrodzenia}\r\n" +
            $"Plec: {plec.ToString()}\r\n");
  • Przyklad 2
    przypisywanie krotki do wczesniej, osobno zadeklarowanych zmiennych
            string Imie = "Jan";
            string Nazwisko = "Kowalski";
            int RokUrodzenia = 1939;
            Plec plec = Plec.Mezczyzna;

            (Imie, Nazwisko, RokUrodzenia, plec) = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);

            Console.WriteLine(
            $"Dane osoby: \r\n" +
            $"Imie: {Imie}\r\n" +
            $"Nazwisko: {Nazwisko}\r\n" +
            $"Rok urodzenia: {RokUrodzenia}\r\n" +
            $"Plec: {plec.ToString()}\r\n");
  • Przyklad 3:
    przypisywanie elementów krotki do deklarowanych zmiennych z niejawnym typem
            (var Imie, var Nazwisko, var RokUrodzenia, var plec) = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);

            Console.WriteLine(
            $"Dane osoby: \r\n" +
            $"Imie: {Imie}\r\n" +
            $"Nazwisko: {Nazwisko}\r\n" +
            $"Rok urodzenia: {RokUrodzenia}\r\n" +
            $"Plec: {plec.ToString()}\r\n");
  • Przyklad 4
    przypisywanie krotki do osobno deklarowanych zmiennych
    z niejawnie okreslonym typem wszystkich zmiennych
            var (Imie, Nazwisko, RokUrodzenia, plec) = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);

            Console.WriteLine(
            $"Dane osoby: \r\n" +
            $"Imie: {Imie}\r\n" +
            $"Nazwisko: {Nazwisko}\r\n" +
            $"Rok urodzenia: {RokUrodzenia}\r\n" +
            $"Plec: {plec.ToString()}\r\n");
  • Przyklad 5:
    deklarowanie nazwanej krotki, przypisanie jej wartosci i dostep do elementow na podstawie nazw
            (string Imie, string Nazwisko, int RokUrodzenia, Plec plec) daneOsobnika = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);

            Console.WriteLine(
            $"Dane osoby: \r\n" +
            $"Imie: {daneOsobnika.Imie}\r\n" +
            $"Nazwisko: {daneOsobnika.Nazwisko}\r\n" +
            $"Rok urodzenia: {daneOsobnika.RokUrodzenia}\r\n" +
            $"Plec: {daneOsobnika.plec.ToString()}\r\n");
  • Przyklad 6
    przypisywanie krotki do zmiennej o niejawnym typie
    dostep do elementow krotki na podstawie nazw
            var daneOsobnika =
                (Imie: "Jan", Nazwisko: "Kowalski", RokUrodzenia: 1939, plec: Plec.Mezczyzna);

            Console.WriteLine(
            $"Dane osoby: \r\n" +
            $"Imie: {daneOsobnika.Imie}\r\n" +
            $"Nazwisko: {daneOsobnika.Nazwisko}\r\n" +
            $"Rok urodzenia: {daneOsobnika.RokUrodzenia}\r\n" +
            $"Plec: {daneOsobnika.plec.ToString()}\r\n");
  • Przyklad 7
    przypisanie krotki bez nazw do jednej zmiennej o niejawnym typie,
    dostep do elementów krotki na podstawie numerowanych wlasciwosci //podpowiada IntelliSense
            var daneOsobnika =
                ("Jan", "Kowalski", 1939, Plec.Mezczyzna);

            Console.WriteLine(
            $"Dane osoby: \r\n" +
            $"Imie: {daneOsobnika.Item1}\r\n" +
            $"Nazwisko: {daneOsobnika.Item2}\r\n" +
            $"Rok urodzenia: {daneOsobnika.Item3}\r\n" +
            $"Plec: {daneOsobnika.Item4}\r\n");
  • Przyklad 8
    przypisanie krotki z nazwami do jednej zmiennej o niejawnym typie,
    dostep do elementów krotki na podstawie numerowanych wlasciwosci //podpowiada IntelliSense
            var daneOsobnika =
                (Imie: "Jan", Nazwisko: "Kowalski", RokUrodzenia: 1939, plec: Plec.Mezczyzna);

            Console.WriteLine(
            $"Dane osoby: \r\n" +
            $"Imie: {daneOsobnika.Item1}\r\n" +
            $"Nazwisko: {daneOsobnika.Item2}\r\n" +
            $"Rok urodzenia: {daneOsobnika.Item3}\r\n" +
            $"Plec: {daneOsobnika.Item4}\r\n");
  • Przyklad 9
    nazwy krotek wywnioskowane na podstawie nazw zmiennych
            string Imie = "Jan";
            string Nazwisko = "Kowalski";
            int RokUrodzenia = 1939;
            Plec plec = Plec.Mezczyzna;

            var daneOsobnika = (Imie, Nazwisko, RokUrodzenia, plec);
            Console.WriteLine(
            $"Dane osoby: \r\n" +
            $"Imie: {daneOsobnika.Imie}\r\n" +
            $"Nazwisko: {daneOsobnika.Nazwisko}\r\n" +
            $"Rok urodzenia: {daneOsobnika.RokUrodzenia}\r\n" +
            $"Plec: {daneOsobnika.plec.ToString()}\r\n");

0 komentarzy