$lang['tuto'] = "سبق"; ?> سوئفٹ میں ریجیکس آؤٹ پٹ کنورژن کی

سوئفٹ میں ریجیکس آؤٹ پٹ کنورژن کی خرابیوں کو حل کرنا: 'RegexSubstring' سے 'RegexAnyRegexOutput'

Swift Regex

سوئفٹ ریجیکس تبادلوں کے چیلنجز کی وضاحت کی گئی۔

کے ساتھ کام کرتے وقت لائبریری، ڈویلپرز کو قسم کے تبادلوں کے مسائل کا سامنا کرنا پڑ سکتا ہے جو ان کی پیشرفت کو روک سکتے ہیں، خاص طور پر جب پیچیدہ ریجیکس پیٹرن کو سنبھالنے کے لیے اپنی مرضی کے مطابق کلاسز کی وضاحت کرتے ہیں۔ ایک عام مسئلہ یہ ہے کہ "ریجیکس کو تبدیل نہیں کیا جا سکتا' سے 'ریجیکس

سوئفٹ میں، ریجیکس پر مبنی پیٹرن کی مماثلت ٹیکسٹ ڈیٹا کو پارس کرنے اور اس کی توثیق کرنے کے لیے مفید ہے، لیکن عام اقسام کی پیچیدگیاں بغیر غلطیوں کے پیٹرن سے میچ کرنا مشکل بنا سکتی ہیں۔ یہ خرابی اس وقت ہوتی ہے جب سوئفٹ خود بخود مصالحت نہیں کرسکتا آپ کی کلاس میں ایک عام متوقع قسم جیسے 'AnyRegexOutput' کے ساتھ۔

اس سے نمٹنے کے لیے، سیٹ اپ کرنے کا طریقہ سمجھنا مختلف ذیلی اسٹرنگ فارمیٹس کو ملانا ضروری ہے۔ اس میں ریجیکس آؤٹ پٹ کی وضاحت کرنے کا صحیح طریقہ جاننا بھی شامل ہے جسے آپ کی کلاسیں قبول کر سکتی ہیں، نیز Swift کی عمومی ہینڈلنگ کی صلاحیتوں کو استعمال کرنا۔

اس مضمون میں، ہم تبادلوں کی اس خرابی کی وجہ کا جائزہ لیں گے اور آپ کی تبدیلی کے مؤثر طریقے فراہم کریں گے۔ ریجیکس پیٹرن کو حسب منشا کام کرنے کے لیے۔ آئیے ان Swift regex چیلنجوں پر قابو پانے میں آپ کی مدد کرنے کے لیے بہترین طریقوں اور کوڈ کے حل تلاش کریں۔

