কোটলিন

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

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

২০১৯ সালের ৭ মে গুগল ঘোষণা করে যে, অ্যান্ড্রয়েড অ্যাপ ডেভেলপারদের জন্য কোটলিন এখন তাদের পছন্দের ভাষা। ২০১৭ সালের অক্টোবরে অ্যান্ড্রয়েড স্টুডিও ৩.০ প্রকাশের পর থেকে কোটলিনকে প্রমিত জাভা কম্পাইলারের বিকল্প হিসেবে অন্তর্ভুক্ত করা হয়েছে। অ্যান্ড্রয়েড কোটলিন কম্পাইলার ডিফল্টভাবে জাভা ৮ বাইটকোড তৈরি করে (যা পরবর্তী যেকোনো জাভা ভার্চুয়াল মেশিনে চলে), তবে অপ্টিমাইজেশন বা অতিরিক্ত সুবিধার জন্য এটি জাভা ৯ থেকে ২৪ পর্যন্ত লক্ষ্য নির্ধারণের সুযোগ দেয়। এতে জেভিএম-এর জন্য রেকর্ড ক্লাসের পারস্পরিক ব্যবহারের সুবিধা রয়েছে যা জাভা ১৬-তে প্রবর্তিত হয়েছে এবং কোটলিন ১.৫ সংস্করণ থেকে এটি স্থিতিশীল হিসেবে বিবেচিত।

কোটলিন/জেএস-এর মাধ্যমে এটি ওয়েব সমর্থন করে যা ডিসেম্বর ২০২২-এ প্রকাশিত ১.৮ সংস্করণ থেকে স্থিতিশীল হিসেবে ঘোষিত হয়েছে। কোটলিন/নেটিভ (যেমন: অ্যাপল সিলিকন সমর্থন) নভেম্বর ২০২৩-এ প্রকাশিত ১.৯.২০ সংস্করণ থেকে স্থিতিশীল হিসেবে ঘোষিত হয়েছে।

## ইতিহাস
থাম্ব|কোটলিনের মাসকট কোডি (সাধারণ সংস্করণ)|Kodee Mascot|150px
থাম্ব|কোটলিনের মাসকট কোডি (ক্ষুদ্র সংস্করণ)|Kodee Mascot Petite|150px

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

### উন্নয়ন
২০১০ সালের ৮ নভেম্বর কোটলিন গিট রিপোজিটরিতে প্রথম কোড জমা দেওয়া হয়েছিল।

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

জেটব্রেইনস আশা করেছিল যে কোটলিন তাদের ইন্টেলিজে আইডিইএ-র বিক্রি বৃদ্ধিতে সহায়তা করবে।

২০১৬ সালের ১৫ ফেব্রুয়ারি কোটলিন ১.০ প্রকাশিত হয়, যাকে প্রথম আনুষ্ঠানিকভাবে স্থিতিশীল সংস্করণ হিসেবে বিবেচনা করা হয়। এই সংস্করণটি থেকে জেটব্রেইনস দীর্ঘমেয়াদী পশ্চাৎমুখী সামঞ্জস্যতা বজায় রাখার প্রতিশ্রুতি দিয়েছে।

গুগল আই/ও ২০১৭ অনুষ্ঠানে গুগল অ্যান্ড্রয়েডে কোটলিনের জন্য প্রথম শ্রেণির সমর্থনের কথা ঘোষণা করে। ২০১৯ সালের ৭ মে গুগল জানায় যে, অ্যান্ড্রয়েড অ্যাপ ডেভেলপারদের জন্য কোটলিন এখন তাদের পছন্দের ভাষা।

## নকশা
উন্নয়ন প্রধান আন্দ্রে ব্রেস্লাভ বলেছেন যে, কোটলিনকে একটি শিল্প-মানের অবজেক্ট-ওরিয়েন্টেড ভাষা হিসেবে নকশা করা হয়েছে, যা জাভা অপেক্ষা একটি "উন্নত ভাষা" এবং জাভা কোডের সাথে সম্পূর্ণ পারস্পরিক ক্রিয়ক্ষমতা বজায় রাখে, যা বিভিন্ন প্রতিষ্ঠানকে জাভা থেকে কোটলিনে ধীরে ধীরে স্থানান্তরিত হতে সাহায্য করে।

স্টেটমেন্ট বা নির্দেশ শেষ করার জন্য সেমিকোলন ব্যবহার ঐচ্ছিক; অধিকাংশ ক্ষেত্রে একটি স্টেটমেন্ট শেষ হয়েছে তা বোঝার জন্য কম্পাইলারের কাছে একটি নতুন লাইন বা নিউলাইন-ই যথেষ্ট।

কোটলিনের ভেরিয়েবল ঘোষণা এবং প্যারামিটার তালিকায় ডেটা টাইপ বা উপাত্তের ধরন ভেরিয়েবল নামের পরে (একটি কোলন দ্বারা পৃথক করে) বসানো হয়, যা অ্যাডা, বেসিক, প্যাসকাল, টাইপস্ক্রিপ্ট এবং রাস্ট ভাষার সাথে সাদৃশ্যপূর্ণ। বর্তমান প্রকল্প প্রধান রোমান এলিজারভের একটি নিবন্ধ অনুসারে, এর ফলে ভেরিয়েবল নামগুলো একই সারিতে থাকে যা দেখতে দৃষ্টিনন্দন লাগে, বিশেষ করে যখন পরপর বেশ কিছু ভেরিয়েবল ঘোষণা করা হয় এবং সেগুলোর কোনো কোনো ধরন বা টাইপ টাইপ ইনফারেন্সের জন্য অত্যন্ত জটিল হয় অথবা মানুষের সহজে বোঝার জন্য স্পষ্টভাবে ঘোষণা করার প্রয়োজন পড়ে।

কোটলিনের ওপর স্কালা ভাষার প্রভাব স্পষ্ট দেখা যায় এর অবজেক্ট-ওরিয়েন্টেড এবং ফাংশনাল প্রোগ্রামিং-এর ব্যাপক সমর্থনে এবং বেশ কিছু নির্দিষ্ট বৈশিষ্ট্যে:
* এতে পরিবর্তনশীল এবং অপরিবর্তনীয় (mutable এবং immutable) ভেরিয়েবলের মধ্যে পার্থক্য রয়েছে (var বনাম val কীওয়ার্ড)
* ডিফল্টভাবে সকল ক্লাস পাবলিক এবং ফাইনাল (অর্থাৎ ইনহেরিটেন্স বা উত্তরাধিকার অযোগ্য)
* ফাংশন এবং মেথডসমূহ ডিফল্ট আর্গুমেন্ট, পরিবর্তনশীল দৈর্ঘ্যের আর্গুমেন্ট তালিকা এবং নেমড আর্গুমেন্ট সমর্থন করে

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

স্কালা.জেএস-এর মতো কোটলিন কোডকেও জাভাস্ক্রিপ্টে রূপান্তর করা যায়, যা কোটলিন এবং জাভাস্ক্রিপ্টের মধ্যে পারস্পরিক ক্রিয়ক্ষমতা নিশ্চিত করে। এটি কোটলিন ব্যবহার করে সম্পূর্ণ ওয়েব অ্যাপ্লিকেশন তৈরি অথবা কোটলিন ব্যাক-এন্ড ও জাভাস্ক্রিপ্ট ফ্রন্ট-এন্ডের মধ্যে কোড শেয়ার করা সম্ভব করে তোলে।

## সিনট্যাক্স

### প্রসিডিউরাল প্রোগ্রামিং শৈলী
কোটলিন জাভার স্ট্যাটিক মেথড এবং ভেরিয়েবল ব্যবহারের বাধ্যবাধকতা শিথিল করেছে, যার ফলে এগুলোকে কোনো ক্লাসের বাইরেও রাখা যায়। কোনো অতিরিক্ত ক্লাস লেভেল স্কোপ ছাড়াই প্যাকেজের শীর্ষ স্তরে স্ট্যাটিক অবজেক্ট এবং ফাংশন সংজ্ঞায়িত করা যায়। জাভার সাথে সামঞ্জস্য বজায় রাখার জন্য কোটলিন `JvmName` অ্যানোটেশন প্রদান করে, যা জাভা প্রজেক্ট থেকে দেখার সময় প্যাকেজটির জন্য একটি নির্দিষ্ট ক্লাস নাম নির্ধারণ করে দেয়। উদাহরণস্বরূপ, `@file:JvmName("JavaClassName")`।

### প্রধান এন্ট্রি পয়েন্ট

সি, সি++, সি শার্প, জাভা এবং গো ভাষার মতো কোটলিন প্রোগ্রামের প্রধান এন্ট্রি পয়েন্ট বা প্রবেশদ্বার হলো `main` নামক একটি ফাংশন। এই ফাংশনে কমান্ড-লাইন আর্গুমেন্ট সম্বলিত একটি অ্যারে পাঠানো যেতে পারে। কোটলিন ১.৩ সংস্করণ থেকে এটি ঐচ্ছিক করা হয়েছে। এতে পার্ল, পিএইচপি এবং ইউনিক্স শেল শৈলীর স্ট্রিং ইন্টারপোলেশন সমর্থিত। সেই সাথে টাইপ ইনফারেন্স বা প্রকার অনুমানের সুবিধাও রয়েছে।


```kotlin
// হ্যালো ওয়ার্ল্ড উদাহরণ
fun main() {
    val scope = "World"
    println("Hello, $scope!")
}
```


### এক্সটেনশন ফাংশন
সি শার্পের মতো কোটলিন কোনো নতুন ক্লাস তৈরি না করেই যেকোনো ক্লাসে এক্সটেনশন ফাংশন যুক্ত করার সুবিধা দেয়। একটি এক্সটেনশন ফাংশন ওই ক্লাসের সকল পাবলিক ইন্টারফেস ব্যবহার করতে পারে এবং এটি ক্লাসের নিজস্ব ফাংশনের মতোই কাজ করে। উদাহরণস্বরূপ:


```kotlin
package org.wikipedia.examples

fun String.lastChar(): Char = get(length - 1)

println("Kotlin".lastChar()) // আউটপুট দেখাবে: n
```


প্যাকেজের শীর্ষ স্তরে এই কোডটি রাখলে স্ট্রিং ক্লাসে `lastChar` নামক একটি নতুন ফাংশন যুক্ত হয়ে যাবে, যা স্ট্রিং ক্লাসের মূল সংজ্ঞায় ছিল না।

### স্কোপ ফাংশন
কোটলিনে পাঁচটি স্কোপ ফাংশন রয়েছে যা কোনো অবজেক্টের কনটেক্সট বা প্রেক্ষাপটের মধ্যে স্কোপ পরিবর্তন করতে সাহায্য করে। এই ফাংশনগুলো হলো: `let`, `run`, `with`, `apply`, এবং `also`।

### স্প্রেড অপারেটর ব্যবহার করে আর্গুমেন্ট আনপ্যাক করা
পাইথনের মতো এখানেও স্প্রেড অপারেটর হিসেবে অ্যাস্টেরিস্ক (*) ব্যবহার করে একটি অ্যারের উপাদানগুলোকে ফাংশনের আলাদা আলাদা আর্গুমেন্ট হিসেবে পাঠানো যায়:


```kotlin
fun main(args: Array<String>) { 
    val list: List<String> = listOf("args: ", *args)
    println(list)
}
```


### ডিস্ট্রাকচারিং ডিক্লেয়ারেশন
ডিস্ট্রাকচারিং ডিক্লেয়ারেশনের মাধ্যমে একটি অবজেক্টকে ভেঙে একসাথে একাধিক ভেরিয়েবলে রূপান্তর করা যায়। যেমন একটি দ্বিমাত্রিক স্থানাঙ্ক অবজেক্টকে ভেঙে `x` এবং `y` নামক দুটি পূর্ণসংখ্যায় রূপান্তর করা সম্ভব।

উদাহরণস্বরূপ, ম্যাপের এন্ট্রি অবজেক্ট থেকে সহজে কি (key) এবং ভ্যালু (value) পাওয়ার জন্য এটি ব্যবহার করা হয়:


```kotlin
for ((key, value) in map) {
    println("$key: $value")
}
```


### নেস্টেড ফাংশন
কোটলিনে একটি ফাংশন বা মেথডের ভেতরে অন্য একটি লোকাল ফাংশন ঘোষণা করা সম্ভব।

### ক্লাসসমূহ ডিফল্টভাবে ফাইনাল
কোটলিনে কোনো বেস ক্লাস থেকে নতুন ক্লাস তৈরি করতে হলে ওই বেস ক্লাসটিকে স্পষ্টভাবে `open` হিসেবে চিহ্নিত করতে হয়। জাভার মতো অন্যান্য অবজেক্ট-ওরিয়েন্টেড ভাষায় ক্লাসগুলো ডিফল্টভাবে ওপেন থাকলেও কোটলিনে সেগুলো ডিফল্টভাবে ফাইনাল বা ইনহেরিটেন্স অযোগ্য থাকে।

### অ্যাবস্ট্রাক্ট ক্লাসসমূহ ডিফল্টভাবে ওপেন

অ্যাবস্ট্রাক্ট ক্লাসসমূহ এমন কিছু ফাংশন নির্ধারণ করে যা পরবর্তী কোনো ক্লাসে বাস্তবায়ন করতে হয়। এই ক্লাসগুলো কোটলিনে ডিফল্টভাবেই ওপেন থাকে।

### ক্লাসসমূহ ডিফল্টভাবে পাবলিক
কোটলিনে ক্লাস এবং এর সদস্যদের দৃশ্যমানতা সীমিত করার জন্য `public`, `internal`, `protected`, এবং `private` কীওয়ার্ডগুলো ব্যবহার করা হয়।

শ্রেণির সদস্যের ক্ষেত্রে:

### প্রাইমারি বনাম সেকেন্ডারি কনস্ট্রাক্টর
কোটলিনে ক্লাসের সংজ্ঞার সাথেই প্রাইমারি কনস্ট্রাক্টর যুক্ত করা যায়। যদি একটি ক্লাসের জন্য একাধিক কনস্ট্রাক্টর প্রয়োজন হয়, তবে সেকেন্ডারি কনস্ট্রাক্টর সিনট্যাক্স ব্যবহার করা হয় যা সি++, সি শার্প বা জাভার সাথে সাদৃশ্যপূর্ণ।

### সিলড ক্লাস
সিলড ক্লাস এবং ইন্টারফেস সাবক্লাসের শ্রেণিবিন্যাসকে সীমিত করে, যার ফলে ইনহেরিটেন্স বা উত্তরাধিকারের ওপর অধিক নিয়ন্ত্রণ বজায় থাকে। সিলড ক্লাসের সকল সাবক্লাস কম্পাইল টাইমে নির্ধারিত হয়।

### ডেটা ক্লাস
উপাত্ত বা ডেটা সংরক্ষণের জন্য কোটলিনে `data class` ব্যবহার করা হয় যা জাভার রেকর্ড টাইপের মতো। এতে `equals`, `hashCode` এবং `toString` মেথডগুলো ভেরিয়েবল থেকে স্বয়ংক্রিয়ভাবে তৈরি হয়।

### নাল সেফটি
কোটলিনে নাল হতে পারে এমন এবং নাল হতে পারে না এমন ডেটা টাইপের মধ্যে পার্থক্য করা হয়। নাল হতে পারে এমন অবজেক্ট ঘোষণার সময় টাইপের পরে একটি প্রশ্নবোধক চিহ্ন (?) ব্যবহার করতে হয়। নাল অবজেক্ট ব্যবহারের আগে অবশ্যই নাল-চেক করে নিতে হয়।

* `?.` (সেফ নেভিগেশন অপারেটর) ব্যবহার করে কোনো অবজেক্ট নাল কি না তা যাচাই করে নিরাপদে এর মেথড বা প্রপার্টি ব্যবহার করা যায়।
* `?:` (নাল কোয়ালসিং অপারেটর বা এলভিস অপারেটর) ব্যবহার করে কোনো মান নাল হলে তার পরিবর্তে একটি ডিফল্ট মান নির্ধারণ করে দেওয়া যায়।

### ল্যাম্বডা
কোটলিন হাইয়ার-অর্ডার ফাংশন এবং অ্যানোনিমাস ফাংশন বা ল্যাম্বডা সমর্থন করে। ল্যাম্বডা ঘোষণার জন্য দ্বিতীয় বন্ধনী `{ }` ব্যবহার করা হয়। যদি ল্যাম্বডাতে প্যারামিটার থাকে, তবে সেগুলো বন্ধনীর ভেতরে লিখে `->` অপারেটর ব্যবহার করা হয়।

