ماڈیول اسباق (3/5)
متغیر افعال
متغیر افعال کے دلائل کی صوابدیدی تعداد کو قبول کرتے ہیں۔
ایک ہی قسم آپ ان کا اعلان آخری قسم سے پہلے ... لگا کر کرتے ہیں۔
پیرامیٹر فنکشن کے اندر پیرامیٹر ایک ٹکڑا ہے۔
اعلامیہ
func sum(nums ...int) int {
tot := 0
for _, n := range nums {
tot += n
}
return tot
}
sum() // 0 (nums = []int{})
sum(1) // 1
sum(1, 2, 3, 4) // 10صرف آخری پیرامیٹر متغیر ہوسکتا ہے:
func log(prefix string, values ...any) { ... } // ok
// func wrong(...int, suffix string) {} // ERROREایک ٹکڑا پھیلانا
اگر آپ کے پاس پہلے سے ہی ایک ٹکڑا ہے، تو آپ اسے مختلف فنکشن کے ساتھ منتقل کر سکتے ہیں۔
...:
nums := []int{1, 2, 3}
sum(nums...) // 6 — espande lo slice nei singoli argomenti"..." سلائس کے بعد جاتا ہے۔ پھیلائے بغیر آپ کو ایک قسم مل جائے گی۔
خرابی: آپ ایک []int پاس کر رہے ہوں گے جہاں فنکشن ایک ترتیب کی توقع کرتا ہے
int میں سے۔
nums ایک ٹکڑا ہے، نیا کنٹینر نہیں۔
فنکشن کے اندر nums کی قسم []int ہے۔ تمام معیاری ٹکڑا
آپریشنز کا کام: len(nums)، nums[0]، range، وغیرہ۔
کلاسک استعمال کیس: fmt.Println
تمام fmt کے Print* فنکشنز متغیر ہیں:
// signature (semplificata):
// func Println(a ...any) (n int, err error)
fmt.Println("ciao", 42, true)
args := []any{"a", "b", "c"}
fmt.Println(args...)اسے آزمائیں
sum(nums...int) int کی وضاحت کریں جو تمام دلائل کا مجموعہ لوٹاتا ہے۔
اشارہ دکھائیں۔
فنکشن `nums` کے اندر `[]int` کی قسم ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔
اسپریڈ `نمز...` کے ساتھ سلائس نمبر کو پاس کر کے موجودہ سم فنکشن کو کال کریں۔
اشارہ دکھائیں۔
ٹکڑوں کے نام کے بعد `...` آتا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔
'func f(args ...string)' کے اندر، 'args' کس قسم کا ہے؟
func f(args ...string) {
_ = args
}Recap
...Tبطور آخری پیرامیٹر = متغیر فعل؛ اس کے اندر[]Tہے۔- واحد اقدار کے ساتھ کہا جاتا ہے: مرتب کرنے والا انہیں ایک ٹکڑے میں جمع کرتا ہے۔
- موجودہ سلائس کے ساتھ کال کی گئی:
slice...(پھیلاؤ، سلائس کو دوبارہ استعمال کرتا ہے)۔ - تمام
fmt.Print*فنکشنز متغیر ہیں۔ - صرف آخری پیرامیٹر متغیر ہو سکتا ہے۔