حکم استعمال کی مثال
Regex<AnyRegexOutput> ایک ریجیکس پیٹرن کی وضاحت کرتا ہے جو کسی بھی آؤٹ پٹ کی قسم سے مماثل ہو سکتا ہے، جب متعدد پیٹرن آؤٹ پٹس کی ضرورت ہو تو لچک پیش کرتا ہے۔ یہ سوئفٹ میں ایک سے زیادہ کیپچر گروپس کو ٹائپ کی غلطیوں کو پھینکے بغیر ہینڈل کرنے میں مدد کرتا ہے۔
Regex<T> ایک مخصوص قسم کے ساتھ ریجیکس کو شروع کرنے کا ایک عام طریقہ، ٹائپ سیف ریجیکس پیٹرن کی مماثلت کی اجازت دیتا ہے جو کسی مخصوص ڈھانچے کے مطابق ہو، جیسے (سبسٹرنگ، سبسٹرنگ) یا AnyRegexOutput۔
try Regex(pattern) اسٹرنگ پیٹرن سے ریجیکس آبجیکٹ بنانے کی کوشش، اس بات کو یقینی بناتے ہوئے کہ پیٹرن درست ہے۔ کوشش کا مطلوبہ لفظ یہاں ضروری ہے کیونکہ ایک غلط ریجیکس پیٹرن ایک غلطی پھینک دیتا ہے، جسے محفوظ آغاز کے لیے سنبھالا جا سکتا ہے۔
where T: RegexOutput ایک قسم کی رکاوٹ جو T کے RegexOutput کے مطابق ہونے کی ضرورت کو نافذ کرتی ہے، اس بات کو یقینی بناتی ہے کہ عام کلاس ڈھانچے کے اندر صرف درست regex آؤٹ پٹ کی قسمیں استعمال کی جائیں۔
XCTestCase سوئفٹ میں یونٹ ٹیسٹ بنانے کے لیے بیس کلاس فراہم کرتا ہے۔ یہاں، اس کا استعمال مخصوص ٹیسٹوں کی وضاحت کرنے کے لیے کیا جاتا ہے جو چیک کرتے ہیں کہ آیا چیلنج مثالوں میں ریجیکس پیٹرن متوقع آؤٹ پٹس سے مماثل ہیں۔
XCTAssertNotNil() ایک ٹیسٹ دعوی اس بات کی تصدیق کے لیے استعمال کیا جاتا ہے کہ کوئی چیز صفر نہیں ہے۔ اس صورت میں، یہ چیک کرتا ہے کہ آیا چیلنج آبجیکٹ کو کامیابی کے ساتھ شروع کیا گیا ہے، جس سے ظاہر ہوتا ہے کہ ریجیکس پیٹرن درست اور قبول کیا گیا تھا۔
XCTAssertEqual() دو قدروں کا موازنہ کرتا ہے اور یونٹ ٹیسٹ میں ان کی برابری پر زور دیتا ہے۔ یہاں، یہ ریجیکس پیٹرن کو شروع کرنے کے بعد چیلنج کلاس میں پراپرٹی اسائنمنٹس (جیسے عنوان اور تفصیل) کی درستگی کی تصدیق کرتا ہے۔
Challenge<T> قسم کے پیرامیٹر T کے ساتھ ایک عام چیلنج کلاس کی وضاحت کرتا ہے تاکہ لچکدار ریجیکس اقسام کو ان پٹس کے طور پر اجازت دی جا سکے، ضرورت کے مطابق مخصوص پیٹرن آؤٹ پٹس کو ملا کر مماثلت کے مسئلے کو حل کریں۔
dailyChallenges.append(try Challenge(...)) ایک صف میں ایک نیا چیلنج مثال شامل کرتا ہے، اس بات کو یقینی بنانے کی کوشش کا استعمال کرتے ہوئے کہ ابتدا کے دوران کوئی بھی ریجیکس پیٹرن کی خرابی پکڑی گئی ہو۔
ChallengeTests.defaultTestSuite.run() ChallengeTests کے اندر تمام ٹیسٹ کیسز کو انجام دیتا ہے، ہر یونٹ ٹیسٹ چلا کر اس بات کی تصدیق کرتا ہے کہ چیلنج ریجیکس پیٹرن اور آؤٹ پٹس توقع کے مطابق کام کرتے ہیں۔

سوئفٹ ریجیکس قسم کی مطابقت کے مسائل کے حل

فراہم کردہ اسکرپٹس کو حل کرنے پر فوکس کرتی ہیں۔ غلطی جہاں ریجیکس پیٹرن کی وضاحت کی گئی ہے۔ میں براہ راست تبدیل نہیں ہو سکتا . یہ مسئلہ ایک پیٹرن میں ایک سے زیادہ گروپس کیپچر کرتے وقت عام ہوتا ہے، کیونکہ سوئفٹ کو ریجیکس آؤٹ پٹس کے لیے سخت قسم کی مطابقت کی توقع ہوتی ہے۔ پہلا حل ایک عام بنا کر اس کو حل کرتا ہے۔ چیلنج کلاس جو regex آؤٹ پٹ کے لیے مختلف اقسام کو قبول کرتا ہے۔ یہ عمومی نقطہ نظر ہمیں ہر مثال کے لیے مختلف ریجیکس آؤٹ پٹ کی قسمیں بتانے دیتا ہے، قسم کے تبادلوں کے مسائل سے گریز کرتا ہے۔ مثال کے طور پر چیلنج کے ساتھ

پہلے نقطہ نظر میں، کے مطابق کسی بھی ریجیکس آؤٹ پٹ قسم کو قبول کرنے کے لیے لاگو کیا جاتا ہے۔ پروٹوکول T کو ایک عام قسم کے طور پر متعین کرنے سے، یہ چیلنج آبجیکٹ کو ایک ریجیکس کے ساتھ لچکدار انسٹی ٹیشن کرنے کی اجازت دیتا ہے جو سنگل یا ایک سے زیادہ ذیلی اسٹرنگ کو آؤٹ پٹ کرتا ہے۔ یہ تب مفید ہے جب ہم مطابقت کی خرابیوں کی فکر کیے بغیر ریجیکس کو شروع کرنا چاہتے ہیں، کیونکہ Swift ریجیکس ڈھانچے کی بنیاد پر قسم کا اندازہ لگا سکتا ہے۔ دی کسی بھی ممکنہ نحوی غلطیوں کو جلد پکڑنے کے لیے ریجیکس پیٹرن بناتے وقت کلیدی لفظ استعمال کیا جاتا ہے، جو رن ٹائم کے مسائل سے بچنے کے لیے Swift میں ایک بہترین عمل ہے۔ مزید برآں، DailyChallenges میں متعدد مثالیں ہوتی ہیں، ہر ایک مختلف ریجیکس پیٹرن کے ساتھ۔

دوسرا حل مزید متعارف کراتا ہے۔ چیلنج کلاس میں AnyRegexOutput استعمال کرکے۔ یہاں، AnyRegexOutput regex کے لیے ایک لچکدار آؤٹ پٹ قسم کے طور پر کام کرتا ہے، جس میں قسم کی تبدیلی کی غلطیوں کے بغیر کسی بھی قسم کے سبسٹرنگ میچوں کو ایڈجسٹ کیا جاتا ہے۔ ریجیکس کو براہ راست سٹرنگ پیٹرن سے شروع کیا جاتا ہے، ٹرائی ریجیکس(پیٹرن) کا استعمال کرتے ہوئے پیٹرن کو AnyRegexOutput میں تبدیل کرکے سخت آؤٹ پٹ ٹائپنگ کو نظرانداز کرتے ہوئے۔ یہ چیلنج کلاس کو دستی قسم کی مماثلت کے بغیر ریجیکس پیٹرن کی وسیع اقسام کو ہینڈل کرنے کی اجازت دیتا ہے، جو کہ متنوع ریجیکس ڈھانچے کے ساتھ کام کرتے وقت خاص طور پر مفید ہے۔ یہ پیٹرن پر مبنی اپروچ، ٹرائی کیچ بلاک کے ساتھ مل کر، اس بات کو یقینی بناتا ہے کہ ریجیکس پیٹرن میں کسی بھی خامی کا فوری طور پر پتہ لگایا جائے گا، جو ایک محفوظ سیٹ اپ فراہم کرتا ہے۔

آخر میں، یونٹ ٹیسٹ اسکرپٹ اس بات کی تصدیق کرتا ہے کہ ہمارا حل متعدد منظرناموں میں صحیح طریقے سے کام کرتا ہے۔ استعمال کرکے XCTAssertNotNil اور XCTAssertEqual جیسے فنکشنز، ہم یقینی بناتے ہیں کہ ہر ریجیکس پیٹرن توقع کے مطابق برتاؤ کرے۔ یہ ٹیسٹ اس بات کی تصدیق کرتے ہیں کہ ہر چیلنج کی مثال فراہم کردہ ریجیکس پیٹرن کے ساتھ صحیح طریقے سے شروع ہوتی ہے اور یہ کہ عنوان اور تفصیل جیسی خصوصیات کو درست طریقے سے تفویض کیا گیا ہے۔ ChallengeTests.defaultTestSuite.run() پھر ٹیسٹ کیسز چلاتا ہے، یہ ہمارے regex پیٹرن کی مطابقت کی توثیق کرنے کا ایک لازمی حصہ بناتا ہے۔ یہ ٹیسٹنگ اپروچ نہ صرف حلوں کی تصدیق کرتا ہے بلکہ سوئفٹ میں ریجیکس ہینڈلنگ کو ترتیب دینے کے لیے بہترین طریقوں کو بھی ظاہر کرتا ہے، خاص طور پر جب متعدد آؤٹ پٹ اقسام سے نمٹتے ہیں۔

سوئفٹ ریجیکس قسم کی تبدیلی کی خرابی کو سنبھالنا: متبادل حل

سوئفٹ (بیک اینڈ - کسٹم کلاس کا نفاذ)

import Foundation
// Define a generic Challenge class that can accept different Regex output types
class Challenge<T> where T: RegexOutput {
    let title: String
    let description: String
    let regex: Regex<T>
    var isComplete: Bool

    init(title: String, description: String, regex: Regex<T>, isComplete: Bool = false) {
        self.title = title
        self.description = description
        self.regex = regex
        self.isComplete = isComplete
    }
}

// Create instances with inferred types
var dailyChallenges = [
    Challenge(title: "Update Title", description: "set a new website title",
             regex: /<title>(?!webview<\/title>)(.*?)<\/title>/),
    Challenge(title: "Add Image", description: "add an image with a source URL",
             regex: /<img(\s.*\s|\s)(src="http.+?")/) 
]

سوئفٹ ریجیکس آؤٹ پٹس کے لیے لچکدار قسم کاسٹنگ

سوئفٹ (بیک اینڈ - ہیلپر فنکشن کے ساتھ لچکدار قسم کی تبدیلی)

import Foundation

// Challenge class using AnyRegexOutput for flexible pattern matching
class Challenge {
    let title: String
    let description: String
    let regex: Regex<AnyRegexOutput>
    var isComplete: Bool

    init(title: String, description: String, pattern: String, isComplete: Bool = false) throws {
        self.title = title
        self.description = description
        self.regex = try Regex<AnyRegexOutput>(pattern)
        self.isComplete = isComplete
    }
}

// Initialize Challenge instances with pattern strings for dynamic handling
var dailyChallenges: [Challenge] = []
do {
    dailyChallenges.append(try Challenge(title: "Update Title", description: "set a new title", pattern: "<title>(?!webview</title>)(.*?)</title>"))
    dailyChallenges.append(try Challenge(title: "Add Image", description: "add image URL", pattern: "<img(\s.*\s|\s)(src=\\"http.+?\\")"))
} catch {
    print("Error initializing regex pattern: \\(error)")
}

سوئفٹ کلاسز میں ریجیکس پیٹرن میچنگ کی جانچ

سوئفٹ یونٹ ٹیسٹ (بیک اینڈ ٹیسٹنگ)

import XCTest

class ChallengeTests: XCTestCase {

    func testTitleRegex() {
        let challenge = try? Challenge(title: "Test Title", description: "Test Description",
                                        pattern: "<title>(?!webview</title>)(.*?)</title>")
        XCTAssertNotNil(challenge)
        XCTAssertEqual(challenge?.title, "Test Title")
    }

    func testImageRegex() {
        let challenge = try? Challenge(title: "Test Image", description: "Test Image Source",
                                        pattern: "<img(\s.*\s|\s)(src=\\"http.+?\\")")
        XCTAssertNotNil(challenge)
        XCTAssertEqual(challenge?.description, "Test Image Source")
    }
}

ChallengeTests.defaultTestSuite.run()

سوئفٹ ریجیکس قسم کی رکاوٹوں اور مطابقت کو سمجھنا

سوئفٹ میں، اپنی مرضی کے مطابق کلاسوں میں پیٹرن میچنگ کے ساتھ کام کرتے وقت ایک اہم کردار ادا کریں۔ بہت سے ڈویلپرز کو جس چیلنج کا سامنا کرنا پڑتا ہے وہ یہ ہے کہ ہر ریجیکس پیٹرن کیپچر شدہ سبسٹرنگز کی تعداد کی بنیاد پر ایک منفرد آؤٹ پٹ قسم تیار کرتا ہے۔ مثال کے طور پر، دو گروپ آؤٹ پٹ کے ساتھ پیٹرن بطور ، جبکہ تین گروپ آؤٹ پٹ بطور . سوئفٹ کا ٹائپ سسٹم مضبوط قسم کی مطابقت کو نافذ کرتا ہے، مطلب یہ ہے کہ مماثل قسمیں، جیسے کہ Regex کا پیٹرن آؤٹ پٹ جہاں Regex کی توقع کی جاتی ہے، ٹائپ کنورژن کی خرابیوں کا باعث بنتی ہے۔ اس کے نتیجے میں عام غلطی ہوتی ہے "قسم Regex کی قدر کو متوقع دلیل کی قسم Regex

