Գուիդո վան Ռոսում նախագիծը համայնքային քննարկման համար Python-ում նախշերի համապատասխանեցման օպերատորներ (համապատասխանություն և դեպք/պատկեր) իրականացնելու համար։ Պետք է նշել, որ նախշերի համապատասխանեցման օպերատորներ ավելացնելու առաջարկները արդեն հրապարակվել էին 2001 և 2006 թվականներին (, ), սակայն մերժվեցին՝ հօգուտ համապատասխան շղթաներ կառուցելու համար «եթե … էլիֆ … այլապես» կոնստրուկտի օպտիմալացման։
Նոր իրականացումը շատ նման է Scala-ի, Rust-ի և F#-ի կողմից տրամադրված համապատասխանության օպերատորին, որը համեմատում է նշված արտահայտության արդյունքը դեպքի վրա հիմնված բլոկներում թվարկված օրինաչափությունների ցանկի հետ: Ի տարբերություն C, Java և JavaScript լեզուներում առկա անջատիչի օպերատորի, համապատասխանության վրա հիմնված արտահայտությունները շատ ավելին են առաջարկում: Նշվում է, որ առաջարկվող օպերատորները կբարելավեն կոդի ընթեռնելիությունը, կպարզեցնեն կամայական Python օբյեկտների համեմատությունը և վրիպազերծումը, ինչպես նաև կբարձրացնեն կոդի հուսալիությունը՝ ընդլայնված հնարավորության շնորհիվ։ .
սահմանել http_error(կարգավիճակ):
խաղի կարգավիճակը՝
գործ 400:
վերադարձնել «Սխալ հարցում»
գործ 401|403|404:
վերադարձնել «Չի թույլատրվում»
գործ 418:
վերադարձնել «Ես թեյաման եմ»
դեպք _:
վերադարձնել «Ինչ-որ այլ բան»
Օրինակ, հնարավոր է բացել օբյեկտները, զույգերը, ցուցակները և կամայական հաջորդականությունները՝ առկա արժեքների հիման վրա փոփոխականներ կապելու համար: Հնարավոր է սահմանել ներդրված ձևանմուշներ, ձևանմուշում օգտագործել լրացուցիչ «եթե» պայմաններ, կիրառել դիմակներ («[x, y, *rest]»), կապել բանալի/արժեք զույգերը (օրինակ՝ {"bandwidth": b, "latency": l}՝ «bandwidth» և «latency» արժեքները և բառարանը արդյունահանելու համար), արդյունահանել ենթաձևանմուշներ («:=» օպերատորը) և օգտագործել անվանված հաստատուններ ձևանմուշում: Դասերում հնարավոր է հարմարեցնել համապատասխանության վարքագիծը՝ օգտագործելով «__match__()» մեթոդը:
տվյալների դասերից ներմուծել տվյալների դաս
@տվյալների դաս
Դասի կետ՝
x:int
y:int
որտեղ(կետ):
խաղի կետ՝
դեպքի կետ(0, 0):
տպել («Ծագում»)
դեպքի կետ(0, y):
տպել(f»Y={y}»)
դեպքի կետ(x, 0):
տպել(f»X={x}»)
դեպքի կետ():
տպել («Այլ տեղ»)
դեպք _:
տպել("Կետ չկա")
խաղի կետ՝
դեպքի կետ(x, y) եթե x == y:
տպել(f»Y=X {x}-ում»)
դեպքի կետ(x, y):
տպել(f"Ոչ անկյունագծի վրա")
Կարմիր, Կանաչ, Կապույտ = 0, 1, 2
համապատասխանության գույն՝
դեպք .RED:
տպել («Ես կարմիր եմ տեսնում!»)
պատյան .ԿԱՆԱՉ:
տպել («Խոտը կանաչ է»)
պատյան .ԿԱՊՈՒՅՏ
E:
տպել («Ես տխուր եմ :(»)
Վերանայման համար պատրաստվել է նյութերի մի շարք։ փորձարարական առաջարկվող սպեցիֆիկացիան, բայց վերջնական տարբերակը դեռևս . Օրինակ, «case _:» արտահայտության փոխարեն որպես լռելյայն արժեք օգտագործեք «else:» կամ «default:» բանալի բառը, քանի որ «_»-ն այլ համատեքստերում օգտագործվում է որպես ժամանակավոր փոփոխական: Բացի այդ, ներքին կազմակերպումը, որը հիմնված է նոր արտահայտությունները բայթկոդի թարգմանելու վրա, նման է «if ... elif ... else» կոնստրուկտների համար օգտագործվողին, հարցեր է առաջացնում, որոնք չեն ապահովի ցանկալի արդյունավետությունը համեմատությունների շատ մեծ հավաքածուներ մշակելիս:
Source: opennet.ru
