কোটলিনে একক বিস্মৃত চিহ্ন


141

কোটলিনে একটি বিস্মৃত চিহ্নটির অর্থ কী? আমি এটি কয়েকবার দেখেছি বিশেষত জাভা এপিআই ব্যবহার করার সময়। তবে আমি এটি ডকুমেন্টেশনে বা স্ট্যাকওভারফ্লোতে খুঁজে পাইনি।

উত্তর:


155

তাদের প্ল্যাটফর্মের ধরণ বলা হয় এবং তাদের অর্থ হ'ল কোটলিন জানেন না যে সেই মানটি হতে পারে বা নাও পারে nullএবং এটি নির্ধারণযোগ্য কি না তা সিদ্ধান্ত নেওয়া আপনার পক্ষে।

সংক্ষেপে, সমস্যাটি হ'ল জাভা থেকে আসা কোনও রেফারেন্স শূন্য হতে পারে এবং ডিজাইন অনুসারে কোটলিন নাল-নিরাপদ থাকায় ব্যবহারকারীকে প্রতিটি জাভা মান বাতিল করতে বা নিরাপদ কলগুলি ব্যবহার করতে বাধ্য করেছিল ( ?.) অথবা নাল-নথী ( !!)। খাঁটি কোটলিন বিশ্বে যারা খুব সুবিধাজনক বৈশিষ্ট্যযুক্ত তারা কোটলিন / জাভা সেটিংয়ে আপনাকে প্রায়শই ব্যবহার করতে হয় তখন বিপর্যয়ে পরিণত হয়।

এই কারণেই আমরা জাভা আন্তঃবিদ্যুতের বিষয়টি বিবেচনা করে কোটলিনের টাইপ সিস্টেমটিকে আরও স্বচ্ছন্দ করে তুলেছি: এখন জাভা থেকে আসা রেফারেন্সগুলিতে বিশেষভাবে চিহ্নিত চিহ্ন রয়েছে - কোটলিন ব্লগ


2
সব ভাল বলেছেন এবং সম্পন্ন। যাইহোক, আমি কেবল এটি বলে ভাল বোধ করি নাplatform types
জয়দীপডাব্লু

61

প্ল্যাটফর্ম ধরণের জন্য এটি স্বরলিপি :

T!অর্থ " Tবা T?"


কেন T" T!বা T?" অর্থ নয়
আর্স্ট

টি! মানে নন-টি, টি? অর্থ নলাবল কোটলিন কেন এটি করে না ...
আর্স্ট

4
কারণ সুস্পষ্ট কারণে সেরা ডিফল্ট হ'ল "অ-অযোগ্য" এবং ডিফল্টটির স্বল্পতম স্বাক্ষর হওয়ার জন্য এটি একটি ভাল নকশা। এভাবে T"অ-অযোগ্য" তৈরি করা হয়েছিল, এবং
বাকীটি

13

প্রকারের সাথে চিহ্নিত একটি প্রকারকে প্ল্যাটফর্ম টাইপ! বলা হয় যা জাভা থেকে আগত একটি প্রকার এবং সম্ভবত এটি হতে পারে । এটা কি ডিফল্টরূপে Kotlin কম্পাইলার infers যখন জাভা কলিং (অধিকাংশ মৌলিক ক্ষেত্রে, জাভা পদ্ধতি করা যেতে পারে সটীক এই কাছাকাছি পেতে)। আপনার অবশ্যই প্ল্যাটফর্মের প্রকারগুলি হ্রাসযোগ্য প্রকার হিসাবে হ্যান্ডেল করা উচিত , যদি না আপনি অবশ্যই জানেন যে নির্দিষ্ট এপিআই আর ফিরে আসবে না । সংকলকটি প্ল্যাটফর্মের প্রকারগুলিকে নাল এবং অ-নাল উভয় প্রকারের ভেরিয়েবলগুলিতে বরাদ্দ করতে দেয়।nullnull

প্ল্যাটফর্ম প্রকারের জন্য স্বরলিপি

[...]

T!মানে " T or T?" [...]

আপনি প্ল্যাটফর্মের প্রকারগুলিকে " অজানা নালাগ্রতার ধরণ " হিসাবে উল্লেখ করতে পারেন । এটিও জেনে রাখা জরুরী যে আপনি নিজের প্রকারের জন্য উদ্দীপনা চিহ্নযুক্ত ধরণটি ব্যবহার করতে পারবেন না, এটি কোটলিন সিনট্যাক্সের অংশ নয়, এটি কেবল একটি স্বরলিপি


'সম্ভবত সম্ভবত' এর মতো বাক্যাংশগুলি সহায়তা করে না
ইওয়ান

9

একক বিস্ময়কর চিহ্ন দিয়ে শেষ হওয়া ধরণের নাম বা শ্রেণীর নামগুলিকে কোটলিনে প্ল্যাটফর্ম প্রকারগুলি! বলা হয় । আপনি পুরানো জাভা কোড সহ কোটলিনে কাজ করার সময় আপনি এগুলি খুঁজে পাবেন যাতে ননযোগ্যতার তথ্য থাকে না।

উদাহরণ স্বরূপ:

অবিচ্ছেদ্য তথ্য: নুলযোগ্য টাইপ

@Nullable Stringজাভা মধ্যে String?কোটলিন হিসাবে বিবেচনা করা হয়।