اس سے نمٹنے کے لیے، ڈویلپر مختلف طریقے اختیار کر سکتے ہیں۔ ایک طریقہ عام کلاس کا استعمال کر رہا ہے جیسے ، جہاں T RegexOutput کے مطابق ہے، ایک ہی کلاس کے اندر متعدد قسم کے regex آؤٹ پٹ کی اجازت دیتا ہے۔ ایک اور حل میں استعمال کرنا شامل ہے۔ متنوع آؤٹ پٹ اقسام کو ایک متوقع قسم میں یکجا کرنے کے لیے، قسم کی مماثلت کی غلطی سے مکمل طور پر گریز کرنا۔ یہ لچک خاص طور پر ان مثالوں کے لیے مفید ہے جہاں ایک ہی صف یا مجموعہ میں مختلف پیٹرن اور آؤٹ پٹ کی قسمیں ضروری ہیں۔ کا متحرک استعمال مخصوص آؤٹ پٹ ڈھانچے کو ایڈجسٹ کیے بغیر، پیٹرن کی جانچ کو ہموار کرنے کے لیے آسان توثیق اور پیٹرن کی مماثلت کا دروازہ بھی کھولتا ہے۔

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

سوئفٹ ریجیکس قسم کی مطابقت اور حل پر عام سوالات

  1. کیا ہے سوئفٹ میں استعمال کیا جاتا ہے؟
  2. کسی بھی قسم کے ریجیکس آؤٹ پٹس کو ہینڈل کرنے کے لیے استعمال کیا جاتا ہے، ان پیٹرن کے ساتھ کام کرتے وقت لچک فراہم کرتے ہیں جن میں ذیلی اسٹرنگ کی تعداد مختلف ہوتی ہے۔
  3. میں کیسے استعمال کروں ریجیکس پیٹرن کے ساتھ؟
  4. دی کلیدی لفظ ریجیکس پیٹرن کو شروع کرتے وقت ممکنہ غلطیوں کو سنبھالنے میں مدد کرتا ہے۔ یہ ضروری ہے کیونکہ غلط ریجیکس نحو سوئفٹ میں رن ٹائم کی خرابیوں کا سبب بن سکتا ہے۔
  5. سوئفٹ ریجیکس آؤٹ پٹ اقسام کے ساتھ سخت قسم کی مطابقت کیوں نافذ کرتا ہے؟
  6. سوئفٹ کا سخت قسم کا نظام اس بات کو یقینی بناتا ہے کہ ہر ریجیکس پیٹرن کی آؤٹ پٹ قسم متوقع ان پٹ کی قسموں سے بالکل مماثل ہے، جو ممکنہ خرابیوں کو کم کرتی ہے اور کوڈ کی وشوسنییتا کو یقینی بناتی ہے۔
  7. کیا میں ایک سے زیادہ ریجیکس آؤٹ پٹ اقسام کو سنبھالنے کے لیے ایک عام کلاس استعمال کر سکتا ہوں؟
  8. ہاں، عام پیرامیٹر کے ساتھ کلاس کی وضاحت کرکے جیسے جہاں TO: Regex آؤٹ پٹ، آپ ایک ہی ڈھانچے میں متعدد اقسام کو محفوظ طریقے سے سنبھال سکتے ہیں۔
  9. کیا ہے یونٹ ٹیسٹ کی مثالوں میں استعمال کیا جاتا ہے؟
  10. دی فنکشن چیک کرتا ہے کہ ایک آبجیکٹ، جیسے ریجیکس پیٹرن، کامیابی کے ساتھ شروع کیا گیا ہے نہ کہ صفر، جو یونٹ ٹیسٹوں میں ابتداء کی تصدیق میں کلیدی حیثیت رکھتا ہے۔
  11. کیا کرتا ہے سوئفٹ میں اشارہ کریں؟
  12. ریجیکس پیٹرن کو T کی طرف سے بیان کردہ ایک مخصوص قسم کو آؤٹ پٹ کرنے کی اجازت دیتا ہے، آپ کو ان پیٹرن کو سنبھالنے دیتا ہے جو قسم کے محفوظ طریقے سے ذیلی اسٹرنگ کی مختلف تعداد کو واپس کرتے ہیں۔
  13. استعمال کر رہا ہے۔ ایک سے زیادہ ریجیکس پیٹرن کو سنبھالنے کے لئے ایک بہتر حل؟
  14. جب ایک سے زیادہ ریجیکس پیٹرن استعمال کیے جاتے ہیں تو فائدہ مند ہوتا ہے کیونکہ یہ قسم کی مماثلت کی غلطیوں سے بچتا ہے اور سوئفٹ میں زیادہ لچکدار ریجیکس مینجمنٹ کی اجازت دیتا ہے۔
  15. کیسے کرتا ہے ریجیکس پیٹرن کے ساتھ غلطی سے نمٹنے کو بہتر بنائیں؟
  16. دی بلاک ریجیکس پیٹرن بناتے وقت نحو کی غلطیوں کو پکڑتا ہے، جس سے آپ رن ٹائم رکاوٹوں کے بغیر غلط پیٹرن کو آسانی سے سنبھال سکتے ہیں۔
  17. کا مقصد کیا ہے۔ ?
  18. یہ کمانڈ میں بیان کردہ تمام ٹیسٹ چلاتا ہے۔ اس بات کی تصدیق کرتے ہوئے کہ ریجیکس پیٹرن اور آؤٹ پٹ مختلف منظرناموں میں صحیح طریقے سے کام کرتے ہیں۔

Swift میں regex آؤٹ پٹ تبادلوں کی غلطیوں کو سنبھالنے کے لیے regex پیٹرن آؤٹ پٹس میں نافذ سخت قسم کی مطابقت کو سمجھنا ضروری ہے۔ عام استعمال کرکے یا ، آپ غلطیوں کو کم کر سکتے ہیں اور پیچیدہ نمونوں کو سنبھالنے کو آسان بنا سکتے ہیں، اپنے کلاس ڈھانچے میں ایک سے زیادہ سبسٹرنگ میچوں کو ایڈجسٹ کر سکتے ہیں۔

جنرک سے آگے، نافذ کرنا بلاکس اس بات کو یقینی بناتا ہے کہ پیٹرن شروع کرتے وقت غلطیوں کو احسن طریقے سے ہینڈل کیا جاتا ہے۔ یہ تکنیکیں مضبوط، لچکدار سوئفٹ کوڈ بنانے میں مدد کرتی ہیں جو مختلف ریجیکس ضروریات کے مطابق ہوتی ہے، کارکردگی کو بہتر بناتی ہے اور ریجیکس انضمام کو مزید قابل انتظام بناتی ہے۔

  1. سوئفٹ میں ریجیکس پر ایپل کی سرکاری دستاویزات ریجیکس ہینڈلنگ اور ٹائپ مطابقت کے مسائل پر ایک جامع نظر پیش کرتی ہے۔ پر دستیاب ہے۔ ایپل ڈویلپر: سوئفٹ ریجیکس .
  2. Swift.org زبان کے ٹائپ سسٹم اور جنرک کے بارے میں اضافی بصیرت فراہم کرتا ہے، جو اس کے ساتھ غلطی سے نمٹنے کے لیے مفید ہے۔ اور . پر اس تک رسائی حاصل کریں۔ Swift.org دستاویزات .
  3. سوئفٹ میں ریجیکس تبادلوں کی غلطیوں پر اسٹیک اوور فلو بحثیں ٹائپ مسائل کے عملی حل کے لیے انمول ہیں۔ پر متعلقہ تھریڈز ملاحظہ کریں۔ اسٹیک اوور فلو .