## সরঞ্জামসমূহ
* অ্যান্ড্রয়েড স্টুডিও (ইন্টেলিজ আইডিয়া ভিত্তিক): অ্যান্ড্রয়েড স্টুডিও ৩ সংস্করণ থেকে এতে কোটলিনের জন্য অফিশিয়াল বা দাপ্তরিক সমর্থন রয়েছে।
* সাধারণ জাভা বিল্ড টুল বা নির্মাণ সরঞ্জামগুলোর সাথে এর সংহতি সমর্থিত, যার মধ্যে রয়েছে অ্যাপাচি মাভেন, অ্যাপাচি অ্যান্ট, এবং গ্রেডল।
* ইম্যাকস (Emacs): এর মেলপা (MELPA) প্যাকেজ রিপোজিটরিতে কোটলিন মোড উপলব্ধ রয়েছে।
* জেটব্রেইনস ইক্লিপস-এর জন্য একটি প্লাগইন প্রদান করে। 
* ইন্টেলিজ আইডিয়া (IntelliJ IDEA): এতে প্লাগইন-ভিত্তিক কোটলিন সমর্থন রয়েছে। ইন্টেলিজ আইডিয়া ১৫ ছিল প্রথম সংস্করণ যেখানে কোটলিন প্লাগইনটি ইনস্টলারের সাথে যুক্ত করা হয় এবং সরাসরি ব্যবহারের সুবিধা প্রদান করা হয়।
* গ্রেডল: কোটলিন গ্রেডলের সাথে চমৎকারভাবে সংহত হয়, যা একটি বিল্ড অটোমেশন বা নির্মাণ স্বয়ংক্রিয়করণ সরঞ্জাম।

## প্রয়োগসমূহ
২০১৭ সালের মে মাসে গুগল আই/ও-তে কোটলিনকে অ্যান্ড্রয়েড তৈরির একটি দাপ্তরিক ভাষা হিসেবে ঘোষণা করা হয়। এর ফলে জাভা এবং সি++ এর পর এটি অ্যান্ড্রয়েডের জন্য পূর্ণ সমর্থিত তৃতীয় ভাষা হিসেবে আত্মপ্রকাশ করে।  সাল নাগাদ কোটলিন ছিল অ্যান্ড্রয়েডে সবচেয়ে বেশি ব্যবহৃত ভাষা। গুগলের ধারণা অনুযায়ী প্লে স্টোরের শীর্ষ ১,০০০টি অ্যাপের মধ্যে ৭০% কোটলিনে লেখা ছিল। গুগলের নিজস্ব ৬০টি অ্যাপ কোটলিনে লেখা হয়েছে, যার মধ্যে ম্যাপস এবং ড্রাইভ উল্লেখযোগ্য। গুগল হোম-এর মতো অনেক অ্যান্ড্রয়েড অ্যাপ কোটলিনে স্থানান্তরের প্রক্রিয়ার মধ্যে থাকায় সেগুলোতে কোটলিন এবং জাভা উভয়ই ব্যবহৃত হচ্ছে। অ্যান্ড্রয়েডে কোটলিনের ব্যবহারকে এর নাল-সেফটি এবং কোডকে ছোট ও সহজপাঠ্য করার বৈশিষ্ট্যের জন্য অত্যন্ত উপকারী হিসেবে দেখা হয়।

কেটর (Ktor) হলো জেটব্রেইনসের একটি ফ্রেমওয়ার্ক যা সার্ভার এবং ক্লায়েন্ট অ্যাপ্লিকেশন তৈরির জন্য বিশেষভাবে কোটলিন কেন্দ্রিক। ৪ জানুয়ারি ২০১৭-তে স্প্রিং ফ্রেমওয়ার্ক এর সংস্করণ ৫-এ আনুষ্ঠানিকভাবে কোটলিন সমর্থন যোগ করা হয়। কোটলিনকে আরও বেশি সহায়তা প্রদানের লক্ষ্যে স্প্রিং তাদের সমস্ত নথিপত্র বা ডকুমেন্টেশন কোটলিনে অনুবাদ করেছে এবং করুটিন-এর মতো অনেক কোটলিন-নির্দিষ্ট ফিচারের জন্য এতে সরাসরি সমর্থন যোগ করা হয়েছে।

২০২০ সালে কোটলিন ব্যবহারকারী ডেভেলপারদের ওপর জেটব্রেইনসের একটি জরিপ অনুযায়ী, ৫৬% মোবাইল অ্যাপ তৈরির জন্য এবং ৪৭% ওয়েব ব্যাকএন্ডের জন্য কোটলিন ব্যবহার করেন। প্রায় এক-তৃতীয়াংশ ডেভেলপার জানিয়েছেন যে তারা অন্য ভাষা থেকে কোটলিনে স্থানান্তরিত হচ্ছেন। অধিকাংশ কোটলিন ব্যবহারকারী অ্যান্ড্রয়েড (বা জেভিএম) লক্ষ্য করে কাজ করেন এবং মাত্র ৬% কোটলিন নেটিভ ব্যবহার করেন।

## গ্রহণযোগ্যতা
২০১৮ সালে গিটহাবে কোটলিন ছিল দ্রুততম বর্ধনশীল প্রোগ্রামিং ভাষা; ২০১৭ সালের তুলনায় এ সময় ডেভেলপার বা প্রোগ্রামারের সংখ্যা ২.৬ গুণ বৃদ্ধি পায়। ২০২০ সালের স্ট্যাক ওভারফ্লো ডেভেলপার সার্ভে অনুযায়ী, এটি চতুর্থ সর্বাধিক জনপ্রিয় বা প্রিয় প্রোগ্রামিং ভাষা।

এছাড়াও কোটলিন ২০১৯ সালে 'ও'রেইলি ওপেন সোর্স সফটওয়্যার কনফারেন্স ব্রেকআউট অ্যাওয়ার্ড' লাভ করে।

অনেক কোম্পানি বা সংস্থা তাদের ব্যাকএন্ড তৈরির জন্য কোটলিন ব্যবহার করেছে:
* আলেগ্রো
* অ্যামাজন
* অ্যাটলাসিয়ান
* ক্যাশ অ্যাপ
* ফ্লাক্স
* গুগল
* গ্রেডল
* জেটব্রেইনস
* মেশক্লাউড
* নরওয়েজিয়ান ট্যাক্স অ্যাডমিনিস্ট্রেশন
* ওএলএক্স
* পিভোটাল
* রকেট ট্রাভেল
* শাজাম
* জাল্যান্ডো

কিছু কোম্পানি বা সংস্থা ওয়েব তৈরির জন্য কোটলিন ব্যবহার করেছে:
* বার্কলেস ব্যাংক
* ডেটা২ভিজ
* ফ্রিটজ২
* জেটব্রেইনস

বেশ কিছু কোম্পানি জনসম্মুখে কোটলিন ব্যবহারের কথা জানিয়েছে:
* বেসক্যাম্প
* কর্ডা: এটি একটি ডিস্ট্রিবিউটেড লেজার যা বেশ কিছু নামী ব্যাংকের একটি কনসোর্টিয়াম দ্বারা তৈরি (যেমন— গোল্ডম্যান স্যাকস, ওয়েলস ফারগো, জেপি মরগান চেজ, ডয়েচে ব্যাংক, ইউবিএস, এইচএসবিসি, বিএনপি পারিবাস এবং সোসিয়েট জেনারেল); এর ৯০%-এর বেশি কোড কোটলিনে লেখা।
* কোর্সেরা
* ড্রিপস্ট্যাট
* ডুয়োলিঙ্গো
* মেটা
* নেটফ্লিক্স
* পিন্টারেস্ট
* ট্রেলো
* উবার

## তথ্যসূত্র
* এই নিবন্ধটিতে কোটলিন টিউটোরিয়ালের উদ্ধৃতি রয়েছে যা অ্যাপাচি ২.০ (Apache 2.0) লাইসেন্সের অধীনে প্রকাশ করা হয়েছে।

## বহিঃসংযোগ
* 

বিষয়শ্রেণী:২০১১-এর সফটওয়্যার
বিষয়শ্রেণী:মুক্ত সফটওয়্যার প্রকল্পসমূহ
বিষয়শ্রেণী:উচ্চস্তরের প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:জাভা প্রোগ্রামিং ভাষা পরিবার
বিষয়শ্রেণী:জেভিএম প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:বস্তু-সংশ্লিষ্ট প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:২০১১-এ তৈরি প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:অ্যাপাচি লাইসেন্স ব্যবহারকারী সফটওয়্যার
বিষয়শ্রেণী:স্ট্যাটিনালি টাইপড প্রোগ্রামিং ভাষা