পূর্বশব্দ: তর্ক ছাড়াই if else
এটি যাবার উপায়, আমরা এখনও ভাষা-সক্ষম কন্সট্রাক্টসগুলির সাথে খেলতে এবং আনন্দ পেতে পারি।
নিচের If
কনস্ট্রাক্টটি আমার github.com/icza/gox
লাইব্রেরিতে প্রচুর অন্যান্য পদ্ধতি সহ পাওয়া যায়, builtinx.If
ধরণের।
গো এমন কোনও আদিম প্রকার সহ যে কোনও ব্যবহারকারী-সংজ্ঞায়িত প্রকারের সাথে পদ্ধতিগুলি সংযুক্ত করার অনুমতি দেয় bool
। আমরা bool
এটির অন্তর্নিহিত ধরণের হিসাবে একটি কাস্টম টাইপ তৈরি করতে পারি এবং তারপরে শর্তে একটি সাধারণ ধরণের রূপান্তরকরণের সাথে আমরা এর পদ্ধতিতে অ্যাক্সেস পাই। অপারেন্ডগুলি থেকে প্রাপ্ত এবং নির্বাচন করা পদ্ধতি।
এটার মতো কিছু:
type If bool
func (c If) Int(a, b int) int {
if c {
return a
}
return b
}
আমরা কীভাবে এটি ব্যবহার করতে পারি?
i := If(condition).Int(val1, val2) // Short variable declaration, i is of type int
|-----------| \
type conversion \---method call
উদাহরণস্বরূপ একটি বার্ষিক কাজ max()
:
i := If(a > b).Int(a, b)
একটি তিনটি কাজ abs()
:
i := If(a >= 0).Int(a, -a)
এটি দেখতে দুর্দান্ত, এটি সাধারণ, মার্জিত এবং দক্ষ (এটি ইনলাইনের জন্যও যোগ্য )।
"রিয়েল" টেরিনারি অপারেটরের সাথে তুলনা করে এক দিক: এটি সর্বদা সমস্ত অপারেশনকে মূল্যায়ন করে।
স্থগিত এবং কেবল-যদি-প্রয়োজন হয় মূল্যায়ন অর্জনের জন্য একমাত্র বিকল্প হ'ল ফাংশন (হয় ঘোষিত ফাংশন বা পদ্ধতি, বা ফাংশন আক্ষরিক ), যা কেবল যখন / যখন প্রয়োজন হয় তখন ডাকা হয়:
func (c If) Fint(fa, fb func() int) int {
if c {
return fa()
}
return fb()
}
এটি ব্যবহার করে: ধরে নেওয়া যাক আমাদের গণনা করার জন্য এই ফাংশনগুলি রয়েছে a
এবং b
:
func calca() int { return 3 }
func calcb() int { return 4 }
তারপর:
i := If(someCondition).Fint(calca, calcb)
উদাহরণস্বরূপ, শর্তটি বর্তমান বছর> 2020:
i := If(time.Now().Year() > 2020).Fint(calca, calcb)
আমরা যদি ফাংশন আক্ষরিক ব্যবহার করতে চাই:
i := If(time.Now().Year() > 2020).Fint(
func() int { return 3 },
func() int { return 4 },
)
চূড়ান্ত দ্রষ্টব্য: আপনার যদি স্বাক্ষরযুক্ত বিভিন্ন ফাংশন থাকে তবে আপনি সেগুলি এখানে ব্যবহার করতে পারবেন না। সেক্ষেত্রে আপনি এখনও প্রয়োগযোগ্য করে তুলতে ম্যাচের স্বাক্ষরের সাথে একটি ফাংশন আক্ষরিক ব্যবহার করতে পারেন।
উদাহরণস্বরূপ যদি calca()
এবং এর calcb()
খুব বেশি পরামিতি থাকে (রিটার্ন মান সহ)
func calca2(x int) int { return 3 }
func calcb2(x int) int { return 4 }
আপনি তাদের এইভাবে ব্যবহার করতে পারেন:
i := If(time.Now().Year() > 2020).Fint(
func() int { return calca2(0) },
func() int { return calcb2(0) },
)
গো খেলার মাঠে এই উদাহরণগুলি ব্যবহার করে দেখুন ।