টিএল; ডিআর: কোনও বিশেষ সিনট্যাক্স নয়, কেবল একটি ফাংশন
কোটলিন, জাভার বিপরীতে, এর জন্য একটি বিশেষ সিনট্যাক্স নেই। পরিবর্তে, চেষ্টা-সহ-সংস্থানগুলি , স্ট্যান্ডার্ড লাইব্রেরি ফাংশন হিসাবে দেওয়া হয় use।
FileInputStream("filename").use { fis -> //or implicit `it`
//use stream here
}
useবাস্তবায়নের
@InlineOnly
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
var closed = false
try {
return block(this)
} catch (e: Exception) {
closed = true
try {
this?.close()
} catch (closeException: Exception) {
}
throw e
} finally {
if (!closed) {
this?.close()
}
}
}
এই ফাংশনটি সমস্ত Closeable?ধরণের জেনেরিক এক্সটেনশন হিসাবে সংজ্ঞায়িত করা হয় । Closeableজাভা এর ইন্টারফেস যা জাভা SE7 হিসাবে -সংস্থানগুলি ব্যবহার করার অনুমতি দেয় ।
ফাংশনটি একটি ফাংশন আক্ষরিক লাগে যা একটিতে কার্যকর হয় । জাভাতে চেষ্টা-সহ-সংস্থান হিসাবে একই , এটি একটিতে বন্ধ হয়ে যায় ।
blocktryCloseablefinally
এছাড়াও ভিতরে ঘটছে ব্যর্থতা blockসীসা closeহত্যা, যেখানে সম্ভব ব্যতিক্রম আক্ষরিক হয় শুধু তাদের উপেক্ষা করে "চাপা"। এটি চেষ্টা-সহ-সংস্থান থেকে পৃথক , কারণ জাভা এর সমাধানে এই জাতীয় ব্যতিক্রমগুলি অনুরোধ করা যেতে পারে ।
এটি কিভাবে ব্যবহার করতে
useএক্সটেনশন কোন পাওয়া যায় Closeableপাঠকদের ইত্যাদি, অর্থাত্ স্ট্রীম করে, প্রকার।
FileInputStream("filename").use {
//use your stream by referring to `it` or explicitly give a name.
}
কোঁকড়া বন্ধনীগুলির অংশটি যা হয় তা blockহয় use(একটি ল্যাম্বদা এখানে আর্গুমেন্ট হিসাবে পাস করা হয়)। ব্লকটি শেষ হওয়ার পরে, আপনি নিশ্চিত FileInputStreamহয়ে উঠতে পারেন যে এটি বন্ধ হয়ে গেছে।