253 ریڈنگز

Refactoring 025 - معمولی بیانات کو تقسیم کریں

کی طرف سے Maximiliano Contieri5m2025/03/31
Read on Terminal Reader

بہت لمبا؛ پڑھنے کے لئے

آپ ایک پیچیدہ تصدیق رجیکس کو چھوٹے حصوں میں تقسیم کرسکتے ہیں تاکہ ہر حصے کو انفرادی طور پر ٹیسٹ کیا جاسکے۔
featured image - Refactoring 025 - معمولی بیانات کو تقسیم کریں
Maximiliano Contieri HackerNoon profile picture
0-item

باقاعدہ اظہار کو قابل جانچ اور قابل فہم بنائیں

TL؛ DR: آپ ہر حصے کو انفرادی طور پر جانچنے اور درست غلطیوں کی اطلاع دینے کے لیے ایک پیچیدہ توثیق ریجیکس کو چھوٹے حصوں میں توڑ سکتے ہیں۔

مسائل کا حل 😔

متعلقہ کوڈ خوشبو 💨

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxvii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xx-we-have-reached-100

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ix-7rr33ol

اقدامات 👣

  1. اس کے منطقی اجزاء کی شناخت کے لیے ریجیکس کا تجزیہ کریں۔
  2. ریجیکس کو ہر جزو کے لیے چھوٹے، نام والے ذیلی نمونوں میں توڑ دیں۔
  3. ہر ذیلی پیٹرن کے لیے یونٹ ٹیسٹ لکھیں تاکہ یہ یقینی بنایا جا سکے کہ یہ صحیح طریقے سے کام کرتا ہے۔
  4. آزمائشی ذیلی نمونوں کو مکمل توثیق کی منطق میں یکجا کریں۔
  5. ہر ناکام ہونے والے حصے کے لیے واضح غلطی کے پیغامات فراہم کرنے کے لیے کوڈ کو ریفیکٹر کریں۔

نمونہ کوڈ 💻

اس سے پہلے 🚨

 function validateURL(url) { const urlRegex = /^(https?:\/\/)([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/.*)?$/; // Criptic and untesteable return urlRegex.test(url); }

👉 کے بعد

 // Step 1: Define individual regex components const protocolPattern = /^(https?:\/\/)/; const domainPattern = /^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; const pathPattern = /^\/.*$/; // Step 2: Write unit tests for each component describe("Protocol Validation", () => { test("should pass for http://", () => { expect(protocolPattern.test("http://")).toBe(true); }); test("should pass for https://", () => { expect(protocolPattern.test("https://")).toBe(true); }); test("should fail for invalid protocols", () => { expect(protocolPattern.test("ftp://")).toBe(false); }); }); describe("Domain Validation", () => { test("should pass for valid domains", () => { expect(domainPattern.test("example.com")).toBe(true); expect(domainPattern.test("sub.domain.org")).toBe(true); }); test("should fail for invalid domains", () => { expect(domainPattern.test("example")).toBe(false); expect(domainPattern.test("domain..com")).toBe(false); }); }); describe("Path Validation", () => { test("should pass for valid paths", () => { expect(pathPattern.test("/path/to/resource")).toBe(true); expect(pathPattern.test("/")).toBe(true); }); test("should fail for invalid paths", () => { expect(pathPattern.test("path/to/resource")).toBe(false); expect(pathPattern.test("")).toBe(false); }); }); // Step 3: Validate each part and report errors function validateURL(url) { if (!protocolPattern.test(url)) { throw new Error("Invalid protocol. Use http:// or https://."); } const domainStartIndex = url.indexOf("://") + 3; const domainEndIndex = url.indexOf("/", domainStartIndex); const domain = domainEndIndex === -1 ? url.slice(domainStartIndex) : url.slice(domainStartIndex, domainEndIndex); if (!domainPattern.test(domain)) { throw new Error("Invalid domain name."); } const path = url.slice(domainEndIndex); if (path && !pathPattern.test(path)) { throw new Error("Invalid path."); } return true; } // Step 4: Add integration tests for the full URL validation describe("Full URL Validation", () => { test("should pass for valid URLs", () => { expect(validateURL("https://lesluthiers.com/tour/")).toBe(true); expect(validateURL("https://bio.lesluthiers.org/")).toBe(true); }); test("should fail for invalid URLs", () => { expect(() => validateURL("ftp://mastropiero.com")). toThrow("Invalid protocol"); expect(() => validateURL("http://estherpsicore..com")). toThrow("Invalid domain name"); expect(() => validateURL("http://book.warren-sanchez")). toThrow("Invalid path"); }); });

ٹائپ کریں 📝

  • [x] نیم خودکار

حفاظت 🛡️

یہ ری فیکٹرنگ محفوظ ہے اگر آپ احتیاط سے اقدامات پر عمل کریں۔

ہر جزو کی جانچ اس بات کو یقینی بناتی ہے کہ آپ غلطیوں کو جلد پکڑ لیں۔

ضابطہ کیوں بہتر ہے؟ ✨

ریفیکٹرڈ کوڈ بہتر ہے کیونکہ یہ پڑھنے کی اہلیت، برقرار رکھنے اور جانچ کی اہلیت کو بہتر بناتا ہے۔

ریجیکس کو چھوٹے حصوں میں تقسیم کرنے سے یہ سمجھنا آسان ہوجاتا ہے کہ ہر حصہ کیا کرتا ہے۔

توثیق ناکام ہونے پر آپ مخصوص خامیوں کی اطلاع بھی دے سکتے ہیں، جس سے صارفین کو ان کے ان پٹ کو ٹھیک کرنے میں مدد ملتی ہے۔

یہ ٹیسٹ سے چلنے والی ڈیولپمنٹ تکنیک کو لاگو کرنے کا بھی ایک بہترین موقع ہے، نئے ذیلی حصوں کو متعارف کراتے ہوئے آہستہ آہستہ پیچیدگی میں اضافہ ہوتا ہے۔

یہ Bijection کو کیسے بہتر بناتا ہے؟ 🗺️

ریجیکس کو چھوٹے، معنی خیز اجزاء میں تقسیم کرکے، آپ حقیقی دنیا کے تقاضوں (مثال کے طور پر، "یو آر ایل کا ایک درست پروٹوکول ہونا چاہیے") اور کوڈ کے درمیان ایک قریبی نقشہ تیار کرتے ہیں۔

یہ ابہام کو کم کرتا ہے اور اس بات کو یقینی بناتا ہے کہ کوڈ مسئلے کے ڈومین کی درست عکاسی کرتا ہے۔

حدود ⚠️

یہ نقطہ نظر بہت آسان ریجیکس پیٹرن کے لیے کچھ اوور ہیڈ کا اضافہ کر سکتا ہے جہاں انہیں توڑنا غیر ضروری ہوگا۔

AI کے ساتھ ریفیکٹر 🤖

آپ ریجیکس اجزاء کی شناخت میں مدد کے لیے AI ٹولز استعمال کر سکتے ہیں۔

AI سے پوچھیں کہ وہ وضاحت کرے کہ regex کا ہر حصہ کیا کرتا ہے، پھر اسے چھوٹے، قابل آزمائش ٹکڑوں میں تقسیم کرنے میں آپ کی رہنمائی کریں۔ مثال کے طور پر، آپ پوچھ سکتے ہیں، "یہ ریجیکس کیا کرتا ہے؟" اور اس کی پیروی کریں، "میں اسے چھوٹے حصوں میں کیسے تقسیم کر سکتا ہوں؟"۔

یہ 2025 ہے، اب کسی بھی پروگرامر کو نئے ریگولر اظہار نہیں لکھنا چاہیے۔

آپ کو یہ مکینیکل کام AI پر چھوڑ دینا چاہیے۔

تجویز کردہ پرامپٹ: 1. اس کے منطقی اجزاء کی شناخت کے لیے ریجیکس کا تجزیہ کریں۔2۔ ریجیکس کو ہر جزو کے لیے چھوٹے، نام والے ذیلی نمونوں میں توڑ دیں۔3۔ ہر ذیلی پیٹرن کے لیے یونٹ ٹیسٹ لکھیں تاکہ یہ یقینی بنایا جا سکے کہ یہ صحیح طریقے سے کام کرتا ہے۔4۔ آزمائشی ذیلی نمونوں کو مکمل توثیق کی منطق میں یکجا کریں۔5۔ ہر ناکام ہونے والے حصے کے لیے واضح غلطی کے پیغامات فراہم کرنے کے لیے کوڈ کو ریفیکٹر کریں۔

مناسب ہدایات کے بغیر

مخصوص ہدایات کے ساتھ

چیٹ جی پی ٹی

چیٹ جی پی ٹی

کلاڈ

کلاڈ

الجھن

الجھن

copilot

copilot

جیمنی

جیمنی

ڈیپ سیک

ڈیپ سیک

میٹا اے آئی

میٹا اے آئی

کیوین

کیوین

ٹیگز 🏷️

  • امتحان کی اہلیت

سطح 🔋

  • انٹرمیڈیٹ

متعلقہ ریفیکٹرنگز 🔄

یہ بھی دیکھیں 📚

کریڈٹ 🙏

Pixabay پر Gerd Altmann کی تصویر


یہ مضمون ریفیکٹرنگ سیریز کا حصہ ہے۔


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks