কোটলিন হল একটি আধুনিক স্ট্যাটিক্যালি টাইপ করা প্রোগ্রামিং ভাষা যা 60% এরও বেশি পেশাদার অ্যান্ড্রয়েড ডেভেলপারদের দ্বারা ব্যবহৃত হয় যা উৎপাদনশীলতা, ডেভেলপারদের সন্তুষ্টি এবং কোড সুরক্ষা বৃদ্ধিতে সহায়তা করে।
Kotlin ( / ˈkɒtlɪn / ) [ 2 ] হল একটি ক্রস -প্ল্যাটফর্ম , স্ট্যাটিক্যালি টাইপ করা , টাইপ ইনফারেন্স সহ সাধারণ-উদ্দেশ্য উচ্চ-স্তরের প্রোগ্রামিং ভাষা । Kotlin সম্পূর্ণরূপে জাভার সাথে ইন্টারঅপারেট করার জন্য ডিজাইন করা হয়েছে , এবং Kotlin এর স্ট্যান্ডার্ড লাইব্রেরির JVM সংস্করণ Java Class Library এর উপর নির্ভর করে , কিন্তু type inference এর সিনট্যাক্সকে আরও সংক্ষিপ্ত করতে সাহায্য করে। Kotlin মূলত JVM কে লক্ষ্য করে, তবে JavaScript (যেমন, React ব্যবহার করে ফ্রন্টএন্ড ওয়েব অ্যাপ্লিকেশনের জন্য ) [ 3 ] অথবা LLVM এর মাধ্যমে নেটিভ কোড (যেমন, অ্যান্ড্রয়েড অ্যাপের সাথে ব্যবসায়িক যুক্তি ভাগ করে নেওয়ার জন্য নেটিভ iOS অ্যাপের জন্য ) কম্পাইল করে। [ 4 ] ভাষা উন্নয়নের খরচ JetBrains বহন করে , যখন Kotlin ফাউন্ডেশন Kotlin ট্রেডমার্ককে রক্ষা করে। [ 5 ]
৭ মে ২০১৯ তারিখে, গুগল ঘোষণা করে যে কোটলিন প্রোগ্রামিং ভাষা অ্যান্ড্রয়েড অ্যাপ ডেভেলপারদের জন্য তাদের পছন্দের ভাষা হয়ে উঠেছে। [ 6 ] ২০১৭ সালের অক্টোবরে অ্যান্ড্রয়েড স্টুডিও ৩.০ প্রকাশের পর থেকে , কোটলিনকে স্ট্যান্ডার্ড জাভা কম্পাইলারের বিকল্প হিসেবে অন্তর্ভুক্ত করা হয়েছে । অ্যান্ড্রয়েড কোটলিন কম্পাইলার ডিফল্টরূপে জাভা ৮ বাইটকোড নির্গত করে (যা পরবর্তী যেকোনো JVM-এ চলে), তবে জাভা ৯-কে ২০ পর্যন্ত টার্গেট করার অনুমতি দেয়, অপ্টিমাইজ করার জন্য, [ 7 ] অথবা আরও বৈশিষ্ট্যের জন্য অনুমতি দেয়; জাভা ১৬-তে প্রবর্তিত JVM-এর জন্য দ্বিমুখী রেকর্ড ক্লাস ইন্টারঅপারেবিলিটি সমর্থন রয়েছে , যা কোটলিন ১.৫-এর মতো স্থিতিশীল বলে বিবেচিত হয়।
কোটলিনের ওয়েবের জন্য কোটলিন/জেএস-এর সমর্থন রয়েছে, একটি মধ্যবর্তী প্রতিনিধিত্ব -ভিত্তিক ব্যাকএন্ডের মাধ্যমে যা ডিসেম্বর ২০২২ সালে প্রকাশিত সংস্করণ ১.৮ থেকে স্থিতিশীল ঘোষণা করা হয়েছে। কোটলিন/নেটিভ (যেমন অ্যাপল সিলিকন সমর্থন) নভেম্বর ২০২৩ সালে প্রকাশিত সংস্করণ ১.৯.২০ থেকে স্থিতিশীল ঘোষণা করা হয়েছে। [ 8 ] [ 9 ]
ইতিহাস
কোটলিন মাসকটের একটি 2D ছবি
কোটলিন মাসকটের একটি 3D ছবি
নাম
এই নামটি সেন্ট পিটার্সবার্গের কাছে ফিনল্যান্ড উপসাগরে অবস্থিত একটি রাশিয়ান দ্বীপ কোটলিন দ্বীপ থেকে এসেছে । কোটলিনের প্রাক্তন প্রধান ডিজাইনার আন্দ্রে ব্রেসলাভ উল্লেখ করেছেন যে দলটি জাভা প্রোগ্রামিং ভাষার অনুকরণে একটি দ্বীপের নামানুসারে এর নামকরণ করার সিদ্ধান্ত নিয়েছে, যা ইন্দোনেশিয়ান দ্বীপ জাভার সাথে একই নাম ভাগ করে নেয় । [ 10 ]
উন্নয়ন
কোটলিন গিট রিপোজিটরিতে প্রথম কমিট করা হয়েছিল ৮ নভেম্বর, ২০১০ তারিখে। [ 11 ]
২০১১ সালের জুলাই মাসে, জেটব্রেইনস প্রজেক্ট কোটলিন উন্মোচন করে, যা জেভিএমের জন্য একটি নতুন ভাষা, যা এক বছর ধরে উন্নয়নাধীন ছিল। [ 12 ] জেটব্রেইনসের প্রধান দিমিত্রি জেমেরভ বলেন যে বেশিরভাগ ভাষায় তারা যে বৈশিষ্ট্যগুলি খুঁজছিলেন তা ছিল না, স্কালা বাদে। তবে, তিনি স্কালার ধীর সংকলন সময়ের অভাবকে একটি ত্রুটি হিসাবে উল্লেখ করেছেন। [ 12 ] কোটলিনের ঘোষিত লক্ষ্যগুলির মধ্যে একটি হল জাভার মতো দ্রুত সংকলন করা। ২০১২ সালের ফেব্রুয়ারিতে, জেটব্রেইনস অ্যাপাচি ২ লাইসেন্সের অধীনে প্রকল্পটি ওপেন সোর্স করে । [ 13 ]
জেটব্রেইনস আশা করেছিল যে কোটলিন ইন্টেলিজে আইডিইএ বিক্রয়কে এগিয়ে নেবে । [ 14 ]
কোটলিন ১.০ ১৫ ফেব্রুয়ারি, ২০১৬ তারিখে প্রকাশিত হয়। [ 15 ] এটিকে প্রথম আনুষ্ঠানিকভাবে স্থিতিশীল রিলিজ হিসেবে বিবেচনা করা হয় এবং জেটব্রেইনস এই সংস্করণ থেকে দীর্ঘমেয়াদী ব্যাকওয়ার্ড সামঞ্জস্যের প্রতিশ্রুতিবদ্ধ।
গুগল আই/ও ২০১৭ তে , গুগল অ্যান্ড্রয়েডে কোটলিনের জন্য প্রথম-শ্রেণীর সমর্থন ঘোষণা করেছে । [ 16 ]
কোটলিন ১.১ ১ মার্চ, ২০১৭ তারিখে প্রকাশিত হয়েছিল। [ 17 ]
Kotlin 1.2 ২৮ নভেম্বর, ২০১৭ তারিখে প্রকাশিত হয়েছিল। [ 18 ] JVM এবং JavaScript প্ল্যাটফর্মের মধ্যে কোড শেয়ারিং বৈশিষ্ট্যটি এই রিলিজে নতুনভাবে যুক্ত করা হয়েছে (মাল্টিপ্ল্যাটফর্ম প্রোগ্রামিং এখন একটি বিটা বৈশিষ্ট্য [ 19 ] যা "পরীক্ষামূলক" থেকে আপগ্রেড করা হয়েছে)। নতুন Kotlin/JS Gradle প্লাগইন দিয়ে একটি পূর্ণ-স্ট্যাক ডেমো তৈরি করা হয়েছে। [ 20 ] [ 21 ]
কোটলিন ১.৩ ২৯ অক্টোবর ২০১৮ তারিখে প্রকাশিত হয়েছিল, অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের সাথে ব্যবহারের জন্য কোরোটিনের জন্য সমর্থন যোগ করে। [ 22 ]
৭ মে ২০১৯ তারিখে, গুগল ঘোষণা করে যে কোটলিন প্রোগ্রামিং ভাষা এখন অ্যান্ড্রয়েড অ্যাপ ডেভেলপারদের জন্য তাদের পছন্দের ভাষা। [ 6 ]
কোটলিন ১.৪ ২০২০ সালের আগস্টে প্রকাশিত হয়েছিল, উদাহরণস্বরূপ অ্যাপলের প্ল্যাটফর্মগুলির জন্য সমর্থনে, অর্থাৎ অবজেক্টিভ-সি / সুইফট ইন্টারঅপে কিছু সামান্য পরিবর্তন আনা হয়েছিল । [ 23 ]
কোটলিন ১.৫ ২০২১ সালের মে মাসে প্রকাশিত হয়েছিল।
কোটলিন ১.৬ ২০২১ সালের নভেম্বরে প্রকাশিত হয়েছিল।
কোটলিন ১.৭ ২০২২ সালের জুন মাসে প্রকাশিত হয়েছিল, যার মধ্যে নতুন কোটলিন কে২ কম্পাইলারের আলফা সংস্করণও অন্তর্ভুক্ত ছিল । [ 24 ]
কোটলিন ১.৮ ডিসেম্বর ২০২২ সালে মুক্তি পায়, ১.৮.০ ১১ জানুয়ারী, ২০২৩ সালে মুক্তি পায়। [ 25 ]
কোটলিন ১.৯ ২০২৩ সালের জুলাই মাসে মুক্তি পায়, ১.৯.০ ৬ জুলাই, ২০২৩ সালে মুক্তি পায়। [ 26 ]
কোটলিন ২.০ ২০২৪ সালের মে মাসে মুক্তি পায়, ২.০.০ ২১ মে, ২০২৪ সালে মুক্তি পায়। [ 27 ]
কোটলিন ২.১ ২০২৪ সালের নভেম্বরে প্রকাশিত হয়েছিল, ২.১.০ ২৭ নভেম্বর, ২০২৪ সালে প্রকাশিত হয়েছিল। [ 28 ]
ডিজাইন
ডেভেলপমেন্ট লিড আন্দ্রে ব্রেসলাভ বলেছেন যে কোটলিনকে একটি শিল্প-শক্তিসম্পন্ন বস্তু-ভিত্তিক ভাষা এবং জাভার চেয়ে "ভালো ভাষা" হিসেবে ডিজাইন করা হয়েছে , তবে এটি জাভা কোডের সাথে সম্পূর্ণরূপে আন্তঃব্যবহারযোগ্য , যা কোম্পানিগুলিকে জাভা থেকে কোটলিনে ধীরে ধীরে স্থানান্তর করতে দেয়। [ 29 ]
স্টেটমেন্ট টার্মিনেটর হিসেবে সেমিকোলন ঐচ্ছিক ; বেশিরভাগ ক্ষেত্রেই কম্পাইলারকে স্টেটমেন্টটি শেষ হয়েছে কিনা তা অনুমান করার জন্য একটি নতুন লাইন যথেষ্ট । [ 30 ]
Kotlin ভেরিয়েবল ঘোষণা এবং প্যারামিটার তালিকাগুলিতে Ada , BASIC , Pascal , TypeScript এবং Rust এর মতোই ভেরিয়েবল নামের পরে ডেটা টাইপ আসে (এবং একটি কোলন বিভাজক সহ ) । বর্তমান প্রকল্পের প্রধান রোমান এলিজারভের একটি নিবন্ধ অনুসারে, এটি ভেরিয়েবলের নামের সারিবদ্ধকরণে ফলাফল দেয় এবং চোখের কাছে আরও আনন্দদায়ক হয়, বিশেষ করে যখন ধারাবাহিকভাবে কয়েকটি ভেরিয়েবল ঘোষণা থাকে এবং এক বা একাধিক প্রকার টাইপ ইনফারেন্সের জন্য খুব জটিল হয়, অথবা মানুষের পাঠকদের বোঝার জন্য স্পষ্টভাবে ঘোষণা করার প্রয়োজন হয়। [ 31 ] [ 32 ]
কোটলিনে স্কালার প্রভাব অবজেক্ট-ওরিয়েন্টেড এবং ফাংশনাল প্রোগ্রামিং উভয়ের জন্য ব্যাপক সমর্থন [ 33 ] এবং বেশ কয়েকটি নির্দিষ্ট বৈশিষ্ট্যের মধ্যে দেখা যায়:
পরিবর্তনযোগ্য এবং অপরিবর্তনীয় ভেরিয়েবলের মধ্যে পার্থক্য রয়েছে ( var বনাম val কীওয়ার্ড)
সমস্ত ক্লাস ডিফল্টরূপে সর্বজনীন এবং চূড়ান্ত (অ-উত্তরাধিকারসূত্রে)
ফাংশন এবং পদ্ধতিগুলি ডিফল্ট আর্গুমেন্ট , ভেরিয়েবল-লেন্থ আর্গুমেন্ট তালিকা এবং নামযুক্ত আর্গুমেন্টগুলিকে সমর্থন করে
কোটলিন ১.৩ চুক্তির জন্য সমর্থন যোগ করেছে, [ 34 ] যা স্ট্যান্ডার্ড লাইব্রেরি ঘোষণার জন্য স্থিতিশীল, কিন্তু ব্যবহারকারী-সংজ্ঞায়িত ঘোষণার জন্য এখনও পরীক্ষামূলক। চুক্তিগুলি আইফেলের নকশা দ্বারা অনুপ্রাণিত [ 35 ] প্রোগ্রামিং প্যারাডাইম।
ScalaJS অনুসরণ করে , Kotlin কোড জাভাস্ক্রিপ্টে স্থানান্তরিত হতে পারে , যা দুটি ভাষায় লেখা কোডের মধ্যে আন্তঃকার্যক্ষমতা প্রদান করে। এটি Kotlin-এ সম্পূর্ণ ওয়েব অ্যাপ্লিকেশন লেখার জন্য, অথবা Kotlin ব্যাকএন্ড এবং JavaScript ফ্রন্টএন্ডের মধ্যে কোড ভাগ করে নেওয়ার জন্য ব্যবহার করা যেতে পারে। [ 36 ]
বাক্য গঠন
পদ্ধতিগত প্রোগ্রামিং স্টাইল
কোটলিন জাভার স্ট্যাটিক মেথড এবং ভেরিয়েবলগুলিকে শুধুমাত্র একটি ক্লাস বডির মধ্যেই বিদ্যমান রাখার সীমাবদ্ধতা শিথিল করে । স্ট্যাটিক অবজেক্ট এবং ফাংশনগুলিকে প্যাকেজের শীর্ষ স্তরে সংজ্ঞায়িত করা যেতে পারে কোনও অপ্রয়োজনীয় ক্লাস স্তরের প্রয়োজন ছাড়াই। জাভার সাথে সামঞ্জস্যের জন্য, কোটলিন একটি JvmNameটীকা প্রদান করে যা জাভা প্রকল্প থেকে প্যাকেজটি দেখার সময় ব্যবহৃত একটি ক্লাসের নাম নির্দিষ্ট করে। উদাহরণস্বরূপ, @file:JvmName("JavaClassName").
প্রধান প্রবেশপথ
মূল নিবন্ধ: প্রবেশ বিন্দু
C , C++ , C# , Java, এবং Go এর মতো , Kotlin প্রোগ্রামের এন্ট্রি পয়েন্ট হল "main" নামক একটি ফাংশন, যা যেকোনো কমান্ড-লাইন আর্গুমেন্ট ধারণকারী একটি অ্যারে পাস করতে পারে। Kotlin 1.3. [ 37 ] Perl , PHP , এবং Unix shell -style string interpolation সমর্থিত হওয়ায় এটি ঐচ্ছিক । টাইপ ইনফারেন্সও সমর্থিত।
// হ্যালো, বিশ্ব! উদাহরণ
মজার প্রধান () {
ভ্যাল স্কোপ = "বিশ্ব"
println ( "হ্যালো, $ স্কোপ !" )
}
মজার প্রধান ( args : অ্যারে < স্ট্রিং > ) {
( args- এ arg ) এর জন্য
প্রিন্টএলএন ( আর্গ )
}
এক্সটেনশন ফাংশন
C# এর মতোই, Kotlin নতুন ফাংশন সহ একটি ডেরিভেটিভ ক্লাস তৈরির আনুষ্ঠানিকতা ছাড়াই যেকোনো ক্লাসে একটি এক্সটেনশন ফাংশন যুক্ত করার অনুমতি দেয় । একটি এক্সটেনশন ফাংশনের একটি ক্লাসের সমস্ত পাবলিক ইন্টারফেসে অ্যাক্সেস থাকে, যা এটি একটি টার্গেট ক্লাসে একটি নতুন ফাংশন ইন্টারফেস তৈরি করতে ব্যবহার করতে পারে। একটি এক্সটেনশন ফাংশন হুবহু ক্লাসের একটি ফাংশনের মতো প্রদর্শিত হবে এবং ক্লাস ফাংশনের কোড সমাপ্তি পরিদর্শনে প্রদর্শিত হবে। উদাহরণস্বরূপ:
প্যাকেজ com.example.myStringExtensions
মজার স্ট্রিং । lastChar (): Char = get ( দৈর্ঘ্য - ১ )
>>> প্রিন্টলএন ( "কোটলিন" . লাস্টচার ())
পূর্ববর্তী কোডটি প্যাকেজের শীর্ষ-স্তরে স্থাপন করে, স্ট্রিং ক্লাসটি এমন একটি lastCharফাংশন অন্তর্ভুক্ত করার জন্য প্রসারিত হয় যা স্ট্রিং ক্লাসের মূল সংজ্ঞায় অন্তর্ভুক্ত ছিল না।
// একটি এক্সটেনশন ফাংশন ব্যবহার করে '+' অপারেটর ওভারলোড করা হচ্ছে
অপারেটর মজা পয়েন্ট . প্লাস ( অন্যান্য : পয়েন্ট ): পয়েন্ট {
রিটার্ন পয়েন্ট ( x + other . x , y + other . y )
}
>>> ভ্যাল p1 = পয়েন্ট ( 10 , 20 )
>>> ভ্যাল p2 = পয়েন্ট ( 30 , 40 )
>>> প্রিন্টএলএন ( পি১ + পি২ )
বিন্দু ( x = 40 , y = 60 )
স্কোপ ফাংশন
কোটলিনের পাঁচটি স্কোপ ফাংশন রয়েছে, যা কোনও বস্তুর প্রেক্ষাপটে স্কোপ পরিবর্তন করতে দেয় । স্কোপ ফাংশনগুলি হল , , , , এবং . [ 38 ]letrunwithapplyalso
স্প্রেড অপারেটর দিয়ে আর্গুমেন্ট আনপ্যাক করুন
পাইথনের মতো, স্প্রেড অপারেটর অ্যাস্টারিস্ক (*) একটি ফাংশনের জন্য পৃথক আর্গুমেন্ট হিসেবে একটি অ্যারের বিষয়বস্তু আনপ্যাক করে, যেমন:
মজার প্রধান ( args : অ্যারে < স্ট্রিং > ) {
ভ্যাল তালিকা = তালিকা ( "আর্গস: " , * আর্গস )
প্রিন্টএলএন ( তালিকা )
}
ঘোষণাপত্র গঠন করা
অবজেক্ট-ওরিয়েন্টেড ভাষাগুলিতে প্রচলিত ডেস্ট্রাক্টর পদ্ধতির সাথে বিভ্রান্ত হবেন না ।
কাঠামোগত ঘোষণা একটি বস্তুকে একসাথে একাধিক চলকে বিভক্ত করে, যেমন একটি 2D স্থানাঙ্ক বস্তুকে দুটি পূর্ণসংখ্যা, x এবং y তে বিভক্ত করা যেতে পারে ।
উদাহরণস্বরূপ, Map.Entryঅবজেক্টটি তার কী এবং মান ক্ষেত্রগুলিতে অ্যাক্সেস সহজ করার জন্য ডেস্ট্রাক্টরিং সমর্থন করে:
মানচিত্রে (( কী , মান ) এর জন্য )
println ( " $ কী : $ মান " )
নেস্টেড ফাংশন
কোটলিন স্থানীয় ফাংশনগুলিকে অন্যান্য ফাংশন বা পদ্ধতির ভিতরে ঘোষণা করার অনুমতি দেয়।
ক্লাস ব্যবহারকারী ( val id : Int , val name : String , val address : String )
মজার saveUserToDb ( ব্যবহারকারী : ব্যবহারকারী ) {
মজার বৈধতা ( ব্যবহারকারী : ব্যবহারকারী , মান : স্ট্রিং , ক্ষেত্রের নাম : স্ট্রিং ) {
require ( value .isNotEmpty ()) { "ব্যবহারকারী সংরক্ষণ করা যাচ্ছে না ${ ব্যবহারকারী . আইডি } : খালি $ ক্ষেত্রের নাম " }
}
যাচাই করুন ( ব্যবহারকারী , ব্যবহারকারীর নাম , " নাম" )
যাচাই করুন ( ব্যবহারকারী , ব্যবহারকারী । ঠিকানা , "ঠিকানা" )
// ব্যবহারকারীকে ডাটাবেসে সংরক্ষণ করুন
...
}
ক্লাসগুলি ডিফল্টরূপে চূড়ান্ত হয়
কোটলিনে, বেস ক্লাস টাইপ থেকে একটি নতুন ক্লাস তৈরি করতে, বেস ক্লাসটিকে স্পষ্টভাবে "ওপেন" হিসাবে চিহ্নিত করতে হবে। এটি জাভার মতো বেশিরভাগ অবজেক্ট-ওরিয়েন্টেড ভাষার বিপরীতে যেখানে ক্লাসগুলি ডিফল্টভাবে খোলা থাকে।
একটি বেস ক্লাসের উদাহরণ যা থেকে একটি নতুন সাবক্লাস তৈরি করা সম্ভব:
// ক্লাসে খোলা মানে এই ক্লাসটি ডেরিভেটিভ ক্লাসগুলিকে অনুমতি দেবে
ওপেন ক্লাস মেগাবাটন {
// কোনও ফাংশনে নো-ওপেন মানে হল যে
// ডেরাইভড ক্লাসে ফাংশন ওভাররাইড করা হলে পলিমরফিক আচরণ অক্ষম করা হয়।
মজার অক্ষম () { ... }
// একটি ফাংশনে খোলা মানে হল যে
// যদি ফাংশনটি ডেরাইভড ক্লাসে ওভাররাইড করা হয় তবে পলিমরফিক আচরণ অনুমোদিত।
মজার অ্যানিমেট খুলুন () { ... }
}
ক্লাস গিগাবাটন : মেগাবাটন () {
// ডেরাইভড ক্লাসে একটি ফাংশন ওভাররাইড করার জন্য ওভাররাইড কীওয়ার্ডের স্পষ্ট ব্যবহার প্রয়োজন।
ওভাররাইড ফান অ্যানিমেট () { প্রিন্টলন ( "গিগা ক্লিক!" ) }
}
বিমূর্ত ক্লাসগুলি ডিফল্টরূপে খোলা থাকে
মূল নিবন্ধ: বিমূর্ত শ্রেণী
অ্যাবস্ট্রাক্ট ক্লাসগুলি অ্যাবস্ট্রাক্ট বা "বিশুদ্ধ ভার্চুয়াল" প্লেসহোল্ডার ফাংশনগুলিকে সংজ্ঞায়িত করে যা একটি ডেরিভেটিভ ক্লাসে সংজ্ঞায়িত করা হবে। অ্যাবস্ট্রাক্ট ক্লাসগুলি ডিফল্টরূপে খোলা থাকে।
// এখানে open কীওয়ার্ডের কোন প্রয়োজন নেই, এটি ইতিমধ্যেই ডিফল্টভাবে open আছে।
অ্যানিমেটেড অ্যাবস্ট্রাক্ট ক্লাস {
// এই ভার্চুয়াল ফাংশনটি ইতিমধ্যেই ডিফল্টরূপে খোলা আছে।
বিমূর্ত মজার অ্যানিমেট ()
মজাদার স্টপঅ্যানিমেটিং খুলুন () { }
মজার অ্যানিমেটটুইজ () { }
}
ক্লাসগুলি ডিফল্টরূপে সর্বজনীন থাকে
ক্লাসের মতো শীর্ষ-স্তরের ঘোষণার জন্য এবং ক্লাস সদস্যদের জন্য দৃশ্যমানতা সীমাবদ্ধ করার জন্য কোটলিন নিম্নলিখিত কীওয়ার্ডগুলি সরবরাহ করে: public, internal, protected, এবং private.
যখন কোনও ক্লাস সদস্যের উপর প্রয়োগ করা হয়:
কীওয়ার্ড দৃশ্যমানতা
public(ডিফল্ট) সর্বত্র
internal একটি মডিউলের মধ্যে
protected উপশ্রেণীর মধ্যে
private একটি ক্লাসের মধ্যে
যখন একটি শীর্ষ-স্তরের ঘোষণায় প্রয়োগ করা হয়:
কীওয়ার্ড দৃশ্যমানতা
public(ডিফল্ট) সর্বত্র
internal একটি মডিউলের মধ্যে
private একটি ফাইলের মধ্যে
উদাহরণ:
// ক্লাস শুধুমাত্র বর্তমান মডিউলে দৃশ্যমান
অভ্যন্তরীণ খোলা শ্রেণী TalkativeButton {
// পদ্ধতিটি শুধুমাত্র বর্তমান ক্লাসের জন্য দৃশ্যমান
ব্যক্তিগত মজার চিৎকার () = println ( "হেই!" )
// পদ্ধতিটি বর্তমান ক্লাস এবং ডেরিভেটিভ ক্লাসের কাছে দৃশ্যমান
সুরক্ষিত মজার হুইস্পার () = println ( "চলো কথা বলি!" )
}
অভ্যন্তরীণ ক্লাস MyTalkativeButton : TalkativeButton () {
মজার উচ্চারণ () = অসাধারণ । ফিসফিসিয়ে ()
}
MyTalkativeButton (). utter ()
প্রাথমিক কনস্ট্রাক্টর বনাম মাধ্যমিক কনস্ট্রাক্টর
কোটলিন ক্লাস সংজ্ঞার অংশ হিসেবে "প্রাথমিক কনস্ট্রাক্টর" এর স্পেসিফিকেশন সমর্থন করে, যার মধ্যে ক্লাসের নামের পরে একটি আর্গুমেন্ট তালিকা থাকে। এই আর্গুমেন্ট তালিকা কোটলিনের স্ট্যান্ডার্ড ফাংশন আর্গুমেন্ট তালিকার একটি বর্ধিত সিনট্যাক্স সমর্থন করে যা প্রাইমারি কনস্ট্রাক্টরে ক্লাস প্রোপার্টি ঘোষণা করতে সক্ষম করে, যার মধ্যে দৃশ্যমানতা, এক্সটেনসিবিলিটি এবং মিউটেবিলিটি অ্যাট্রিবিউট অন্তর্ভুক্ত রয়েছে। অতিরিক্তভাবে, একটি সাবক্লাস সংজ্ঞায়িত করার সময়, সুপার-ইন্টারফেস এবং সুপার-ক্লাসের প্রোপার্টিগুলি প্রাইমারি কনস্ট্রাক্টরে ওভাররাইড করা যেতে পারে।
// প্রাথমিক কনস্ট্রাক্টর সিনট্যাক্স ব্যবহার করে ক্লাসের উদাহরণ
// (এই ক্লাসের জন্য শুধুমাত্র একটি কনস্ট্রাক্টর প্রয়োজন)
ওপেন ক্লাস বেসইউজার ( ওপেন ভার সাবস্ক্রাইবড : বুলিয়ান )
ওপেন ক্লাস পাওয়ারইউজার ( সুরক্ষিত ভ্যাল ডাকনাম : স্ট্রিং , ফাইনাল ওভাররাইড var isSubscribed : Boolean = true ): BaseUser ( isSubscribed ) { }
তবে, যেখানে একটি ক্লাসের জন্য একাধিক কনস্ট্রাক্টরের প্রয়োজন হয়, সেখানে সেকেন্ডারি কনস্ট্রাক্টর সিনট্যাক্স ব্যবহার করে আরও সাধারণ কনস্ট্রাক্টর সংজ্ঞায়িত করা যেতে পারে , যা C++, C# এবং জাভার মতো বেশিরভাগ অবজেক্ট-ওরিয়েন্টেড ভাষায় ব্যবহৃত কনস্ট্রাক্টর সিনট্যাক্সের সাথে ঘনিষ্ঠভাবে সাদৃশ্যপূর্ণ।
// সেকেন্ডারি কনস্ট্রাক্টর সিনট্যাক্স ব্যবহার করে ক্লাসের উদাহরণ
// (এই ক্লাসের জন্য একাধিক কনস্ট্রাক্টর প্রয়োজন)
ক্লাস প্রসঙ্গ
ক্লাস অ্যাট্রিবিউটসেট
ক্লাস ভিউ খুলুন ( ctx : প্রসঙ্গ ) {
কনস্ট্রাক্টর ( ctx : প্রসঙ্গ , attr : অ্যাট্রিবিউটসেট ): এটি ( ctx )
}
ক্লাস মাইবাটন : ভিউ {
// নির্মাতা #১
কনস্ট্রাক্টর ( ctx : প্রসঙ্গ ) : সুপার ( ctx ) {
}
// কনস্ট্রাক্টর #২
কনস্ট্রাক্টর ( ctx : প্রসঙ্গ , attr : অ্যাট্রিবিউটসেট ) : সুপার ( ctx , attr ) {
// ...
}
}
সিল করা ক্লাস
সিল করা ক্লাস এবং ইন্টারফেসগুলি সাবক্লাস শ্রেণিবিন্যাসকে সীমাবদ্ধ করে, যার অর্থ উত্তরাধিকার শ্রেণিবিন্যাসের উপর আরও নিয়ন্ত্রণ।
সিল করা ইন্টারফেস এবং শ্রেণীর ঘোষণা:
সিল করা ইন্টারফেস
সিল করা ক্লাস জব
সিল করা ক্লাসের সকল সাবক্লাস কম্পাইলের সময় সংজ্ঞায়িত করা হয়। সিল করা ক্লাস সম্বলিত মডিউল কম্পাইল করার পর এতে কোন নতুন সাবক্লাস যোগ করা যাবে না। উদাহরণস্বরূপ, একটি কম্পাইল করা জার ফাইলে একটি সিল করা ক্লাস সাবক্লাস করা যাবে না।
সিল করা শ্রেণীর যানবাহন
ডেটা ক্লাস কার ( val ব্র্যান্ডনাম : স্ট্রিং , ভ্যাল মালিক : স্ট্রিং , ভ্যাল রঙ : স্ট্রিং ): যানবাহন ()
ক্লাস বাইক ( val ব্র্যান্ডের নাম : স্ট্রিং , ভ্যালের মালিক : স্ট্রিং , ভ্যালের রঙ : স্ট্রিং ): যানবাহন ()
ক্লাস ট্র্যাক্টর ( val ব্র্যান্ডের নাম : স্ট্রিং , ভ্যাল মালিক : স্ট্রিং , ভ্যাল রঙ : স্ট্রিং ): যানবাহন ()
val kiaCar = গাড়ি ( "KIA" , "John" , "Blue" )
val hyundaiCar = গাড়ি ( "Hyundai" , "Britto" , "Green" )
ডেটা ক্লাস
কোটলিনের data classকনস্ট্রাক্ট এমন ক্লাসগুলিকে সংজ্ঞায়িত করে যার প্রাথমিক উদ্দেশ্য হল ডেটা সংরক্ষণ করা, যা জাভার recordধরণের মতো। জাভার recordধরণের মতো, কনস্ট্রাক্টটি সাধারণ ক্লাসের মতো, কেবল কী পদ্ধতিগুলি ছাড়া equals, hashCodeএবং toStringস্বয়ংক্রিয়ভাবে ক্লাস বৈশিষ্ট্য থেকে তৈরি হয়। জাভার রেকর্ডের বিপরীতে, ডেটা ক্লাসগুলি উত্তরাধিকারের জন্য উন্মুক্ত।
কোটলিন ইন্টারেক্টিভ শেল
$ kotlinc-jvm
টাইপ :help for help; :quit for quit
>>> 2 + 2
4
>>> println ( "হ্যালো, ওয়ার্ল্ড!" )
হ্যালো, ওয়ার্ল্ড!
স্ক্রিপ্টিং ভাষা হিসেবে কোটলিন
কোটলিনকে স্ক্রিপ্টিং ভাষা হিসেবেও ব্যবহার করা যেতে পারে । স্ক্রিপ্ট হলো একটি কোটলিন সোর্স ফাইল যা .kts ফাইলের নাম এক্সটেনশন ব্যবহার করে , যার এক্সিকিউটেবল সোর্স কোড শীর্ষ-স্তরের স্কোপে থাকে:
// তালিকা_ফোল্ডার.কেটিএস
java.io.File আমদানি করুন
ভ্যাল ফোল্ডার = ফাইল ( আর্গস [ 0 ] )। লিস্টফাইলস { ফাইল -> ফাইল । isDirectory () }
ফোল্ডার ?. forEach ( :: println )
-scriptকম্পাইলারে অপশন এবং সংশ্লিষ্ট স্ক্রিপ্ট ফাইলটি পাস করে স্ক্রিপ্টগুলি চালানো যেতে পারে ।
$ kotlinc -script list_folders.kts "folder_to_inspect_এর_পাথ"
শূন্য নিরাপত্তা
কোটলিন নালযোগ্য এবং নন-নালযোগ্য ডেটা টাইপের মধ্যে পার্থক্য করে । সমস্ত নালযোগ্য অবজেক্টকে টাইপ নামের পরে "?" পোস্টফিক্স দিয়ে ঘোষণা করতে হবে। নালযোগ্য অবজেক্টের অপারেশনের জন্য ডেভেলপারদের বিশেষ যত্ন প্রয়োজন: মান ব্যবহার করার আগে একটি নাল-চেক করতে হবে, হয় স্পষ্টভাবে, অথবা কোটলিনের নাল-সেফ অপারেটরদের সাহায্যে:
?. ( নিরাপদ নেভিগেশন অপারেটর ) ব্যবহার করে একটি সম্ভাব্য নাল অবজেক্টের একটি পদ্ধতি বা সম্পত্তি নিরাপদে অ্যাক্সেস করা যেতে পারে। যদি অবজেক্টটি নাল হয়, তাহলে পদ্ধতিটি কল করা হবে না এবং এক্সপ্রেশনটি নাল হিসাবে মূল্যায়ন করা হবে। উদাহরণ:
// শূন্য ফেরত দেয় যদি...
// - foo() নাল ফেরত দেয়,
// - অথবা যদি foo() অ-নাল হয়, কিন্তু bar() নাল প্রদান করে,
// - অথবা যদি foo() এবং bar() অ-নাল হয়, কিন্তু baz() নাল প্রদান করে।
// বিপরীতভাবে, রিটার্ন মানটি অ-নাল হবে যদি এবং শুধুমাত্র যদি foo(), bar() এবং baz() অ-নাল হয়
foo () ?. বার () ?. বাজ ()
?: ( নাল কোলেসিং অপারেটর ) হল একটি বাইনারি অপারেটর যা প্রথম অপারেন্ড, যদি নাল না হয়, অন্যথায় দ্বিতীয় অপারেন্ডটি ফেরত দেয়। এলভিস প্রিসলির ইমোটিকন উপস্থাপনার সাথে সাদৃশ্য থাকার কারণে এটিকে প্রায়শই এলভিস অপারেটর হিসাবে উল্লেখ করা হয়।
মজার sayHello ( হয়তো : স্ট্রিং ?, neverNull : Int ) {
// এলভিস অপারেটরের ব্যবহার
ভ্যাল নাম : স্ট্রিং = হয়তো ?: "অপরিচিত"
println ( "হ্যালো $ নাম " )
}
ল্যাম্বডাস
কোটলিন উচ্চ-ক্রম ফাংশন এবং বেনামী ফাংশন , অথবা ল্যাম্বডাসের জন্য সমর্থন প্রদান করে । [ 39 ]
// নিম্নলিখিত ফাংশনটি একটি ল্যাম্বডা, f নেয় এবং "lambda" স্ট্রিংটি দিয়ে f এক্সিকিউট করে।
// মনে রাখবেন যে (String) -> Unit একটি ল্যাম্বডা নির্দেশ করে যার একটি String প্যারামিটার এবং Unit রিটার্ন টাইপ রয়েছে
মজার executeLambda ( f : ( স্ট্রিং ) -> ইউনিট ) {
চ ( "ল্যাম্বডা" )
}
ল্যাম্বডাস ব্রেস ব্যবহার করে ঘোষণা করা হয়, { } । যদি একটি ল্যাম্বডা প্যারামিটার নেয়, তাহলে সেগুলি ব্রেসের মধ্যে ঘোষণা করা হয় এবং -> অপারেটর দ্বারা অনুসরণ করা হয়।
// নিম্নলিখিত বিবৃতিটি একটি ল্যাম্বডাকে সংজ্ঞায়িত করে যা একটি একক প্যারামিটার নেয় এবং এটি println ফাংশনে প্রেরণ করে
val l = { c : কোন? -> println ( c ) }
// কোনও প্যারামিটার ছাড়াই ল্যাম্বডাস কেবল { } ব্যবহার করে সংজ্ঞায়িত করা যেতে পারে
val l2 = { মুদ্রণ ( "কোনও প্যারামিটার নেই" ) }
"হ্যালো ওয়ার্ল্ড" উদাহরণ
( https://kotlinlang.org/docs/kotlin-tour-hello-world.html থেকে নেওয়া এবং ব্যাখ্যা করা হয়েছে ।)
মজার প্রধান () {
println ( "হ্যালো, পৃথিবী!" )
// হ্যালো, পৃথিবী!
}
যন্ত্র
অ্যান্ড্রয়েড স্টুডিও (IntelliJ IDEA ভিত্তিক) কোটলিনের জন্য অফিসিয়াল সমর্থন প্রদান করে, যা অ্যান্ড্রয়েড স্টুডিও 3 থেকে শুরু হয়। [ 40 ]
সাধারণ জাভা বিল্ড টুলের সাথে ইন্টিগ্রেশন সমর্থিত, যার মধ্যে রয়েছে Apache Maven , [ 41 ] Apache Ant , [ 42 ] এবং Gradle । [ 43 ]
Emacs এর MELPA প্যাকেজ রিপোজিটরিতে একটি Kotlin Mode আছে।
JetBrains Eclipse এর জন্য একটি প্লাগইনও প্রদান করে । [ 44 ] [ 45 ]
IntelliJ IDEA-তে Kotlin-এর জন্য প্লাগ-ইন সাপোর্ট রয়েছে। [ 46 ] IntelliJ IDEA 15 হল প্রথম সংস্করণ যা IntelliJ ইনস্টলারে Kotlin প্লাগইন একত্রিত করে এবং Kotlin-এর জন্য সম্পূর্ণ সমর্থন প্রদান করে। [ 47 ]
গ্রেডল : কোটলিনের গ্রেডলের সাথে নিরবচ্ছিন্ন ইন্টিগ্রেশন রয়েছে, যা একটি জনপ্রিয় বিল্ড অটোমেশন টুল। গ্রেডল আপনাকে আপনার কোটলিন প্রকল্পগুলির জীবনচক্র দক্ষতার সাথে তৈরি, স্বয়ংক্রিয় এবং পরিচালনা করতে দেয় [ 48 ]
অ্যাপ্লিকেশন
২০১৭ সালের মে মাসে গুগল আই/ও- তে যখন কোটলিনকে একটি অফিসিয়াল অ্যান্ড্রয়েড ডেভেলপমেন্ট ল্যাঙ্গুয়েজ হিসেবে ঘোষণা করা হয় , তখন এটি জাভা এবং সি++-এর পরে অ্যান্ড্রয়েডের জন্য সম্পূর্ণরূপে সমর্থিত তৃতীয় ভাষা হয়ে ওঠে। [ 49 ] ২০২০ সালের হিসাবে , কোটলিন অ্যান্ড্রয়েডে সর্বাধিক ব্যবহৃত ভাষা ছিল, গুগল অনুমান করেছিল যে প্লে স্টোরের শীর্ষ ১,০০০ অ্যাপের ৭০% কোটলিনে লেখা ছিল। গুগল নিজেই কোটলিনে লেখা ৬০টি অ্যাপ ছিল, যার মধ্যে ম্যাপ এবং ড্রাইভও ছিল। গুগল হোমের মতো অনেক অ্যান্ড্রয়েড অ্যাপ কোটলিনে স্থানান্তরিত হওয়ার প্রক্রিয়াধীন ছিল এবং তাই কোটলিন এবং জাভা উভয়ই ব্যবহার করে। অ্যান্ড্রয়েডে কোটলিনকে তার নাল-পয়েন্টার সুরক্ষার জন্য , সেইসাথে এর বৈশিষ্ট্যগুলির জন্য উপকারী হিসাবে দেখা হয় যা ছোট, আরও পঠনযোগ্য কোড তৈরি করে। [ 50 ]
অ্যান্ড্রয়েডে এর উল্লেখযোগ্য ব্যবহারের পাশাপাশি, কোটলিন সার্ভার-সাইড ডেভেলপমেন্টে জনপ্রিয়তা অর্জন করছিল। স্প্রিং ফ্রেমওয়ার্ক আনুষ্ঠানিকভাবে ৪ জানুয়ারী ২০১৭ তারিখে ৫ম সংস্করণের সাথে কোটলিন সমর্থন যোগ করেছে। [ 51 ] কোটলিনকে আরও সমর্থন করার জন্য, স্প্রিং তার সমস্ত ডকুমেন্টেশন কোটলিনে অনুবাদ করেছে এবং কোরোটিনের মতো অনেক কোটলিন-নির্দিষ্ট বৈশিষ্ট্যের জন্য অন্তর্নির্মিত সমর্থন যোগ করেছে। [ 52 ] স্প্রিং ছাড়াও, জেটব্রেইনস ওয়েব অ্যাপ্লিকেশন তৈরির জন্য Ktor নামে একটি কোটলিন-প্রথম ফ্রেমওয়ার্ক তৈরি করেছে। [ 53 ]
২০২০ সালে, জেটব্রেইনস কোটলিন ব্যবহারকারী ডেভেলপারদের উপর করা এক জরিপে দেখেছে যে ৫৬% মোবাইল অ্যাপের জন্য কোটলিন ব্যবহার করছে, যেখানে ৪৭% ওয়েব ব্যাক-এন্ডের জন্য এটি ব্যবহার করছে। কোটলিন ডেভেলপারদের এক তৃতীয়াংশেরও বেশি বলেছেন যে তারা অন্য ভাষা থেকে কোটলিনে স্থানান্তরিত হচ্ছেন। বেশিরভাগ কোটলিন ব্যবহারকারী অ্যান্ড্রয়েড (অথবা অন্যথায় JVM) ব্যবহার করছেন, যেখানে মাত্র ৬% কোটলিন নেটিভ ব্যবহার করছেন। [ 54 ]
দত্তক গ্রহণ
২০১৮ সালে, কোটলিন গিটহাবের সবচেয়ে দ্রুত বর্ধনশীল ভাষা ছিল, ২০১৭ সালের তুলনায় ২.৬ গুণ বেশি ডেভেলপার ছিল। [ 55 ] ২০২০ স্ট্যাক ওভারফ্লো ডেভেলপার জরিপ অনুসারে এটি চতুর্থ সর্বাধিক জনপ্রিয় প্রোগ্রামিং ভাষা। [ 56 ]
কোটলিনকে ২০১৯ সালের জন্য ও'রিলি ওপেন সোর্স সফটওয়্যার কনফারেন্স ব্রেকআউট অ্যাওয়ার্ডও দেওয়া হয়েছে। [ 57 ]
অনেক কোম্পানি/প্রতিষ্ঠান ব্যাকএন্ড ডেভেলপমেন্টের জন্য কোটলিন ব্যবহার করেছে:
অ্যালেগ্রো [ 58 ]
আমাজন [ 59 ]
অ্যাটলাসিয়ান [ 60 ]
নগদ অ্যাপ [ 61 ] [ 62 ]
ফ্লাক্স [ 63 ]
গুগল [ 64 ]
গ্রেডেল [ 65 ]
জেটব্রেইনস [ 66 ]
মেশক্লাউড [ 67 ]
নরওয়েজিয়ান কর প্রশাসন [ 68 ]
ওএলএক্স [ 69 ]
গুরুত্বপূর্ণ [ 70 ]
রকেট ভ্রমণ [ 71 ]
শাজাম [ 72 ]
জালান্দো [ 73 ]
কিছু কোম্পানি/প্রতিষ্ঠান ওয়েব ডেভেলপমেন্টের জন্য কোটলিন ব্যবহার করেছে:
বার্কলে'স ব্যাংক [ 74 ]
ডেটা২ভিজ [ 75 ]
ফ্রিটজ২ [ 76 ]
জেটব্রেইনস [ 77 ]
বেশ কয়েকটি কোম্পানি প্রকাশ্যে জানিয়েছে যে তারা কোটলিন ব্যবহার করছে:
বেসক্যাম্প [ 78 ]
Corda, সুপরিচিত ব্যাংকগুলির (যেমন Goldman Sachs , Wells Fargo , JP Morgan , Deutsche Bank , UBS , HSBC , BNP Paribas , এবং Société Générale ) একটি কনসোর্টিয়াম দ্বারা তৈরি একটি বিতরণকৃত লেজার, এর কোডবেসে 90% এরও বেশি Kotlin কোড রয়েছে।
কোর্সেরা [ 79 ]
ড্রিপস্ট্যাট [ 80 ]
ডুওলিঙ্গো [ 81 ]
নেটফ্লিক্স [ 82 ]
পিন্টারেস্ট [ 83 ]
ট্রেলো [ 84 ]
উবার [ 85 ]