Guido van Rossum نے Python میں پیٹرن میچنگ آپریٹرز کو شامل کرنے کی تجویز پیش کی۔

گائیڈو وین روسم متعارف کرایا کمیونٹی کے جائزے کے لیے مسودہ وضاحتیں Python میں پیٹرن میچنگ آپریٹرز (میچ اور کیس) کو لاگو کرنے کے لیے۔ واضح رہے کہ پیٹرن میچنگ آپریٹرز کو شامل کرنے کی تجاویز پہلے ہی 2001 اور 2006 میں شائع ہو چکی ہیں۔pep-0275, pep-3103)، لیکن مماثل زنجیروں کو مرتب کرنے کے لیے "if... elif ... else" کی تعمیر کو بہتر بنانے کے حق میں مسترد کر دیا گیا۔

نیا نفاذ اسکالا، رسٹ، اور F# میں فراہم کردہ "میچ" آپریٹر کی طرح ہے، جو "کیس" آپریٹر کی بنیاد پر بلاکس میں درج نمونوں کی فہرست کے ساتھ مخصوص اظہار کے نتیجے کا موازنہ کرتا ہے۔ سی، جاوا، اور جاوا اسکرپٹ میں دستیاب "سوئچ" آپریٹر کے برعکس، "میچ" پر مبنی تاثرات بہت کچھ پیش کرتے ہیں۔ وسیع فعالیت. یہ نوٹ کیا جاتا ہے کہ مجوزہ آپریٹرز کوڈ کی پڑھنے کی اہلیت کو بہتر بنائیں گے، صوابدیدی Python اشیاء اور ڈیبگنگ کے موازنہ کو آسان بنائیں گے، اور توسیع کے امکان کی بدولت کوڈ کی وشوسنییتا میں بھی اضافہ کریں گے۔ جامد قسم کی جانچ.

def http_error(status):
میچ کی حیثیت:
کیس 400:
واپس "خراب درخواست"
کیس 401|403|404:
واپسی "اجازت نہیں ہے"
کیس 418:
واپسی "میں ایک چائے والا ہوں"
معاملہ_:
"کچھ اور" واپس کریں

مثال کے طور پر، آپ موجودہ اقدار کی بنیاد پر متغیرات کو باندھنے کے لیے اشیاء، ٹیپلز، فہرستوں اور صوابدیدی ترتیب کو کھول سکتے ہیں۔ اسے نیسٹڈ ٹیمپلیٹس کی وضاحت کرنے، ٹیمپلیٹ میں اضافی "اگر" شرائط استعمال کرنے، ماسک استعمال کرنے کی اجازت ہے ("[x, y, *Rest]")، کلید/ویلیو میپنگ (مثال کے طور پر، {"bandwidth": b، "lateency ": l} "بینڈوڈتھ" اور "لیٹنسی" کی اقدار اور لغت نکالنے کے لیے، ذیلی ٹیمپلیٹس کو نکالیں (":=" آپریٹر)، ٹیمپلیٹ میں نامزد مستقل استعمال کریں۔ کلاسوں میں، "__match__()" طریقہ استعمال کرتے ہوئے مماثل رویے کو اپنی مرضی کے مطابق بنانا ممکن ہے۔

ڈیٹاکلاس سے ڈیٹاکلاس درآمد کریں۔

@dataclass
کلاس پوائنٹ:
x:int
y:int

def whereis(نقطہ):
میچ پوائنٹ:
کیس پوائنٹ (0، 0):
پرنٹ ("اصل")
کیس پوائنٹ(0، y):
پرنٹ (f"Y={y}")
کیس پوائنٹ (x, 0):
پرنٹ (f"X={x}")
کیس پوائنٹ ():
پرنٹ ("کہیں اور")
معاملہ_:
پرنٹ ("ایک نقطہ نہیں")

میچ پوائنٹ:
کیس پوائنٹ(x, y) اگر x == y:
پرنٹ کریں (f"Y=X at {x}")
کیس پوائنٹ (x، y):
پرنٹ (f"اختر پر نہیں")

سرخ، سبز، نیلا = 0، 1، 2
میچ رنگ:
کیس .RED:
پرنٹ ("میں سرخ دیکھ رہا ہوں!")
کیس .گرین:
پرنٹ ("گھاس سبز ہے")
کیس .BLU
E:
پرنٹ ("میں بلیوز محسوس کر رہا ہوں :(")

جائزہ کے لیے ایک سیٹ تیار کر لیا گیا ہے۔ پیچ تجرباتی کے ساتھ عمل درآمد تجویز کردہ تفصیلات، لیکن حتمی ورژن اب بھی ہے بحث کی. مثال کے طور پر پیشکش کی پہلے سے طے شدہ قدر کے لیے "case _:" کے اظہار کے بجائے، کلیدی لفظ "else:" یا "default:" استعمال کریں، کیونکہ دوسرے سیاق و سباق میں "_" کو عارضی متغیر کے طور پر استعمال کیا جاتا ہے۔ داخلی تنظیم بھی قابل اعتراض ہے، جو نئے تاثرات کو بائٹ کوڈ میں ترجمہ کرنے پر مبنی ہے جیسا کہ "if ... elif ... else" کے لیے استعمال کیا جاتا ہے، جو موازنہ کے بہت بڑے سیٹوں پر کارروائی کرتے وقت مطلوبہ کارکردگی فراہم نہیں کرے گا۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں