مرکزی مواد پر جائیں
ماڈیول 3 · سبق 2 از 5کورس میں 12/50~12 min
ماڈیول اسباق (2/5)

متعدد ریٹرن اور نامزد ریٹرن

گو میں، ایک فنکشن متعدد اقدار لوٹا سکتا ہے۔ یہ وہ طریقہ کار ہے۔ (value, error) پیٹرن کو قابل بناتا ہے جسے آپ پہلے ہی دیکھ چکے ہیں اور وہ پھیلتا ہے۔ پوری معیاری لائبریری۔

متعدد واپسی۔

واپسی کی قسمیں قوسین کے درمیان جاتی ہیں، کوما سے الگ:

Go
func divmod(a, b int) (int, int) {
    return a / b, a % b
}

q, r := divmod(17, 5) // q=3, r=2

وہ متعدد تفویض کے ساتھ تباہ شدہ ہیں۔ میں سے ایک کو ضائع کرنا اقدار استعمال کرتی ہیں _:

Go
_, r := divmod(17, 5) // solo il resto

کیننیکل (T, error) پیٹرن

تقریباً تمام stdlib اس کی پیروی کرتا ہے۔ error ہمیشہ آخری ہے:

Go
func read(path string) ([]byte, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return nil, fmt.Errorf("read %q: %w", path, err)
    }
    return data, nil
}

نامی واپسی۔

آپ واپسی کی قدروں کو نام دے سکتے ہیں: وہ پہلے سے اعلان شدہ متغیر بن جاتے ہیں۔ صفر پر شروع کیا گیا، اور return بغیر کسی دلیل کے انہیں واپس کرتا ہے ("ننگا واپسی"):

Go
func divmod(a, b int) (q, r int) {
    q = a / b
    r = a % b
    return       // naked: ritorna q, r
}

نامزد واپسی دستاویزات کے ٹول ٹپس میں بھی ظاہر ہوتی ہیں، اس لیے وہ مفید ہیں۔ پیچیدہ افعال کے لیے ان لائن دستاویزات کی شکل کے طور پر — نہ صرف ننگی واپسی کے لئے.

دو سے زیادہ واپسی؟

کوئی چیز آپ کو (int, int, int, error) سے نہیں روکتی، لیکن اگر آپ کو ضرورت محسوس ہو۔ یہ تقریبا ہمیشہ ایک نشانی ہے کہ آپ کو ایک struct واپس کرنا چاہئے:

Go
type Result struct {
    Sum  int
    Avg  float64
    Max  int
}

func analyze(nums []int) (Result, error) { ... }

اسے آزمائیں

ورزش#go.m3.l2.e1
کوششیں: 0لوڈ ہو رہا ہے…

divmod(a, b int) (int, int) کی وضاحت کریں جو اقتباس اور بقایا کو لوٹاتا ہے۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

قوسین کے درمیان قسمیں واپس کریں: `(int, int)`۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m3.l2.e2
کوششیں: 0لوڈ ہو رہا ہے…

safeDiv(a, b int) (int, error): اگر b == 0 واپس آتا ہے (0، errors. New('divisione per zero'))، بصورت دیگر (a/b، nil)۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

خامی ہمیشہ آخری قدر کے طور پر۔ غلطی پر: صفر قدر + غلطی۔

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#go.m3.l2.e3
تیار

نام کی واپسی کا استعمال کرتے ہوئے یہ پروگرام کیا پرنٹ کرتا ہے؟

Go
func f() (a, b int) {
    a = 1
    b = 2
    return
}
x, y := f()
fmt.Println(x, y)
جواب کے اختیارات

Recap

  • قوسین کے درمیان متعدد اقدار: func f() (T1, T2, error)۔
  • کنونشن: error ہمیشہ آخری قدر کے طور پر؛ غلطی پر، صفر قدر + غلطی۔
  • نامزد ریٹرن متغیرات کا پہلے سے اعلان کرتے ہیں اور ننگے ریٹرن کو فعال کرتے ہیں۔
  • صرف بہت مختصر افعال میں برہنہ واپسی؛ اس سے آگے، پڑھنے کی اہلیت متاثر ہوتی ہے۔
  • 2-3 سے زیادہ واپسی؟ آپ شاید ایک ڈھانچہ چاہتے ہیں۔