Kotlin JetBrains-এর একটি স্ট্যাটিক্যালি টাইপ করা প্রোগ্রামিং ভাষা, যা JVM-এ চলে এবং 2017 সাল থেকে Google-এর দ্বারা Android ডেভেলপমেন্টের জন্য অফিসিয়ালি সমর্থিত। Kotlin Java-এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ, এর সংক্ষিপ্ত সিনট্যাক্স এবং বিল্ট-ইন null নিরাপত্তা রয়েছে। Kotlin Documentation — ভাষা এবং স্ট্যান্ডার্ড লাইব্রেরির সম্পূর্ণ গাইড।
মূল পয়েন্ট
Kotlin JetBrains (IntelliJ IDEA-এর ডেভেলপার) দ্বারা তৈরি একটি স্ট্যাটিক্যালি টাইপ করা প্রোগ্রামিং ভাষা, যা Apache 2.0 লাইসেন্সের অধীনে 2016 সালে প্রকাশিত হয়। Kotlin JVM বাইটকোড, JavaScript এবং নেটিভ কোডে (Kotlin/Native-এর মাধ্যমে) কম্পাইল হয়। এর প্রধান প্রয়োগ ক্ষেত্র হল Android ডেভেলপমেন্ট, সার্ভার-সাইড অ্যাপ্লিকেশন এবং ক্রস-প্ল্যাটফর্ম প্রকল্প।
Google Google I/O 2017-এ Kotlin-কে Android ডেভেলপমেন্টের অফিসিয়াল ভাষা ঘোষণা করে। Google-এর (Android Developer Blog, 2026) মতে, Google Play-তে 85% এর বেশি নতুন প্রকল্প Kotlin ব্যবহার করে। ভাষাটি সার্ভার-সাইড ডেভেলপমেন্ট (Spring Boot, Ktor) এবং মাল্টিপ্ল্যাটফর্ম প্রকল্পে (Kotlin Multiplatform Mobile) সক্রিয়ভাবে ব্যবহৃত হয়।
Kotlin Java-এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ — আপনি একই প্রকল্পের মধ্যে Kotlin থেকে Java কোড এবং এর বিপরীত কল করতে পারেন। বিল্ড টুল (Gradle, Maven) উভয় ভাষা সমর্থন করে, যা ডেভেলপমেন্টে বিরতি ছাড়াই Java থেকে Kotlin-এ ধীরে ধীরে স্থানান্তর সম্ভব করে।
প্রধান কারণ: সংক্ষিপ্ততা — একই কাজের জন্য Kotlin-এর Java-এর তুলনায় গড়ে 40% কম কোড লাইন প্রয়োজন। Null নিরাপত্তা — কম্পাইলার চেক ছাড়া nullable টাইপ ব্যবহার নিষিদ্ধ করে। কার্যকরী ক্ষমতা — উচ্চ-অর্ডার ফাংশন, ল্যাম্বডা, এক্সটেনশন ফাংশন এবং করুটিন কোডকে আরও অভিব্যক্তিপূর্ণ এবং নিরাপদ করে।
মৌলিক Kotlin সিনট্যাক্স সংক্ষিপ্ততা এবং স্পষ্টতাকে একত্রিত করে। ভেরিয়েবল val (অপরিবর্তনীয়) এবং var (পরিবর্তনীয়) মাধ্যমে ঘোষণা করা হয়। কম্পাইলার টাইপ ইনফারেন্স ব্যবহার করে, তবে স্পষ্ট টাইপ ঘোষণা সমর্থিত। ফাংশন fun কীওয়ার্ড দিয়ে ঘোষণা করা হয়।
package com.example.intro
// ধ্রুবক এবং চলক
val appName: String = "KotlinApp" // অপরিবর্তনীয়
var version = 1.0 // পরিবর্তনীয়, টাইপ অনুমিত
// এক্সপ্রেশন বডি সহ ফাংশন
fun sum(a: Int, b: Int) = a + b
// String templates
fun greet(name: String) = "হ্যালো, $name! সংস্করণ ${appName}_$version"
// Default and named arguments
fun createUser(
name: String,
age: Int = 18,
email: String? = null
)When এক্সপ্রেশন Java-তে switch-কে প্রতিস্থাপন করে এবং আরও নমনীয়: এটি টাইপ চেক, রেঞ্জ, শর্ত এবং break ছাড়া শাখা সমর্থন করে। কম্পাইলার enum এবং sealed ক্লাসের জন্য সম্পূর্ণ কভারেজ চেক করে। স্মার্ট কাস্ট is চেকের পরে স্বয়ংক্রিয়ভাবে টাইপ রূপান্তর করে, যা স্পষ্ট কাস্ট দূর করে।
fun analyzeValue(value: Any) = when (value) {
is String -> "${value.length} দৈর্ঘ্যের স্ট্রিং" // স্মার্ট কাস্ট
is Int -> "পূর্ণসংখ্যা: $value"
in 1..10 -> "1-10 রেঞ্জের সংখ্যা"
else -> "অজানা টাইপ"
}Null নিরাপত্তা Kotlin-এর একটি মূল বৈশিষ্ট্য যা কম্পাইল টাইমে NullPointerException দূর করে। Kotlin-এ, টাইপ ডিফল্টরূপে null হতে পারে না। null অনুমতি দিতে, টাইপে ? যোগ করুন: String?। কম্পাইলারের প্রতিটি nullable মানের স্পষ্ট চেক প্রয়োজন।
// Nullable এবং non-null টাইপ
val nonNull: String = "সর্বদা null নয়"
val nullable: String? = null // অনুমোদিত
// সেফ কল — শুধুমাত্র null না হলে এক্সিকিউট হয়
val length: Int? = nullable?.length
// এলভিস অপারেটর — ডিফল্ট মান
val text: String = nullable ?: "Default text"
// Let — non-null মান সহ ব্লক এক্সিকিউট করুন
nullable?.let { value ->
println("মান: $value")
}সেফ কল অপারেটর (?.) null রিটার্ন করে যদি অপারেটরের আগের অবজেক্ট null হয়, এবং অন্যথায় মেথড/প্রপার্টি কল করে। এলভিস অপারেটর (?:) ডিফল্ট মান প্রদান করে যদি বাম পাশের অংশ null হয়। নট-নল অ্যাসারশন (!!) NullPointerException থ্রো করে যদি মান null হয় — শুধুমাত্র তখনই ব্যবহার করুন যখন আপনি 100% নিশ্চিত যে মান বিদ্যমান।
প্ল্যাটফর্ম টাইপ — কল করা Java কোড থেকে Java টাইপ যা Kotlin nullable বা non-null হিসেবে চিহ্নিত করতে পারে না। টাইপটি String! (বিস্ময়সূচক চিহ্ন সহ) প্রদর্শিত হয়। Java কোডের সাথে কাজ করার সময় ডেভেলপার নিজেই null নিরাপত্তার জন্য দায়ী।
Data ক্লাস Kotlin-এ স্বয়ংক্রিয়ভাবে equals(), hashCode(), toString(), copy() এবং componentN() জেনারেট করে। এটি Java মডেলের (POJO) বয়লারপ্লেট দূর করে এবং কোড পরিষ্কার করে। data class ঘোষণা করতে Java-তে 20-30 লাইনের পরিবর্তে একটি লাইন লাগে।
data class User(
val id: Long,
val name: String,
val email: String,
val age: Int? = null
)
// ব্যবহার
val user = User(1, "আন্না", "anna@example.com")
val updatedUser = user.copy(age = 25)
// ডিস্ট্রাকচারিং
val (id, name) = user
println("ব্যবহারকারী #$id: $name")ডিস্ট্রাকচারিং একটি লাইনে data class-কে ভেরিয়েবলে বিভক্ত করতে দেয়। এটি জোড়া, ত্রয়ী এবং অন্যান্য যৌগিক মান নিয়ে কাজ করার সময় সুবিধাজনক। ডিস্ট্রাকচারিং data ক্লাস, স্ট্যান্ডার্ড কালেকশন (List, Map) এবং operator fun componentN() সহ যেকোনো ক্লাসের জন্য সমর্থিত।
এক্সটেনশন ফাংশন ইনহেরিটেন্স ছাড়াই বিদ্যমান ক্লাসে নতুন মেথড যোগ করার Kotlin প্রক্রিয়া। এক্সটেনশন রিসিভার প্যারামিটার সহ স্ট্যাটিক মেথডে কম্পাইল হয়, তাই ইনহেরিটেন্স প্রয়োজন নেই এবং ভার্চুয়াল ডিসপ্যাচ সমর্থিত নয়।
// String-এর জন্য এক্সটেনশন ফাংশন
fun String.isEmail(): Boolean {
return this.contains("@") && this.contains(".")
}
// এক্সটেনশন প্রপার্টি
val String.isPhoneNumber: Boolean
get() = this.matches(Regex("^\\+?[\\d-]{10,15}$"))
// কালেকশনের জন্য জেনেরিক এক্সটেনশন
fun List<Int>.sumOfEvens(): Int {
return this.filter { it % 2 == 0 }.sum()
}
// ব্যবহার
println("test@mail.com".isEmail()) // trueএক্সটেনশন Android SDK এবং লাইব্রেরিতে ব্যাপকভাবে ব্যবহৃত হয়। উদাহরণস্বরূপ, Android KTX-এ Activity এক্সটেনশন Activity, Fragment, View এবং অন্যান্য ক্লাসের জন্য extension functions। এক্সটেনশন ফাইলে টপ-লেভেল ফাংশন বা ক্লাসের সদস্য এক্সটেনশন হিসেবে ঘোষণা করা যেতে পারে।
করুটিন Kotlin-এ অ্যাসিনক্রোনাস প্রোগ্রামিং প্রক্রিয়া যা সিকোয়েন্সিয়াল স্টাইলে নন-ব্লকিং কোড লেখার অনুমতি দেয়। করুটিন থ্রেড ব্লক না করে suspend ফাংশনে এক্সিকিউশন থামায় এবং অপারেশন শেষ হওয়ার পরে পুনরায় শুরু হয়। এটি RxJava কলব্যাক চেইন এবং AsyncTask-এর বিকল্প।
import kotlinx.coroutines.*
// Suspend ফাংশন — থামানো যেতে পারে
suspend fun fetchUserData(userId: Int): User {
// delay — suspend ফাংশন, থ্রেড ব্লক করে না
delay(500)
return User(userId, "User $userId", "user@example.com")
}
// করুটিনে লঞ্চ
fun loadData() {
CoroutineScope(Dispatchers.Main).launch {
val user = fetchUserData(1) // এখানে থামুন
updateUI(user) // মূল থ্রেডে চালিয়ে যান
}
}Dispatchers করুটিনের জন্য থ্রেড পুল নির্ধারণ করে: Dispatchers.Main (UI থ্রেড), Dispatchers.IO (নেটওয়ার্ক/ডিস্ক অপারেশন), Dispatchers.Default (CPU-নিবিড় কাজ)। স্ট্রাকচার্ড কনকারেন্সি নিশ্চিত করে যে করুটিন স্কোপ শেষ হওয়ার পরে সক্রিয় না থাকে — এটি মেমরি লিক প্রতিরোধ করে।
// async/await-এর মাধ্যমে সমান্তরাল এক্সিকিউশন
suspend fun loadDashboard(): Dashboard = coroutineScope {
val user = async { fetchUserData(1) }
val orders = async { fetchOrders(1) }
val stats = async { fetchStats() }
Dashboard(user.await(), orders.await(), stats.await())
}নতুন Android প্রকল্পের জন্য Kotlin এবং Java-এর মধ্যে পছন্দ একটি মৌলিক আর্কিটেকচারাল সিদ্ধান্ত। Kotlin আরও আধুনিক সিনট্যাক্স এবং বিল্ট-ইন নিরাপত্তা ব্যবস্থা অফার করে, যেখানে Java-তে ডেভেলপারদের বিস্তৃত পুল এবং পরিপক্ক লাইব্রেরি রয়েছে।
| বৈশিষ্ট্য | Kotlin | Java |
|---|---|---|
| Null নিরাপত্তা | বিল্ট-ইন (nullable/non-null) | বিল্ট-ইন নয় (@Nullable অ্যানোটেশন) |
| কোডের পরিমাণ | Java থেকে −40% | বয়লারপ্লেট (getters/setters) |
| Data ক্লাস | data class (এক লাইন) | Lombok সহ বা ম্যানুয়ালি POJO |
| অ্যাসিনক্রোনাস | Coroutines (suspend/await) | CompletableFuture, RxJava |
| এক্সটেনশন ফাংশন | বিল্ট-ইন | শুধু ইউটিলিটি ক্লাসের মাধ্যমে |
| স্মার্ট কাস্ট | is-চেকের পরে | স্পষ্ট কাস্ট (Type) obj |
| পশ্চাদগামী সামঞ্জস্য | Java-এর সাথে 100% | — |
পারফরম্যান্স Kotlin এবং Java তুলনীয় — উভয়ই JVM বাইটকোডে কম্পাইল হয়। Kotlin মাঝে মাঝে করুটিন এবং ইনলাইনিং-এ মাইক্রো-ওভারহেড যোগ করে, কিন্তু এটি মোবাইল অ্যাপ্লিকেশনের জন্য নগণ্য। Google এবং JetBrains Kotlin-এ সক্রিয়ভাবে বিনিয়োগ করছে: Kotlin Multiplatform, Kotlin/Wasm এবং K2 কম্পাইলার পারফরম্যান্স উন্নতি।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Kotlin Java-এর চেয়ে 40% ছোট — কম বয়লারপ্লেট। Kotlin null নিরাপত্তা, data ক্লাস, এক্সটেনশন ফাংশন, করুটিন, স্মার্ট কাস্ট, when এক্সপ্রেশন যোগ করে। Java-এর সাথে সম্পূর্ণ সামঞ্জস্য: উভয় ভাষা JVM-এ চলে এবং দ্বন্দ্ব ছাড়াই একই প্রকল্পে ব্যবহার করা যেতে পারে।
টাইপ ডিফল্টরূপে non-null। nullable-এর জন্য ?: String? ব্যবহার করুন। কম্পাইলার nullable মানে সরাসরি অ্যাক্সেস নিষিদ্ধ করে। সেফ কল (?.) null রিসিভারে null রিটার্ন করে। এলভিস অপারেটর (?:) ডিফল্ট মান সেট করে। !! — সম্ভাব্য ব্যতিক্রম সহ জোরপূর্বক নিষ্কাশন।
করুটিন হালকা থ্রেড যা ক্রমিকভাবে অ্যাসিনক্রোনাস কোড লেখার অনুমতি দেয়। suspend ফাংশন থ্রেড ব্লক না করে থামে। launch এবং async CoroutineScope-এ করুটিন শুরু করে। নেটওয়ার্ক অনুরোধের জন্য Dispatchers.IO, UI আপডেটের জন্য Dispatchers.Main।
data class স্বয়ংক্রিয়ভাবে equals(), hashCode(), toString(), copy() এবং componentN() জেনারেট করে। উদাহরণ: data class User(val name: String, val age: Int)। val (name, age) = user-এর মাধ্যমে ডিস্ট্রাকচারিং। Java 14+ এ record-এর মতো, তবে অতিরিক্ত copy() মেথড সহ।
এক্সটেনশন ফাংশন বিদ্যমান ক্লাসে মেথড যোগ করে: fun String.isEmail(): Boolean। কম্পাইলার তাদের রিসিভার প্যারামিটার সহ স্ট্যাটিক কল দিয়ে প্রতিস্থাপন করে। ইনহেরিটেন্স প্রয়োজন নেই। Android KTX-এ এক্সটেনশন ব্যাপকভাবে ব্যবহৃত হয়: view.showToast(), activity.viewModels()।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন