আমি ?:
উদাহরণস্বরূপ এই ক্ষেত্রে কি করে তা বুঝতে পারি না
val list = mutableList ?: mutableListOf()
এবং কেন এটি এতে পরিবর্তন করা যায়
val list = if (mutableList != null) mutableList else mutableListOf()
আমি ?:
উদাহরণস্বরূপ এই ক্ষেত্রে কি করে তা বুঝতে পারি না
val list = mutableList ?: mutableListOf()
এবং কেন এটি এতে পরিবর্তন করা যায়
val list = if (mutableList != null) mutableList else mutableListOf()
উত্তর:
টিএল; ডিআর: যদি ফলাফলের অবজেক্টের রেফারেন্স [প্রথম অপারেন্ড] না হয় null
তবে তা ফেরত দেওয়া হবে। অন্যথায় দ্বিতীয় অপারেন্ডের মান (যা হতে পারে null
) ফিরে আসে
এলভিস অপারেটর অনেক প্রোগ্রামিং ভাষার, যেমন Kotlin কিন্তু খাঁজকাটা বা C # অংশ। আমি উইকিপিডিয়া সংজ্ঞাটি বেশ নির্ভুল মনে করি:
নির্দিষ্ট কম্পিউটার প্রোগ্রামিং ল্যাঙ্গুয়েজে, এলভিস অপারেটর
?:
একটি বাইনারি অপারেটর , যদি অপারেন্ডটি হয় তবে এটি তার প্রথম অপারেন্ডকে ফেরত দেয়true
এবং অন্যথায় তার দ্বিতীয় অপারেন্ডকে মূল্যায়ন করে এবং ফেরত দেয়। এটা একটা হয় তিন শর্তসাপেক্ষ অপারেটর বৈকল্পিক ,? :
সেই ভাষা (এবং আরও অনেক কিছু) এ পাওয়া যায়নি: এলভিস অপারেটর দ্বিতীয় বাদ দেওয়া প্রতীক সঙ্গে তিন অপারেটর ।
নিম্নলিখিতটি কোটলিনের জন্য বিশেষত সত্য:
কিছু কম্পিউটার প্রোগ্রামিং ভাষার এই অপারেটরের জন্য বিভিন্ন শব্দার্থবিজ্ঞান রয়েছে। প্রথম অপারেন্ডের পরিবর্তে বুলিয়ান তৈরি হওয়ার পরিবর্তে এটি অবশ্যই কোনও অবজেক্টের রেফারেন্সে আসতে পারে । যদি ফলাফলের অবজেক্টের রেফারেন্স না হয়
null
তবে তা ফেরত দেওয়া হবে। অন্যথায় দ্বিতীয় অপারেন্ডের মান (যা হতে পারেnull
) ফিরে আসে।
একটি উদাহরণ:
x ?: y // yields `x` if `x` is not null, `y` otherwise.
elvis operator
যে আরও কিছুটা আরও কমে যেতে পারে। সুন্দর! এবং সুন্দর ব্যাখ্যা, আপনাকে ধন্যবাদ!
এলভিস অপারেটর একটি কোলন দ্বারা অনুসরণ একটি প্রশ্ন চিহ্ন দ্বারা প্রতিনিধিত্ব করা হয়: ?:
এবং এটি এই সিনট্যাক্স সঙ্গে ব্যবহার করা যেতে পারে:
first operand ?: second operand
এটি আপনাকে কনসাইজ কোড লিখতে সক্ষম করে এবং এগুলি হিসাবে কাজ করে:
যদি first operand
শূন্য না হয় তবে তা ফিরে আসবে। যদি এটি নাল হয় , তবে second operand
অবশ্যই ফিরে আসবে। এটি গ্যারান্টি হিসাবে ব্যবহার করা যেতে পারে যে কোনও অভিব্যক্তি নাল মান ফিরিয়ে দেবে না, কারণ প্রদত্ত মানটি যদি শূন্য হয় তবে আপনি একটি নন-অযোগ্য মান সরবরাহ করবেন।
উদাহরণস্বরূপ (কোটলিনে):
fun retrieveString(): String { //Notice that this type isn't nullable
val nullableVariable: String? = getPotentialNull() //This variable may be null
return nullableVariable ?: "Secondary Not-Null String"
}
এই ক্ষেত্রে, যদি গণনা করা মানটি getPotentialNull
শূন্য না হয় তবে এটি দ্বারা ফিরে আসবে retrieveString
; যদি এটি নাল হয় তবে দ্বিতীয় প্রকাশটি "Secondary Not-Null String"
পরিবর্তে ফিরে আসবে।
এছাড়াও মনে রাখবেন যে ডান হাতের এক্সপ্রেশনটি কেবল তখনই বাম-হাতের অংশটি শূন্য হলে মূল্যায়ন করা হয় ।
Kotlin, আপনি যে কোন অভিব্যক্তি ব্যবহার করতে পারে second operand
এই ধরনের একটি হিসাবে, throw Exception
অভিব্যক্তি
return nullVariable ?: throw IllegalResponseException("My inner function returned null! Oh no!")
এলভিস অপারেটর নামটি বিখ্যাত আমেরিকান গায়ক এলভিস প্রিসলি থেকে এসেছে । তার চুলচেরা একটি প্রশ্ন চিহ্ন অনুরূপ
সূত্র: ওয়াজদা, আই মোসকালা, এম। অ্যান্ড্রয়েড ডেভলপমেন্ট উইথ কোটলিন। 2017. প্যাক প্রকাশনা
একে এলভিস অপারেটর বলা হয় এবং এটি করে ... আপনি নিজের প্রশ্নে ঠিক কী বর্ণনা করেছেন। যদি এর বাম হাতের null
মান একটি মান হয় তবে এটি পরিবর্তে ডান দিকটি ফিরিয়ে দেয়, ফ্যালব্যাক হিসাবে সাজান। অন্যথায় এটি কেবল বাম দিকে মান দেয় returns
a ?: b
কেবল শর্টহ্যান্ডের জন্য if (a != null) a else b
।
প্রকার সহ আরও কয়েকটি উদাহরণ:
val x: String? = "foo"
val y: String = x ?: "bar" // "foo", because x was non-null
val a: String? = null
val b: String = a ?: "bar" // "bar", because a was null
a != null ? a : b
এর সংজ্ঞাটি একবার দেখুন :
যখন আমাদের একটি অযোগ্য রেফারেন্স r থাকে, আমরা বলতে পারি "r যদি নাল না হয় তবে এটি ব্যবহার করুন, অন্যথায় কিছু নন-নাল মান ব্যবহার করুন":
?:
(এলভিস) অপারেটর ভারবোসিটি এড়াতে এবং সত্যিই সংক্ষিপ্ত আপনার কোড তোলে।
উদাহরণস্বরূপ, প্রচুর সংগ্রহ এক্সটেনশন ফাংশন null
ফ্যালব্যাক হিসাবে ফিরে আসে ।
listOf(1, 2, 3).firstOrNull { it == 4 } ?: throw IllegalStateException("Ups")
?:
আপনার ফ্যালব্যাকের একাধিক স্তর থাকা সত্ত্বেও আপনাকে ফ্যালব্যাক কেসটি এলিগেন্টালি হ্যান্ডেল করার একটি উপায় দেয়। যদি তা হয় তবে আপনি সহজেই এখানে এলভিস অপারেটরগুলিকে বহুগুণে চেইন করতে পারেন:
val l = listOf(1, 2, 3)
val x = l.firstOrNull { it == 4 } ?: l.firstOrNull { it == 5 } ?: throw IllegalStateException("Ups")
আপনি যদি অন্যটির সাথে একইটি প্রকাশ করেন তবে এটি আরও অনেক কোড হবে যা পড়া শক্ত।
সহজভাবে আমরা এটি বলতে পারি, আপনার দুটি হাত রয়েছে। আপনি জানতে চান, আপনার বাঁ হাত এখনই কাজ করছে ?. বাম হাত যদি কাজ না করে, return
empty
অন্যথায়busy
জাভা জন্য উদাহরণ:
private int a;
if(a != null){
println("a is not null, Value is: "+a)
}
else{
println("a is null")
}
কোটলিনের উদাহরণ:
val a : Int = 5
val l : Int = if (a != null) a.length else "a is null"
কোটলিনের এলভিস অপারেটর নাল সুরক্ষার জন্য ব্যবহৃত হয়।
x = a ?: b
উপরের কোড ইন, x
মান নির্ধারিত হবে a
একটি নয় null
এবং b
যদি a
হয় null
।
এলভিস অপারেটরটি ব্যবহার না করে সমতুল্য কোটলিন কোডটি নীচে রয়েছে:
x = if(a == null) b else a