Python — замечательный язык, но его последнее дополнение заставляет некоторых программистов думать, что, возможно, он сбился с пути-хотя на самом деле это зависит от того, что вы думаете об этом пути. Сопоставление шаблонов — это функциональная программная конструкция, и Python лишь немного функциональен.
Важной, но не единственной частью функциональности является наличие системы типов. Сопоставление шаблонов, по сути, расширяет условные обозначения на тип теста, хотя это упрощение. В основном в функциональных языках, в недавнем прошлом основные многопарадигмальные языки, такие как C#, Rust и Swift, добавили сопоставление шаблонов, и теперь, похоже, Python присоединяется к клубу.
Что вас может удивить, так это то, что Python не является типизированным языком, и все же сопоставление шаблонов-это все о типе. В данном случае, однако, это, по-видимому, не является проблемой, поскольку сопоставление шаблонов является очень общим. Например, учебник по сопоставлению шаблонов Python дает:
команда соответствия.():
дело [«выйти»]:
печать(«До свидания!»)
quit_game()
дело [«смотри»]:
current_room.опишите()
case [«get», obj]:
character.get(obj, current_room)
case [«go», направление]:
current_room = current_room.neighbor(направление)
# Остальные ваши команды идут сюда
То есть command.split делит команду на слова, и оператор case совпадает на основе количества слов и того, что это за слова. Вы можете видеть, что это очень компактная нотация. Посмотрите на [«get»,obj], который соответствует только командам из двух слов и только в том случае, если первая «get» и передает вторую как obj.
Когда вы впервые видите его, это очень привлекательно. Он кажется питоническим в том смысле, что у него низкий фактор неожиданности — даже новичок поймет это. Однако все быстро становится намного сложнее. Вы можете использовать подстановочные знаки, несколько значений, защитные значения и так далее. Все это очень напоминает мне регулярные выражения — сначала они кажутся простыми и мощными, а в конечном итоге становятся сложными и загадочными. Я совсем не уверен, что сопоставление шаблонов действительно является питоническим в истинном смысле, но тогда Python допускает полные регулярные выражения без обучающих колес.
Если вы прочтете многомесячные обсуждения, которые были посвящены этому принятию, вы начнете понимать, что многие программисты придерживаются сильных взглядов по обе стороны баррикад. Есть много крайних случаев, которые не совсем убедительно исправлены, и Python вырос в большой язык, и могут быть взаимодействия, о которых мы не думали.
Лично я не думаю, что сопоставление шаблонов-это плохая вещь, которую можно добавить в Python, но я не могу сказать, что я бы спорил за это. Моя причина в том, что за годы написания Python он мне не понадобился, и я не думаю, что это сильно повлияло бы на читаемость моего кода. Это кажется несущественным с незначительными преимуществами. Однако он вписывается в жизненный цикл языка: сначала он маленький, компактный и привлекательный; затем он добавляет части, которых не хватало многим программистам; затем он добавляет остальное, включая кухонную раковину, и оседает в раздутой старости, ожидая, когда новый компактный и простой язык заменит его.
Майк Джеймс-автор книги Programmer’s Python: Everything-это объект, опубликованный издательством I/O Press как часть библиотеки I Programmer. С подзаголовком «Что-то совершенно другое» книга предназначена для тех, кто хочет понять более глубокую логику в подходе, который Python 3 применяет к классам и объектам.