নন-নাল তথ্য: নন-নাল টাইপ

@NotNull Stringজাভা মধ্যে Stringকোটলিন হিসাবে বিবেচনা করা হয়।

কোনও তথ্য নেই: প্ল্যাটফর্মের ধরণ

Stringজাভাতে টিকা ছাড়াই String!কোটলিন হিসাবে বিবেচিত ।


প্ল্যাটফর্মের ধরণগুলি কীভাবে মোকাবেলা করবেন?

আপনি একটি প্ল্যাটফর্ম ধরণের সাথে কাজ করতে পারেন হয় নাল বা নন-নাল হিসাবে। সংকলক আপনাকে এই ধরণের সমস্ত পদ্ধতি কল করার অনুমতি দেবে। এগুলি কীভাবে ব্যবহার করবেন এটি আপনার দায়িত্ব। যদি আপনি জানেন যে মানটি নালাগুলি হতে পারে তবে এর উপর পদ্ধতিগুলি বলার আগে আপনাকে নাল দিয়ে তুলনা করা উচিত। যদি আপনি জানেন যে এটি নাল নয়, তবে আপনি সরাসরি এটি ব্যবহার করতে পারেন তবে জাভা হিসাবে, যদি আপনার শূন্যতা সম্পর্কে ধারণা অনুমান করা যায় তবে আপনি ব্যতিক্রম পাবেন।

নোট করুন যে আপনি কোটলিন কোডে প্ল্যাটফর্মের প্রকারগুলি ঘোষণা করতে পারবেন না, সেগুলি কেবল জাভা কোড থেকে আসে।


উত্তরাধিকার এবং প্ল্যাটফর্ম প্রকার

কোটলিন কোডে জাভা পদ্ধতিগুলিকে ওভাররাইড করার সময়, আপনার কাছে প্যারামিটারগুলি ঘোষণা করতে হবে এবং প্রকারগুলি বাতিল বা অ-নাল হিসাবে প্রেরণ করতে হবে। আপনার এটিকে বিজ্ঞতার সাথে চয়ন করতে হবে, কারণ আপনি যদি প্যারামিটারগুলি নন-নাল করার সিদ্ধান্ত নেন তবে কোটলিন সংকলক এই নন-নাল প্যারামিটারগুলির জন্য নন-নাল জেনারেশন তৈরি করে। এবং পরের বার যখন আপনি এই কোটলিন কোডটি জাভা থেকে ফিরে অ্যাক্সেস করবেন এবং আপনি একটি নাল মান পাস করবেন, আপনি ব্যতিক্রম পাবেন।

আশা করি যা প্ল্যাটফর্মের প্রকারগুলি সম্পর্কে আপনার সমস্ত সন্দেহ দূর করতে সহায়তা করে।


3

আমি এটি কয়েকবার দেখেছি বিশেষত জাভা এপিআই ব্যবহার করার সময়

হিসাবে s1m0nw1 দ্বারা উল্লিখিত, T!মানে T or T?। পরের প্রশ্নটি: কী T?? এটি https://kotlinlang.org/docs/references/null-safety.html এ সুন্দরভাবে নথিভুক্ত করা হয়েছে । Kotlin নির্দিষ্ট উপাদানের হতে করার অনুমতি দেয় না null, যেমন String, জাভা অসদৃশ

নালগুলিকে অনুমতি দেওয়ার জন্য, আমরা স্ট্রিং লিখিত নালিং স্ট্রিং হিসাবে একটি ভেরিয়েবল ঘোষণা করতে পারি ?:

var b: String? = "abc"
b = null // ok

[...]

b?.length 

এটি খ.শক্তি ফেরত দেয় যদি বি শূন্য না হয় এবং অন্যথায় নাল হয়। এই প্রকাশের ধরণটি Int?


0

কোটলিনে প্ল্যাটফর্ম ধরণ থেকে অংশ :

কোনও Person?প্রকারকে alচ্ছিক (উদাঃ ) হিসাবে স্পষ্টভাবে উল্লেখ করার পাশাপাশি কোটলিন আমাদের অন্য একটি জন্তুটির সাথে উপস্থাপন করেন, যাকে বলা হয় Platform Type, পরিবর্তে একক বিস্মৃত চিহ্ন দিয়ে নির্দিষ্ট করে (যেমন Person!)। জাভা-র মতো নাল-অনিরাপদ প্ল্যাটফর্মগুলি থেকে কোড অ্যাক্সেস করার সময়, এই ধারণাটি সামঞ্জস্যতার কারণে তৈরি করা হয়েছে। এটি প্রায়শই ক্ষেত্রে হয় যে জাভা লাইব্রেরি ব্যবহার করার সময়, অনেকগুলি পদ্ধতি ফিরে আসে SomeType!, যেহেতু কোটলিন সংকলক ফলাফলটি অগ্রহণযোগ্য হয় বা না হয় তা নির্ধারণ করতে পারে না।

উদাহরণ স্বরূপ:

(Mutable)Collection<T>! 

কেবলমাত্র নিম্নলিখিতটির অর্থ: " টি এর জাভা সংগ্রহটি পরিবর্তনীয় হতে পারে বা নাও পারে, আড়ালযোগ্য বা নাও হতে পারে "।

আশাকরি এটা সাহায্য করবে.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.