মডিউল পাঠ (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 সংজ্ঞায়িত করুন যা সমস্ত আর্গুমেন্টের যোগফল প্রদান করে।
ইঙ্গিত দেখান
ফাংশনের ভিতরে `সংখ্যা` টাইপ আছে `[]int`।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
স্প্রেড `সংখ্যা...` দিয়ে স্লাইস সংখ্যা পাস করে বিদ্যমান সমষ্টি ফাংশনকে কল করুন।
ইঙ্গিত দেখান
স্লাইস নামের পরে `...` চলে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
`func f(args...string)` এর ভিতরে, `args` কি ধরনের?
func f(args ...string) {
_ = args
}রিক্যাপ
...Tহিসাবে শেষ প্যারামিটার = বৈচিত্র্যময় ফাংশন; এর ভিতরে[]T- একক মান সহ বলা হয়: কম্পাইলার সেগুলিকে একটি স্লাইসে সংগ্রহ করে।
- একটি বিদ্যমান স্লাইস সহ কল করা হয়েছে:
slice...(স্প্রেড, স্লাইসটি পুনরায় ব্যবহার করে)। - সমস্ত
fmt.Print*ফাংশন বৈচিত্র্যময়। - শুধুমাত্র শেষ প্যারামিটারটি বৈচিত্র্যময় হতে পারে।