আপনি কি স্টাইলটি ব্যবহার করতে চান তার উপর নির্ভর করে এখানে আপনার কয়েকটি বা বিভিন্ন ধরণের সমস্ত কিছু রয়েছে এবং যদি তালিকাটিতে অজানা সংখ্যক আইটেম রয়েছে ...
মিশ্রিত প্রকারগুলি, একটি নতুন মান গণনা করার জন্য সমস্ত অবশ্যই নালাগুলি নয়
মিশ্র প্রকারের জন্য আপনি প্রতিটি প্যারামিটার গণনার জন্য একাধিক ক্রিয়াকলাপ তৈরি করতে পারেন যা নির্বোধ দেখাচ্ছে, তবে মিশ্র প্রকারের জন্য খুব সুন্দরভাবে কাজ করুন:
inline fun <T1: Any, T2: Any, R: Any> safeLet(p1: T1?, p2: T2?, block: (T1, T2)->R?): R? {
return if (p1 != null && p2 != null) block(p1, p2) else null
}
inline fun <T1: Any, T2: Any, T3: Any, R: Any> safeLet(p1: T1?, p2: T2?, p3: T3?, block: (T1, T2, T3)->R?): R? {
return if (p1 != null && p2 != null && p3 != null) block(p1, p2, p3) else null
}
inline fun <T1: Any, T2: Any, T3: Any, T4: Any, R: Any> safeLet(p1: T1?, p2: T2?, p3: T3?, p4: T4?, block: (T1, T2, T3, T4)->R?): R? {
return if (p1 != null && p2 != null && p3 != null && p4 != null) block(p1, p2, p3, p4) else null
}
inline fun <T1: Any, T2: Any, T3: Any, T4: Any, T5: Any, R: Any> safeLet(p1: T1?, p2: T2?, p3: T3?, p4: T4?, p5: T5?, block: (T1, T2, T3, T4, T5)->R?): R? {
return if (p1 != null && p2 != null && p3 != null && p4 != null && p5 != null) block(p1, p2, p3, p4, p5) else null
}
// ...keep going up to the parameter count you care about
ব্যবহারের উদাহরণ:
val risk = safeLet(person.name, person.age) { name, age ->
// do something
}
তালিকার কোনও শূন্য আইটেম না থাকলে কোডের ব্লক কার্যকর করুন
দুটি স্বাদ এখানে, প্রথমে যখন তালিকায় সমস্ত নাল আইটেম থাকে তখন কোডের ব্লক কার্যকর করতে হয় এবং দ্বিতীয়ত যখন তালিকাটিতে কমপক্ষে একটি নাল আইটেম থাকে তখন একই কাজ করতে হয়। উভয় ক্ষেত্রেই কোড অবরুদ্ধ করার জন্য নাল আইটেমগুলির একটি তালিকা পাঠানো হয়:
কার্যাবলী:
fun <T: Any, R: Any> Collection<T?>.whenAllNotNull(block: (List<T>)->R) {
if (this.all { it != null }) {
block(this.filterNotNull()) // or do unsafe cast to non null collectino
}
}
fun <T: Any, R: Any> Collection<T?>.whenAnyNotNull(block: (List<T>)->R) {
if (this.any { it != null }) {
block(this.filterNotNull())
}
}
ব্যবহারের উদাহরণ:
listOf("something", "else", "matters").whenAllNotNull {
println(it.joinToString(" "))
} // output "something else matters"
listOf("something", null, "matters").whenAllNotNull {
println(it.joinToString(" "))
} // no output
listOf("something", null, "matters").whenAnyNotNull {
println(it.joinToString(" "))
} // output "something matters"
ফাংশনটিতে সামান্য পরিবর্তন আইটেমগুলির তালিকা গ্রহণ করে এবং একই ক্রিয়াকলাপ করুন:
fun <T: Any, R: Any> whenAllNotNull(vararg options: T?, block: (List<T>)->R) {
if (options.all { it != null }) {
block(options.filterNotNull()) // or do unsafe cast to non null collection
}
}
fun <T: Any, R: Any> whenAnyNotNull(vararg options: T?, block: (List<T>)->R) {
if (options.any { it != null }) {
block(options.filterNotNull())
}
}
ব্যবহারের উদাহরণ:
whenAllNotNull("something", "else", "matters") {
println(it.joinToString(" "))
} // output "something else matters"
এই ভিন্নতাগুলির মতো রিটার্ন মানগুলি পরিবর্তন করা যেতে পারে let()
।
প্রথম নন-নাল আইটেমটি ব্যবহার করুন (কোলেসেস)
কোনও এসকিউএল কোলেসেস ফাংশনের মতো, প্রথম নাল আইটেমটি ফিরিয়ে দিন। ফাংশনের দুটি স্বাদ:
fun <T: Any> coalesce(vararg options: T?): T? = options.firstOrNull { it != null }
fun <T: Any> Collection<T?>.coalesce(): T? = this.firstOrNull { it != null }
ব্যবহারের উদাহরণ:
coalesce(null, "something", null, "matters")?.let {
it.length
} // result is 9, length of "something"
listOf(null, "something", null, "matters").coalesce()?.let {
it.length
} // result is 9, length of "something"
অন্যান্য প্রকরণ
... অন্যান্য বিভিন্নতা রয়েছে, তবে আরও একটি নির্দিষ্টকরণের সাথে এটি সংকুচিত করা যেতে পারে।