Comments 12
switch
в других языках, таких как C или Java, выполняет простой матчинг значения переменной
Понимаю сленг, но по мне как то уж совсем... Раньше переводилось как переключатель.
Кто ж это умудрился то, переводить языковые конструкции (зарезервированные слова)?
Ааа. Не про то подумал.
Меня тоже коробит. Лучше либо писать без перевода: "pattern matching", либо "сопоставление шаблонов", а про слово "матчинг" забыть. А фраза "простой кейс матчинга" вообще убивает наповал: "кейс" используется то в значении "случай", то в значении "оператор case".
P.S. К слову, в C# оператор switch
тоже поддерживает pattern matching.
Покажите статью, где используется термин "переключатель"
Последний пример не очевиден. Ведь строка тоже в своём роде list. Но результат другой. Значит вначале сопоставляется тип, а затем данные?
Строка - это все же не list, а другой, тоже итерируемый, тип, а синтаксис [...] относится именно к спискам как к конкретному типу. Другое дело - что сам по себе синтаксис этого switch-а как-то неочевиден, по приведенным примерам больше напрашивается в голове что-то такое:
y = (1, 2, 3, 4)
for thing in [[1,2,3,4],['a','b','c'],"this won't be matched"]:
match thing:
case [*y]: # совпадение для [1, 2, 3, 4]
...
Однако имейте в виду, что 3.10 еще только бета-версия, и хотя примеры, которые я показал выше, работают отлично, вам не следует использовать Python 3.10 со всей серьезностью до его официального релиза.
3.10.4 передает привет.
К утверждению о switch на стероидах: самые лучшие match / switch из тех, что я видел были и остаются в Rust. Может в каком-нибудь функциональном языке есть что по приятнее, но с ними пока не знаком
самые лучшие match / switch из тех, что я видел были и остаются в Rust.
Не особо, без box patterns по деревьям матчиться неудобно.
Может в каком-нибудь функциональном языке есть что по приятнее
Есть как минимум в Haskell, отчасти из-за view patterns, отчасти из-за возможности написать одно и то же имя в шаблоне дважды, что будет означать повтор одного и того же значения.
Матчинг шаблона в Python 3.10