Гидо ван Россум
Амалисозии нав ба оператори "мутобиқшавӣ"-и дар Scala, Rust ва F# пешниҳодшуда хеле монанд аст, ки натиҷаи ифодаи мушаххасро бо рӯйхати намунаҳое, ки дар блокҳо дар асоси оператори "case" номбар шудаанд, муқоиса мекунад. Баръакси оператори "гузариш" дар C, Java ва JavaScript мавҷуд аст, ифодаҳои ба "мутобиқшавӣ" асосёфта хеле бештарро пешниҳод мекунанд
def http_error(status):
ҳолати мувофиқат:
парвандаи 400:
баргардонидани "Дархости бад"
парванда 401|403|404:
баргардонидани "Иҷозат дода намешавад"
парвандаи 418:
баргаштан "Ман чойник ҳастам"
парванда_:
баргардонидани "чизи дигар"
Масалан, шумо метавонед объектҳо, наворҳо, рӯйхатҳо ва пайдарпайии ихтиёриро кушоед, то тағирёбандаҳоро дар асоси арзишҳои мавҷуда пайваст кунед. Муайян кардани қолабҳои лона гузошташуда, истифодаи шартҳои иловагии “агар” дар қолаб, истифодаи ниқобҳо (“[x, y, *rest]”), харитасозии калидҳо/арзишҳо (масалан, {“барои фарохмаҷро”: b, “latency” иҷозат дода мешавад. ”: l} барои истихроҷи арзишҳо ва луғати "маҷрои фарохмаҷро" ва "таҳқирӣ"), зершаблонҳоро ҷудо кунед (":=" оператор), константаҳои номбаршударо дар қолаб истифода баред. Дар синфҳо, бо истифода аз усули "__match__()" рафтори мувофиқро танзим кардан мумкин аст.
аз маълумот синфҳои воридоти додаҳо
@dataclass
Нуқтаи синф:
x: int
y:int
def whereis (нуқта):
нуқтаи мувофиқат:
Нуктаи парванда(0, 0):
чоп («Пайдоман»)
Нуктаи парванда(0, y):
чоп (f"Y={y}")
Нуктаи ҳолат(x, 0):
чоп (f"X={x}")
case Point ():
чоп ("Дар ҷои дигар")
парванда_:
чоп ("Нуқта нест")
нуқтаи мувофиқат:
ҳолат Нуқта(x, y) агар x == y:
чоп (f"Y=X дар {x}")
Нуктаи парванда(x, y):
чоп (f"На дар диагонал")
СУРХ, САБЗ, КАБУД = 0, 1, 2
ранги мувофиқ:
парванда .RED:
чоп ("Ман сурх мебинам!")
парванда .САБЗ:
чоп ("Алаф сабз аст")
парванда .BLU
E:
чоп ("Ман блюзро ҳис мекунам :(")
Маҷмӯа барои баррасӣ омода шудааст
Манбаъ: opennet.ru