Instrukcja match/case - wkraczamy na wyższy poziom

Instrukcja match/case pozwala na zdefiniowanie zmiennych lokalnych, które będą dopasowywane do argumentu. Do tych zmiennych lokalnych możemy się odwołać w zasięgu pojedynczej klauzuli case. Co więcej, możemy doprecyzować, kiedy ma się do tych zmiennych wpasować, stosując polecenie if.

Przeanalizujmy następujący program:

Linia 1. def wypisz podkreślnik informacje otwórz nawias okrągły punkt przecinek dziedzina podkreślnik x znak równości otwórz nawias okrągły minus 9 przecinek minus 1 zamknij nawias okrągły przecinek dziedzina podkreślnik y znak równości otwórz nawias okrągły minus 4 przecinek minus 1 zamknij nawias okrągły zamknij nawias okrągły dwukropek. Linia 2. x1 przecinek x2 znak równości dziedzina podkreślnik x. Linia 3. y1 przecinek y2 znak równości dziedzina podkreślnik y. Linia 5. match punkt dwukropek. Linia 6. case otwórz nawias okrągły x przecinek y zamknij nawias okrągły if x1 otwórz nawias ostrokątny x otwórz nawias ostrokątny x2 and y1 otwórz nawias ostrokątny y otwórz nawias ostrokątny y2 dwukropek. Linia 7. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów należy do rozważanej dziedziny cudzysłów zamknij nawias okrągły. Linia 8. case otwórz nawias okrągły 0 przecinek 0 zamknij nawias okrągły dwukropek. Linia 9. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów nie należy do dziedziny przecinek ale jest położony w środku układu współrzędnych cudzysłów zamknij nawias okrągły. Linia 10. case otwórz nawias okrągły x przecinek 0 zamknij nawias okrągły dwukropek. Linia 11. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów nie należy do dziedziny przecinek ale jest położony na osi odciętych cudzysłów zamknij nawias okrągły. Linia 12. case otwórz nawias okrągły 0 przecinek y zamknij nawias okrągły dwukropek. Linia 13. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów nie należy do dziedziny przecinek ale jest położony na osi rzędnych cudzysłów zamknij nawias okrągły. Linia 14. case otwórz nawias okrągły podkreślnik przecinek podkreślnik zamknij nawias okrągły dwukropek. Linia 15. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów nie należy do dziedziny cudzysłów zamknij nawias okrągły.

Funkcja wypisz_informacje przyjmuje trzy parametry: punkt, dziedzina_x, dziedzina_y. Dwa ostatnie mają podane wartości domyślne. Jeśli przy wywoływaniu funkcji do argumentów nie zostaną przekazane nowe wartości, funkcja zostanie wywołana z wartościami domyślnymi.

Widać to przy wywołaniach funkcji – funkcja wypisz_informacje wywoływana jest z jednym argumentem (dwa pozostałe mają przypisane wartości domyślne).

Wartości przekazane do funkcji są krotkami.

W programie definiujemy pewną dziedzinę, która ograniczona jest podanymi wartościami. Zwizualizujmy ją.

RBz8IEkoVJ81A1

Moglibyśmy zdefiniować dwa główne przypadki:

  • Punkt należy do rozważanej dziedziny.

  • Punkt nie należy do rozważanej dziedziny.

Jeśli punkt miałby należeć do dziedziny, wartość współrzędnej x musiałaby mieścić się w następującym przedziale [-9, -1], a wartość współrzędnej y musiałaby zawierać się w następującym przedziale [-4, -1]:

Linia 1. case otwórz nawias okrągły x przecinek y zamknij nawias okrągły if x1 otwórz nawias ostrokątny x otwórz nawias ostrokątny x2 and y1 otwórz nawias ostrokątny y otwórz nawias ostrokątny y2 dwukropek.

Gdyby punkt nie znajdował się w tym przedziale, nie należałby do dziedziny:

Linia 1. case otwórz nawias okrągły x przecinek y zamknij nawias okrągły if not otwórz nawias okrągły x1 otwórz nawias ostrokątny x otwórz nawias ostrokątny x2 and y1 otwórz nawias ostrokątny y otwórz nawias ostrokątny y2 zamknij nawias okrągły dwukropek.

Jednak to niejedyny przypadek, jaki możemy zdefiniować. Pozostałe:

  • Punkt leży na osi rzędnych.

  • Punkt leży na osi odciętych.

  • Punkt leży w środku układu współrzędnych.

Jeśli punkt miałby leżeć na osi rzędnych, jego pierwsza współrzędna musiałaby wynosić 0.

Linia 1. case otwórz nawias okrągły 0 przecinek y zamknij nawias okrągły dwukropek.

Jeśli punkt miałby leżeć na osi odciętych, jego druga współrzędna musiałaby wynosić 0.

Linia 1. case otwórz nawias okrągły x przecinek 0 zamknij nawias okrągły dwukropek.

Jeśli punkt miałby leżeć w środku układu współrzędnych, obie jego współrzędne musiałyby wynosić 0.

Linia 1. case otwórz nawias okrągły 0 przecinek 0 zamknij nawias okrągły dwukropek.

Wiemy, że w przypadku instrukcji match/case program kończy działanie instrukcji, kiedy zostanie spełniony pierwszy warunek. Musimy zatem odpowiednio zaplanować ułożenie warunków.

Zacznijmy od sprawdzenia, czy punkt należy do dziedziny. Zatem to ten warunek zostanie zapisany jako pierwszy.

Następnie sprawdźmy, czy punkt leży w środku układu współrzędnych, na rzędnej lub odciętej. Zapiszmy kolejne warunki.

Warto pamiętać, że trzy wspomniane wcześniej przypadki odnoszą się do sytuacji, w której punkt nie należy do dziedziny, ale za to leży na osi współrzędnych. To rozróżnienie również powinno znaleźć się w komunikatach wyświetlanych przez program.

Sprawdziliśmy kilka konkretnych przypadków. Weźmy jednak pod uwagę również taką sytuację, w której punkt nie należy do dziedziny, nie leży w środku układu współrzędnych ani na żadnej osi.

Linia 1. def wypisz podkreślnik informacje otwórz nawias okrągły punkt przecinek dziedzina podkreślnik x znak równości otwórz nawias okrągły minus 9 przecinek minus 1 zamknij nawias okrągły przecinek dziedzina podkreślnik y znak równości otwórz nawias okrągły minus 4 przecinek minus 1 zamknij nawias okrągły zamknij nawias okrągły dwukropek. Linia 2. x1 przecinek x2 znak równości dziedzina podkreślnik x. Linia 3. y1 przecinek y2 znak równości dziedzina podkreślnik y. Linia 5. match punkt dwukropek. Linia 6. case otwórz nawias okrągły x przecinek y zamknij nawias okrągły if x1 otwórz nawias ostrokątny x otwórz nawias ostrokątny x2 and y1 otwórz nawias ostrokątny y otwórz nawias ostrokątny y2 dwukropek. Linia 7. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów należy do rozważanej dziedziny cudzysłów zamknij nawias okrągły. Linia 8. case otwórz nawias okrągły 0 przecinek 0 zamknij nawias okrągły dwukropek. Linia 9. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów nie należy do dziedziny przecinek ale jest położony w środku układu współrzędnych cudzysłów zamknij nawias okrągły. Linia 10. case otwórz nawias okrągły x przecinek 0 zamknij nawias okrągły dwukropek. Linia 11. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów nie należy do dziedziny przecinek ale jest położony na osi odciętych cudzysłów zamknij nawias okrągły. Linia 12. case otwórz nawias okrągły 0 przecinek y zamknij nawias okrągły dwukropek. Linia 13. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów nie należy do dziedziny przecinek ale jest położony na osi rzędnych cudzysłów zamknij nawias okrągły. Linia 14. case otwórz nawias okrągły podkreślnik przecinek podkreślnik zamknij nawias okrągły dwukropek. Linia 15. print otwórz nawias okrągły cudzysłów Punkt dwukropek cudzysłów przecinek punkt przecinek cudzysłów nie należy do dziedziny cudzysłów zamknij nawias okrągły.

Przetestujmy działanie programu dla następujących punktów:

Linia 1. minus 5 przecinek minus 3. Linia 2. minus 12 przecinek 2. Linia 3. 0 przecinek 0. Linia 4. 3 przecinek 0. Linia 5. 0 przecinek 2.

Nanieśmy je na wizualizację:

RmRhWoWguthHB1

Wywołajmy funkcję z nimi jako argumentami:

Linia 1. wypisz podkreślnik informacje otwórz nawias okrągły otwórz nawias okrągły minus 5 przecinek minus 3 zamknij nawias okrągły zamknij nawias okrągły. Linia 2. wypisz podkreślnik informacje otwórz nawias okrągły otwórz nawias okrągły minus 12 przecinek 2 zamknij nawias okrągły zamknij nawias okrągły. Linia 3. wypisz podkreślnik informacje otwórz nawias okrągły otwórz nawias okrągły 0 przecinek 0 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. wypisz podkreślnik informacje otwórz nawias okrągły otwórz nawias okrągły 3 przecinek 0 zamknij nawias okrągły zamknij nawias okrągły. Linia 5. wypisz podkreślnik informacje otwórz nawias okrągły otwórz nawias okrągły 0 przecinek 2 zamknij nawias okrągły zamknij nawias okrągły.

Wynik programu:

Linia 1. Punkt dwukropek otwórz nawias okrągły minus 5 przecinek minus 3 zamknij nawias okrągły należy do rozważanej dziedziny. Linia 2. Punkt dwukropek otwórz nawias okrągły minus 12 przecinek 2 zamknij nawias okrągły nie należy do dziedziny. Linia 3. Punkt dwukropek otwórz nawias okrągły 0 przecinek 0 zamknij nawias okrągły nie należy do dziedziny przecinek ale jest położony w środku układu współrzędnych. Linia 4. Punkt dwukropek otwórz nawias okrągły 3 przecinek 0 zamknij nawias okrągły nie należy do dziedziny przecinek ale jest położony na osi odciętych. Linia 5. Punkt dwukropek otwórz nawias okrągły 0 przecinek 2 zamknij nawias okrągły nie należy do dziedziny przecinek ale jest położony na osi rzędnych.
Polecenie 1

Porównaj wynik programu z wizualizacją.