Rada sterująca Pythona zaakceptowała kontrowersyjną propozycję dodania do tego języka tzw. pattern matchingu.
Zmiana rewolucyjna?
Decyzja co do tego jak powinno się wyszukiwać w Pythonie była trudna. Najlepiej opisuje to wpis na liście mailingowej LWN.net:
Zdajemy sobie sprawę, że pattern matching jest rozległą zmianą w Pythonie i że osiągnięcie konsensusu w całej społeczności jest prawie niemożliwe. Różni ludzie mają zastrzeżenia lub obawy dotyczące różnych aspektów semantyki i składni (podobnie zresztą jak sama Rada Sterująca). W rezultacie, po długich rozważaniach, przejrzeniu wszystkich rozmów dotyczących PEP, a także konkurencyjnych propozycji i istniejących wyników ankiet oraz po kilku osobistych dyskusjach z autorami PEP, jesteśmy przekonani, że dopasowywanie wzorców określone w PEP 634 będzie wspaniałym dodatkiem do języka Python.
Zdecydowano się więc zaakceptować PEP 634 i towarzyszące mu PEP 635 i 636, zbiorczo znane jako Pattern Matching PEPs. Trzeba przyznać, że dopasowywanie po wzorcach to znacząca zmiana w Pythonie a osiągnięcie konsensusu trwało długo.
Prace wdrażające dopiero przed twórcami języka
Rada Sterująca podkreśla, że zdaje sobie sprawę, że tak dużej i istotnej, nowej funkcji, musi towarzyszyć obszerna dokumentacja i specyfikacja, także w sekcji samouczka dokumentacji. Taka wysokojakościowa dokumentacja musi być, zdaniem rady, wprowadzona jeszcze w pierwszym wydaniu Pythona 3.10. Nieopracowanie dokumentacji dla tej wersji języka byłoby, jak to określono, blokerem tego wydania. A, że Python będzie miał własną dokumentację dla wybranego PEP jest pewne – w wiadomości rady wyraźnie zastrzeżono, że nie uważa ona aby dokumentacja PEP lub jakakolwiek zewnętrzna dokumentacja była wystarczająca.
Zmiany dalej możliwe
Decyzja oznacza odrzucenie PEP 640 i 642. Oba wzorce otrzymały w ocenie rady niewielkie wsparcie ze strony swoich głównych programistów. Proponowana składnia PEP 642 nie wydawała się też właściwym sposobem na rozwiązanie problemu „postrzępionych krawędzi” (jagged edges) w składni PEP 634.
Natomiast decyzja nie skutkuje jakimś zamrożeniem implementacji PEP 634. Wręcz przeciwnie, zaproszono wszystkich do tego aby przekazywać zmiany w PEP 634 (nawet PEP 640 i 642, jeśli mają zacząć zyskiwać poparcie). Można to robić za pomocą zwykłych kanałów komunikacji, tj. głównie w formie dyskusji w python-dev
lub na serwerze discuss.python.org. Następnie będzie miało miejsce formalne przedłożenie propozycji Radzie Sterującej do rozważenia. Ale uwaga: zostanie wzięte pod uwagę to aby zmiany niekompatybilne wstecznie były dokonywane tylko przed zamrożeniem funkcji w Pythonie 3.10.
Sprawdź oferty pracy na TeamQuest
Skutki
Wprowadzone zmiany oznaczają rewolucję. Doprowadzi to bowiem do wprowadzenia instrukcji match
w przyszłej wersji Pythona, którą można uznać za znacznie bardziej zaawansowaną wersję instrukcji switch
, dostępnej w niemal wszystkichtradycyjnych językach programowania. Podczas procesu dopasowywania wzorców wartość wejściowego łańcucha zostanie dopasowana do określonych wzorców. Przykład zamieszczamy poniżej:
match json_shape:
case {„type”: „square”, „sides”: sides, „color”: color}:
return Square(sides, color)
case {„type”: „triangle”, „sides”: sides}:
return Triangle(sides)
case _:
raise ValueError(„Not a supported shape”)