Pull to refresh

Comments 12

switch в других языках, таких как C или Java, выполняет простой матчинг значения переменной

Понимаю сленг, но по мне как то уж совсем... Раньше переводилось как переключатель.

Кто ж это умудрился то, переводить языковые конструкции (зарезервированные слова)?

Ааа. Не про то подумал.

Меня тоже коробит. Лучше либо писать без перевода: "pattern matching", либо "сопоставление шаблонов", а про слово "матчинг" забыть. А фраза "простой кейс матчинга" вообще убивает наповал: "кейс" используется то в значении "случай", то в значении "оператор case".

P.S. К слову, в C# оператор switch тоже поддерживает pattern matching.

"Сопоставление с образцом" же

Подходит? Б. Керниган, Д. Ритчи // Язык программирования Си, Глава 3.4 Переключатель switch

Ну вроде там используется термин "переключатель switch", а не "переводится как переключатель"

Последний пример не очевиден. Ведь строка тоже в своём роде 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, отчасти из-за возможности написать одно и то же имя в шаблоне дважды, что будет означать повтор одного и того же значения.

Sign up to leave a comment.