কোটলিনে এই অভিব্যক্তির সমতুল্য কী?
a ? b : c
কোটলিনে এটি বৈধ কোড নয়।
কোটলিনে এই অভিব্যক্তির সমতুল্য কী?
a ? b : c
কোটলিনে এটি বৈধ কোড নয়।
উত্তর:
কোটলিনে, if
বিবৃতিগুলি হল অভিব্যক্তি। সুতরাং নিম্নলিখিত কোড সমতুল্য:
if (a) b else c
ভাব এবং বিবৃতি মধ্যে পার্থক্য এখানে গুরুত্বপূর্ণ। জাভা / সি # / জাভাস্ক্রিপ্টে, if
একটি বিবৃতি গঠন করে, যার অর্থ এটি কোনও মানকে সমাধান করে না। আরও দৃ concrete়ভাবে, আপনি এটিকে কোনও ভেরিয়েবলের জন্য বরাদ্দ করতে পারবেন না।
// Valid Kotlin, but invalid Java/C#/JavaScript
var v = if (a) b else c
আপনি যদি এমন ভাষা থেকে এসে থাকেন যেখানে if
বিবৃতি থাকে তবে এটিকে অস্বাভাবিক মনে হতে পারে তবে শীঘ্রই এই অনুভূতিটি হ্রাস পাবে।
when
।
x = a==b
b + if (a) c else d
বনাম b + (c if (a) else d)
। দ্বিতীয়টির জন্য অতিরিক্ত বন্ধনী প্রয়োজন। কারণ c
শর্তটি দ্বারা আবদ্ধ নয় এবং else
।
আপনি আপনার নিজের সংজ্ঞায়িত করতে পারে Boolean
এক্সটেনশন ফাংশন যা রিটার্ন null
যখন Boolean
হয় false
একটি কাঠামো তিন অপারেটর অনুরূপ প্রদান:
infix fun <T> Boolean.then(param: T): T? = if (this) param else null
এটি এর a ? b : c
মত একটি অভিব্যক্তি অনুবাদ করে তুলবে a then b ?: c
:
println(condition then "yes" ?: "no")
আপডেট: তবে জাভা-জাতীয় আরও কিছু শর্তসাপেক্ষ সুইচ করতে আপনার এমন কিছু প্রয়োজন হবে
infix fun <T> Boolean.then(param: () -> T): T? = if (this) param() else null
println(condition then { "yes" } ?: "no")
ল্যাম্বডায় মনোযোগ দিন। এর বিষয়বস্তু হিসাব যতক্ষণ না আমরা নিশ্চিত করতে স্থগিত করা উচিত নিশ্চিত condition
হয়true
এইটিকে আনাড়ি মনে হচ্ছে, এ কারণেই কোটলিনে জাভা টের্নারি অপারেটরটি বন্দর করার জন্য উচ্চ চাহিদা রয়েছে বলে অনুরোধ রয়েছে
infix inline fun<T> Boolean.then(param: ()->T):T? = if(this) param() else null
true then { null } ?: "not-null"
if (a) b else c
আপনি তিনটি অপারেটর এক্সপ্রেশন পরিবর্তে কি ব্যবহার করতে পারেন a ? b : c
।
Kotlin অনেক নিয়ন্ত্রণ বিবৃতি সহ if
, when
বা এমনকি try
হিসাবে ব্যবহার করা যেতে পারে এক্সপ্রেশন । এর অর্থ এই যে এর ফলস্বরূপ একটি ভেরিয়েবল বরাদ্দ করা যায়, কোনও ফাংশন থেকে ফিরে আসা যায় can
কোটলিনের অভিব্যক্তির ফলস্বরূপ, ভাষার সত্যিকার অর্থে টের্নারি অপারেটরের প্রয়োজন নেই ।
if (a) b else c
আপনি তিনটি অপারেটর এক্সপ্রেশন পরিবর্তে কি ব্যবহার করতে পারেন a ? b : c
।
আমি মনে করি ধারণাটিটি হ'ল পূর্বের অভিব্যক্তিটি আরও পঠনযোগ্য কারণ সবাই জানেন যে কী ifelse
করে, তবে ? :
যদি আপনি ইতিমধ্যে বাক্যবিন্যাসের সাথে পরিচিত না হন তবে এটি অস্পষ্ট।
তবুও, আমাকে স্বীকার করতে হবে যে আমি প্রায়শই বেশি সুবিধাজনক টার্নারি অপারেটরটি মিস করি ।
অন্যান্য বিকল্প
কখন
when
শর্তাদি যাচাই করা হয় এমন সময় আপনি কোটলিনে ব্যবহৃত কনস্ট্রাক্টগুলিও দেখতে পাবেন । এটি যদি অন্যভাবে ক্যাসকেডগুলি বিকল্প উপায়ে প্রকাশ করারও একটি উপায়। নিম্নলিখিতটি ওটি উদাহরণগুলির সাথে মিলে যায়।
when(a) {
true -> b
false -> c
}
এক্সটেনশানগুলি
অন্যান্য উত্তরের হিসাবে অনেক ভাল উদাহরণ ( কোটলিন টার্নারি কন্ডিশনাল অপারেটর ) দেখায়, এক্সটেনশনগুলিও আপনার ব্যবহারের ক্ষেত্রে সমাধানের ক্ষেত্রে সহায়তা করতে পারে।
নিজের জন্য আমি নিম্নলিখিত এক্সটেনশন ফাংশনগুলি ব্যবহার করি:
fun T?.or<T>(default: T): T = if (this == null) default else this
fun T?.or<T>(compute: () -> T): T = if (this == null) compute() else this
প্রথমটি প্রদত্ত ডিফল্ট মান ফেরত দেবে যদি বস্তুর শূন্য হয়। দ্বিতীয় একই ক্ষেত্রে ল্যাম্বডায় প্রদত্ত প্রকাশের মূল্যায়ন করবে।
ব্যবহার:
1) e?.getMessage().or("unknown")
2) obj?.lastMessage?.timestamp.or { Date() }
ব্যক্তিগতভাবে আমার জন্য কোডটি if
নির্মাণের ইনলাইনিংয়ের চেয়ে বেশি পঠনযোগ্য above
e.getMessage() ?: "unknown"
। দ্বিতীয়টি হিসাবে প্রকাশ করা যেতে পারেobj?.lastMessage?.timestamp ?: { Date() }()
জাভা এর সমতুল্য টার্নারি অপারেটর
a ? b : c
এক লাইনে কোটলিনে একটি সাধারণ আইএফ
if(a) b else c
সেখানে কোনও টের্নারি অপারেটর নেই (শর্ত? তাহলে: অন্যথায়), কারণ সাধারণ যদি এই ভূমিকাতে ভাল কাজ করে।
https://kotlinlang.org/docs/reference/control-flow.html#if-expression
নুল তুলনার জন্য বিশেষ ক্ষেত্রে
আপনি এলভিস অপারেটর ব্যবহার করতে পারেন
if ( a != null ) a else b
// equivalent to
a ?: b
নেই কোন তিন অপারেটর kotlin মধ্যে, যেমন if else
ব্লক আয় মান
সুতরাং, আপনি করতে পারেন:
val max = if (a > b) a else b
জাভা এর পরিবর্তেmax = (a > b) ? b : c
আমরা নির্মাণও ব্যবহার করতে পারি when
, এটি মানও ফেরত দেয়:
val max = when(a > b) {
true -> a
false -> b
}
কোটলিন ডকুমেন্টেশনের লিঙ্কটি এখানে: কন্ট্রোল ফ্লো: যদি, কখন, কখন, কিছুক্ষণ
কোটলিনে,
if
একটি অভিব্যক্তি, অর্থাত্ এটি একটি মান দেয়। অতএব কোনও টের্নারি অপারেটর নেই(condition ? then : else)
, কারণ সাধারণ যদি এই ভূমিকাতে সূক্ষ্মভাবে কাজ করে। এখান থেকে ম্যানুয়াল উত্স
// Traditional usage
var max = a
if (a < b) max = b
// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// As expression
val max = if (a > b) a else b
কয়েকটি উত্তরের ক্ষেত্রে অন্যান্য উত্তরে উল্লেখ নেই।
চেহারাও যেহেতু takeIf মধ্যে Kotlin 1.1 তিন অপারেটর a ? b : c
এই মত প্রকাশ করা যেতে পারে:
b.takeIf { a } ?: c
সি এর ক্ষেত্রে এটি আরও খাটো হয়ে যায় null
:
b.takeIf { a }
এছাড়াও নোট করুন যে জাভা বিশ্বে সাধারণ নাল চেকগুলি value != null ? value : defaultValue
আদর্শিক কোটলিনে কেবল অনুবাদ করতে অনুবাদ করে value ?: defaultValue
।
অনুরূপ a != null ? b : c
অনুবাদ করা যেতে পারে a?.let { b } ?: c
।
b.takeIf { a } ?: c
চেয়ে খাটো এবং আরও পাঠযোগ্য কীভাবে if (a) b else c
? টেরনেরে অপারেটর অবশ্যই কোটলিনে একটি অনুপস্থিত বৈশিষ্ট্য কারণ পরিবর্তনশীল নাম এবং শর্তটি দীর্ঘ হতে পারে এবং আপনাকে লাইনটি খারাপ করে দেয় যা খারাপ
takeIf
সর্বদা সত্য-কেসকে মূল্যায়ন করে (এখানে a
)। যদি a
মিথ্যা বলে মনে হয় তবে কেবল এই অভিব্যক্তিটিকে অকারণে গণনা করা যাবে না, তবে আপনি স্মার্ট ক্যাসেটলা থেকে উপকার করতে পারবেন না if (a is Int) { a + 3 }
।
{ a }
অলসভাবে মূল্যায়ন করা ল্যাম্বদা।
b
) মূল্যায়ন করা উচিত" হওয়া উচিত । তবে এমনকি { a }
, অলসতার সময়ও , অভিব্যক্তিটির ফলাফল নির্ধারণের জন্য অবশ্যই মূল্যায়ন করা উচিত ।
দস্তাবেজগুলি একবার দেখুন :
কোটলিনে, যদি একটি অভিব্যক্তি হয়, অর্থাত্ এটি একটি মান দেয়। অতএব সেখানে কোনও টের্নারি অপারেটর নেই (শর্ত? তাহলে: অন্যথায়), কারণ সাধারণ যদি এই ভূমিকাতে ভাল কাজ করে।
জাভা
int temp = a ? b : c;
কোটলিনের সমান :
var temp = if (a) b else c
কাজ :
আসুন নিম্নলিখিত উদাহরণটি বিবেচনা করুন:
if (!answer.isSuccessful()) {
result = "wrong"
} else {
result = answer.body().string()
}
return result
আমাদের কোটলিনে নিম্নলিখিত সমতুল্য প্রয়োজন:
রিটার্ন (! answer.isSuccessful ())
?
"ভুল":
answer.body ()। স্ট্রিং ()
সমাধান :
1. একটি । আপনি if-expression
কোটলিনে ব্যবহার করতে পারেন :
return if (!answer.isSuccessful()) "wrong" else answer.body().string()
1. বি । আপনি এটি ফ্লিপ করলে এটি আরও ভাল হতে পারে if-expression
(আসুন এটি ছাড়াই করুন not
):
return if (answer.isSuccessful()) answer.body().string() else "wrong"
ঘ । কোটলিনের এলভিস অপারেটর ?:
আরও ভাল একটি কাজ করতে পারে:
return answer.body()?.string() ?: "wrong"
ঘ । অথবা Extension function
সংশ্লিষ্ট Answer
শ্রেণীর জন্য একটি ব্যবহার করুন :
fun Answer.bodyOrNull(): Body? = if (isSuccessful()) body() else null
ঘ । এটি ব্যবহার করে Extension function
আপনি কোনও কোডকে ধন্যবাদ হ্রাস করতে পারেন Elvis operator
:
return answer.bodyOrNull()?.string() ?: "wrong"
৫ । অথবা কেবল when
অপারেটর ব্যবহার করুন :
when (!answer.isSuccessful()) {
parseInt(str) -> result = "wrong"
else -> result = answer.body().string()
}
আশাকরি এটা সাহায্য করবে.
যখন সি-জাতীয় ভাষার স্যুইচ অপারেটরকে প্রতিস্থাপন করে। সর্বাধিক ফর্ম এ এটির মতো দেখাচ্ছে
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> {
print("x is neither 1 nor 2")
}
}
when
কোনও বক্তব্য হিসাবে নয়, বিবৃতি হিসাবে রয়েছে । ত্রৈমাসিকিক শর্তসাপেক্ষ অভিব্যক্তিগুলির সাথে আরও প্রাসঙ্গিক তুলনা হ'ল প্রতিটি শাখাকে একটি মূল্য ফেরত দেওয়া হবে, যেমন সম্পূর্ণ যখন অভিব্যক্তি একটি মূল্যকে মূল্যায়ণ করে (যেমন ত্রিশটি শর্তসাপেক্ষে ঘটে)।
কোটলিনে কোনও টেনারি অপারেটর নেই। এটি প্রথম নজরে সমস্যাযুক্ত বলে মনে হচ্ছে। তবে ভাবেন আমরা অন্য কোনও বিবৃতি যদি ইনলাইন দিয়ে এটি করতে পারি কারণ এটি এখানে প্রকাশ। কেবল আমাদের করতে হবে -
var number = if(n>0) "Positive" else "Negetive"
আমাদের প্রয়োজন মতো অনেকগুলি ব্লক করা হলে আমরা এখানে অন্য কিছু করতে পারি। Like-
var number = if(n>0) "Positive" else if(n<0) "Negative" else "Zero"
সুতরাং এই লাইনটি টেনারি অপারেটরের তুলনায় এত সহজ এবং বেশি পঠনযোগ্য। যখন আমরা জাভাতে একাধিক ত্রিনিরি অপারেটর ব্যবহার করি তখন তা ভয়াবহ বলে মনে হয়। তবে এখানে আমাদের একটি পরিষ্কার বাক্য গঠন রয়েছে। এমনকি আমরা এটি একাধিক লাইনেও লিখতে পারি।
আপনি var a= if (a) b else c
টার্নারি অপারেটরের জায়গায় ব্যবহার করতে পারেন ।
কোটলিনের আরেকটি ভাল ধারণা এলভিস অপারেটর। আপনার প্রতিবার নাল পরীক্ষা করার দরকার নেই।
val l = b?.length ?: -1
এটি দৈর্ঘ্যটি ফিরিয়ে আনবে যদি বি শূন্য না হয় অন্যথায় এটি ডান পাশের বিবৃতি কার্যকর করে।
ড্রু নোকসের উদ্ধৃতি অনুসারে, কোটলিন যদি বিবৃতি হিসাবে অভিব্যক্তি হিসাবে ব্যবহার করে, সুতরাং টেরনারির শর্তসাপেক্ষ অপারেটরটির আর প্রয়োজন হয় না,
তবে এক্সটেনশন ফাংশন এবং ইনফিক্স ওভারলোডিংয়ের সাহায্যে আপনি নিজে এটি প্রয়োগ করতে পারেন, এখানে একটি উদাহরণ
infix fun <T> Boolean.then(value: T?) = TernaryExpression(this, value)
class TernaryExpression<out T>(val flag: Boolean, val truly: T?) {
infix fun <T> or(falsy: T?) = if (flag) truly else falsy
}
তারপরে এটি ব্যবহার করুন
val grade = 90
val clazz = (grade > 80) then "A" or "B"
আর একটি আকর্ষণীয় পদ্ধতির ব্যবহার হবে when
:
when(a) {
true -> b
false -> b
}
আরও কিছু জটিল পরিস্থিতিতে বেশ সহজ হতে পারে। এবং সত্যই, এটি আমার চেয়ে বেশি পঠনযোগ্যif ... else ...
আপনি কোটলিনে এটি অনেক উপায়ে করতে পারেন
ব্যবহার করে যদি
if(a) b else c
ব্যবহার করার সময়
when (a) {
true -> print("value b")
false -> print("value c")
else -> {
print("default return in any other case")
}
}
নাল সুরক্ষা
val a = b ?: c
কোটলিনে কোনও টিনারারি অপারেশন নেই তবে এর আশপাশে কাজ করার কিছু মজার উপায় রয়েছে। অন্যরা যেমন উল্লেখ করেছে, কোটলিনে সরাসরি অনুবাদ এটির মতো দেখাবে:
val x = if (condition) result1 else result2
তবে, ব্যক্তিগতভাবে, আমার মনে হয় যে এটি কিছুটা বিশৃঙ্খল এবং পড়ার পক্ষে শক্ত হয়ে উঠতে পারে। লাইব্রেরিতে নির্মিত আরও কয়েকটি অপশন রয়েছে। আপনি এলভিস অপারেটরের সাথে টেকআইফ {use ব্যবহার করতে পারেন:
val x = result1.takeIf { condition } ?: result2
সেখানে যা ঘটছে তা হ'ল টেকআইফ}} আদেশটি আপনার ফলাফল 1 বা নালটি প্রদান করে এবং এলভিস অপারেটর নাল বিকল্পটি পরিচালনা করে। কিছু অতিরিক্ত বিকল্প রয়েছে, নিরবিচ্ছিন্ন {take, উদাহরণস্বরূপ:
val x = result1.takeUnless { condition } ?: result2
ভাষাটি পরিষ্কার, আপনি জানেন যে এটি কী করছে।
যদি এটি সাধারণভাবে ব্যবহৃত শর্ত হয় তবে আপনি কোনও মজাদার কিছু করতে পারেন যেমন একটি ইনলাইন এক্সটেনশন পদ্ধতি ব্যবহার করুন। ধরা যাক আমরা উদাহরণস্বরূপ কোনও গেমের স্কোর ট্র্যাক করতে চাই, এবং প্রদত্ত শর্তটি পূরণ না হলে আমরা সর্বদা 0 ফিরে আসতে চাই:
inline fun Int.zeroIfFalse(func: () -> Boolean) : Int = if (!func.invoke()) 0 else this
ঠিক আছে, কুৎসিত মনে হচ্ছে। তবে এটি কখন ব্যবহৃত হবে তা বিবেচনা করুন:
var score = 0
val twoPointer = 2
val threePointer = 3
score += twoPointer.zeroIfFalse { scoreCondition }
score += threePointer.zeroIfFalse { scoreCondition }
আপনি দেখতে পাচ্ছেন, কোটলিন আপনি কীভাবে আপনার কোডটি প্রকাশ করতে পছন্দ করেন তাতে অনেক নমনীয়তার প্রস্তাব দেয়। আমার উদাহরণগুলির অসংখ্য বৈচিত্র রয়েছে এবং সম্ভবত আমি এখনও আবিষ্কারও করতে পারি নি। আশা করি এটা কাজে লাগবে!
takeIf
সত্যিই আমার প্রিয় বিকল্পটি, খুব মার্জিত।
মনে রাখবেন টার্নারি অপারেটর এবং এলভিস অপারেটর অনেক জনপ্রিয় ভাষায় ভিন্ন ভিন্নভাবে কোটলিনে পৃথক অর্থ ধারণ করে। এরকম expression? value1: value2
আপনার দ্বারা গালি দিতে হবে Kotlin অন্য কোন ভাষা মতো কম্পাইলার যেমন আছে Kotlin কোন তিন অপারেটর উল্লেখ হিসাবে সরকারী দস্তাবেজ । কারণটি হ'ল যদি, যখন এবং চেষ্টা করার মতামতগুলি নিজেরাই মানগুলি ফিরিয়ে দেয়।
সুতরাং, করছেন expression? value1: value2
দ্বারা প্রতিস্থাপন করা যেতে পারে
ভাল সর্বাধিক = যদি (ক> খ) মুদ্রণ ("একটি চয়ন করুন") অন্য মুদ্রণ করুন ("বি বেছে নিন")
কোলটিনের যে এলভিস অপারেটর রয়েছে কেবল সেগুলি কেবল প্রনামযোগ্য ভেরিয়েবলের ক্ষেত্রে কাজ করে:
আমি ভালো কিছু করতে হলে
value3 = value1 ?: value2
তারপর যদি মান 1 হয় নাল তারপর VALUE2 প্রত্যাবর্তিত হবে না অন্যথায় মান 1 প্রত্যাবর্তিত হবে না।
এই উত্তরগুলি থেকে আরও সুস্পষ্ট বোঝাপড়া অর্জন করা যায় ।
আপনি এর if
জন্য কোটলিনে এক্সপ্রেশন ব্যবহার করতে পারেন । কোটলিনে if
ফলাফল মান সহ একটি অভিব্যক্তি। কোটলিনে আমরা লিখতে পারি
fun max(a: Int, b: Int) = if (a > b) a else b
এবং জাভাতে আমরা একই অর্জন করতে পারি তবে বৃহত্তর কোড সহ
int max(int a, int b) {
return a > b ? a : b
}
যদি আপনি মানক স্বরলিপিটি কী ব্যবহার করেন তা না করে আপনি ইনফিক্স ব্যবহার করে এটি তৈরি / অনুকরণও করতে পারেন কিছু দিয়ে করতে পারেন:
আপনার লক্ষ্য এবং ফলাফল ধরে রাখতে একটি শ্রেণী তৈরি করুন:
data class Ternary<T>(val target: T, val result: Boolean)
একটি বার্ষিক ক্রিয়াকলাপ অনুকরণ করতে কিছু infix ফাংশন তৈরি করুন
infix fun <T> Boolean.then(target: T): Ternary<T> {
return Ternary(target, this)
}
infix fun <T> Ternary<T>.or(target: T): T {
return if (this.result) this.target else target
}
তারপরে আপনি এটির মতো এটি ব্যবহার করতে সক্ষম হবেন:
val collection: List<Int> = mutableListOf(1, 2, 3, 4)
var exampleOne = collection.isEmpty() then "yes" or "no"
var exampleTwo = (collection.isNotEmpty() && collection.contains(2)) then "yes" or "no"
var exampleThree = collection.contains(1) then "yes" or "no"
ব্যবহারের জন্য আরও একটি সংক্ষিপ্ত পদ্ধতির
val value : String = "Kotlin"
value ?: ""
এখানে কোটলিন নিজেই নাল মানটি পরীক্ষা করে এবং যদি এটি নাল হয় তবে এটি খালি স্ট্রিংয়ের মানটি পাস করে।
কেন কেউ এই জাতীয় কিছু ব্যবহার করবে:
when(a) {
true -> b
false -> b
}
যখন আপনি আসলে এই জাতীয় কিছু ব্যবহার করতে পারেন ( a
এই ক্ষেত্রে বুলিয়ান):
when {
a -> b
else -> b
}
? and :
প্রকারের চেকের পরিবর্তে অযোগ্য / প্রকারের ঘোষণার সাথে বৈপরীত্য। তা ছাড়া আমি কোনও কারণ দেখতে পাচ্ছি না। আমি মনে করি কেউ অবশ্যই অবশ্যই কিছু চিন্তাভাবনা করতেন, যদি ইনলাইন থাকে তবে-অন্য শর্তটি পরীক্ষা করা উচিত। আসুন অপেক্ষা করুন এবং ভবিষ্যতের সংস্করণগুলিতে দেখুন।
প্রয়োগ () এর সাথে কাজ করার সময়, টের্নারি অপারেশনগুলির সাথে ডিল করার সময় খুব সহজ মনে হয়, কারণ এটি আরও মার্জিত এবং আপনাকে ঘর দেয়
val columns: List<String> = ...
val band = Band().apply {
name = columns[0]
album = columns[1]
year = columns[2].takeIf { it.isNotEmpty() }?.let { it.toInt() } ?: 0
}
নিম্নলিখিত ইনফিক্স ফাংশনগুলির সাহায্যে আমি পাইথনের ক্ষেত্রে অনেকগুলি সাধারণ ব্যবহারের ক্ষেত্রে এটি একইভাবে কভার করতে পারি:
class TestKotlinTernaryConditionalOperator {
@Test
fun testAndOrInfixFunctions() {
Assertions.assertThat(true and "yes" or "no").isEqualTo("yes")
Assertions.assertThat(false and "yes" or "no").isEqualTo("no")
Assertions.assertThat("A" and "yes" or "no").isEqualTo("yes")
Assertions.assertThat("" and "yes" or "no").isEqualTo("no")
Assertions.assertThat(1 and "yes" or "no").isEqualTo("yes")
Assertions.assertThat(0 and "yes" or "no").isEqualTo("no")
Assertions.assertThat(Date() and "yes" or "no").isEqualTo("yes")
@Suppress("CAST_NEVER_SUCCEEDS")
Assertions.assertThat(null as Date? and "yes" or "no").isEqualTo("no")
}
}
infix fun <E> Boolean?.and(other: E?): E? = if (this == true) other else null
infix fun <E> CharSequence?.and(other: E?): E? = if (!(this ?: "").isEmpty()) other else null
infix fun <E> Number?.and(other: E?): E? = if (this?.toInt() ?: 0 != 0) other else null
infix fun <E> Any?.and(other: E?): E? = if (this != null) other else null
infix fun <E> E?.or(other: E?): E? = this ?: other
কোটলিনে কোনও শ্রেনী অপারেটর নেই, সর্বাধিক বন্ধ হ'ল নীচের দুটি ক্ষেত্রে,
val a = true if(a) print("A is true") else print("A is false")
যদি?: এর বাম দিকে অভিব্যক্তি নাল না হয় তবে এলভিস অপারেটর এটিকে ফিরিয়ে দেয়, অন্যথায় এটি এক্সপ্রেশনটি ডানে প্রত্যাবর্তন করে। নোট করুন যে ডান হাতের এক্সপ্রেশনটি কেবল তখনই বাম-হাতের অংশটি নਾਲ হলে মূল্যায়ন করা হয়।
val name = node.getName() ?: throw IllegalArgumentException("name expected")
উদাহরণস্বরূপ: var শক্তি: অন্তর্গত = ডেটা? .get (অবস্থান)? energy শক্তি? .toInt ()?: 0
Kotlin আপনি ব্যবহার করেন তাহলে ? এটা পছন্দ যদি বিবৃতি তারপর নাল ফিরে আসবে কাজ করবে ?: 0 0 যত্ন নিতে সাহায্য করতে যাই হোক না কেন আপনি এই পার্শ্ব লিখুন আছে।
কোটলিনে আপনি এর মতো টের্নারি অপারেশন ব্যবহার করতে পারেন: val x = if(a) "add b" else "add c"
অন্যান্য ধারণাগুলি সম্পর্কে কিছু গবেষণা করার পরে, আমি নিম্নলিখিত টার্নারি অপারেটরটি পেয়েছি:
infix fun <T : Any> Boolean.yes(trueValue: T): T? = if (this) trueValue else null
infix fun <T : Any> T?.no(falseValue: T): T = this ?: falseValue
উদাহরণ ( এখানে চালানো ):
fun main() {
run {
val cond = true
val result = cond yes "True!" no "False!"
println("ternary test($cond): $result")
}
run {
val cond = false
val result = cond yes "True!" no "False!"
println("ternary test($cond): $result")
}
}
এই সংস্করণটি সাবলীল এবং নাল কোলেসিং অপারেটরের সাথে বিরোধ নয়।
then
পরিবর্তে নামকরণ হয়েছে yes
।