মোবাইল ডেভেলপমেন্টে Kotlin বিশেষত্ব: এটি কী, কী কাঠামো এবং এটি কীভাবে কাজ করে

লেখক: IT Sectr প্রকাশিত: 2026-06-29 পড়ার সময়: 11 মিনিট

Kotlin হল Android ডেভেলপমেন্টের জন্য প্রাথমিক ভাষা। Google Android Docs (2025) অনুযায়ী, 95% এর বেশি নতুন Android প্রকল্প Kotlin ব্যবহার করে। Kotlin বিশেষত্ব বোঝা — data class, sealed class, coroutines এবং scope functions — একজন Android ডেভেলপারের জন্য বাধ্যতামূলক প্রয়োজনীয়তা।

মূল পয়েন্ট

  • data class — equals/hashCode/toString/copy/componentN এর স্বয়ংক্রিয় জেনারেশন। ডেটা মডেলের জন্য। sealed class — when চেক সহ সীমাবদ্ধ টাইপ হায়ারার্কি।
  • Scope functions: let, run, with, apply, also। প্রসঙ্গ (it vs this) এবং রিটার্ন মান অনুসারে পৃথক।
  • Coroutines: launch (fire-and-forget), async (ফলাফল সহ), runBlocking (ব্রিজ), withContext (Dispatcher পরিবর্তন)।
  • lifecycleScope এবং viewModelScope — ম্যানুয়াল বাতিল ছাড়া Lifecycle-aware coroutines।
  • reified — inline ফাংশনে টাইপ সংরক্ষণ। lateinit/lazy — বিলম্বিত ইনিশিয়ালাইজেশন।

ক্লাস (data class, sealed class, object, companion object)

Kotlin Java থেকে ক্লাস ধারণা সম্প্রসারিত করে। data class, sealed class, object এবং companion object — এমন কাঠামো যা Java এ নেই বা ভিন্নভাবে বাস্তবায়িত।

data class বনাম sealed class

data class — একটি ক্লাস যা স্বয়ংক্রিয়ভাবে equals(), hashCode(), toString(), copy() এবং componentN() জেনারেট করে। ডেটা মডেল (DTO, Entity) এর জন্য আদর্শ। প্রয়োজনীয়তা: প্রাথমিক কনস্ট্রাক্টরে কমপক্ষে একটি প্যারামিটার, val/var, open/sealed/inner হতে পারে না। sealed class — সীমাবদ্ধ উপশ্রেণী হায়ারার্কি সহ একটি ক্লাস। সকল উপশ্রেণী কম্পাইল টাইমে জানা যায় এবং একই ফাইলে ঘোষিত হয়। sealed class সহ when এক্সপ্রেশনের else ব্রাঞ্চের প্রয়োজন হয় না। sealed interface (Kotlin 1.9+) — sealed class এর মতো কিন্তু একাধিক ইনহেরিটেন্স অনুমতি দেয়। object — সিঙ্গলটন, object কীওয়ার্ড দিয়ে ঘোষিত (class না)। থ্রেড-সেফ লেজি ইনিশিয়ালাইজেশন। companion object — ক্লাসের স্ট্যাটিক সদস্য। এর একটি নাম থাকে (ডিফল্ট Companion)। ইন্টারফেস বাস্তবায়ন করতে পারে এবং extension functions থাকতে পারে।

প্রকার বিবরণ ব্যবহার
data classequals, hashCode, toString, copy এর স্বয়ংক্রিয় জেনারেশনডেটা মডেল, DTO, Entity
sealed classসীমাবদ্ধ হায়ারার্কি, when চেকঅবস্থা, ফলাফল, UI State
sealed interfacesealed class + একাধিক ইনহেরিটেন্সইভেন্ট, অ্যাকশন (Kotlin 1.9+)
objectসিঙ্গলটন (ঘোষণামূলক)Factory, Utility, ধ্রুবক
companion objectক্লাসের স্ট্যাটিক সদস্যFactory Method, স্ট্যাটিক ধ্রুবক
enum classধ্রুবক সহ গণনানির্দিষ্ট সেট সহ অবস্থা

data class — 90% মডেলের জন্য। sealed class — UI State এবং ফলাফলের জন্য। object — সিঙ্গলটনের জন্য। IT Sectr সকল স্ক্রিন অবস্থার (Loading, Success, Error) জন্য sealed class সুপারিশ করে।

অনুশীলনে Sealed class

Sealed class — অবস্থা মডেলিংয়ের জন্য একটি শক্তিশালী টুল। উদাহরণ: UiState<T> উপশ্রেণী Loading, Success(data: T), Error(message: String) সহ। when এক্সপ্রেশন সকল অবস্থার হ্যান্ডলিং নিশ্চিত করে। Sealed interface — ইভেন্ট এবং অ্যাকশনের জন্য যেখানে একাধিক বাস্তবায়ন প্রয়োজন। Value class (Kotlin 1.5+) — ওভারহেড ছাড়া একটি মানের জন্য র্যাপার। টাইপ-সেফ আইডেন্টিফায়ারের জন্য ব্যবহৃত: @JvmInline value class UserId(val id: String).

ফাংশন (extension, inline, higher-order, scope functions)

Extension Function — ইনহেরিটেন্স ছাড়া বিদ্যমান ক্লাসে মেথড যোগ করা। fun String.isEmail(): Boolean. Extension Property — প্রপার্টির জন্য একই (ব্যাকিং ফিল্ড ছাড়া)। Inline Function — কল সাইটে ফাংশন বডি বসানো — কল ওভারহেড ছাড়া। ল্যাম্বডা সহ higher-order ফাংশনের জন্য ব্যবহৃত। Higher-Order Function — একটি ফাংশন যা অন্য ফাংশন গ্রহণ বা ফেরত দেয়। Scope Functions — অবজেক্ট প্রসঙ্গে কাজ করার জন্য পাঁচটি ফাংশন: let, run, with, apply, also.

Scope Functions

let — প্রসঙ্গ it, ল্যাম্বডা ফলাফল ফেরত দেয়। null-safe কলের জন্য ব্যবহৃত (?.let {}). apply — প্রসঙ্গ this, প্রসঙ্গ ফেরত দেয়। অবজেক্ট কনফিগারেশনের জন্য। run — প্রসঙ্গ this, ল্যাম্বডা ফলাফল ফেরত দেয়। প্রসঙ্গ সহ গণনার জন্য। also — প্রসঙ্গ it, প্রসঙ্গ ফেরত দেয়। সাইড ইফেক্টের জন্য (লগিং)। with — extension নয়, প্রসঙ্গ this, ল্যাম্বডা ফলাফল ফেরত দেয়। একটি অবজেক্টের উপর অপারেশনের গ্রুপের জন্য। Lambda — বেনামী ফাংশন। Destructuring Declaration — data class কে ভেরিয়েবলে আনপ্যাক করা: val (name, age) = person.

Inline + reified

Inline function reified সহ — JVM এ জেনেরিক টাইপ সংরক্ষণের একমাত্র উপায়। ব্যবহার: টাইপ-সেফ বিল্ডার (Gson.fromJson<T>()), টাইপ চেক (is T), ক্লাস পাওয়া (T::class). Crossinline এবং Noinline — inline ফাংশনে ল্যাম্বডা প্যারামিটারের জন্য সংশোধক। crossinline — non-local return নিষিদ্ধ করে, noinline — নির্দিষ্ট ল্যাম্বডার ইনলাইনিং নিষিদ্ধ করে। IT Sectr শুধুমাত্র টাইপ নিয়ে কাজ করার সময় inline + reified সুপারিশ করে; সাধারণ higher-order ফাংশনের জন্য, inline বাইটকোড আকার বাড়াতে পারে।

Coroutines (Coroutine Builder, Dispatchers, Scope)

Coroutines — অ্যাসিনক্রোনাস প্রোগ্রামিংয়ের জন্য হালকা থ্রেড। থ্রেড ব্লক করে না — সাসপেন্ড হয়। suspend function — একটি ফাংশন যা থ্রেড ব্লক না করে সাসপেন্ড হতে পারে। শুধুমাত্র coroutine বা অন্য suspend function থেকে কল করা যেতে পারে।

CoroutineScope

CoroutineScope — coroutines এর পরিধি। এতে CoroutineContext (Job + Dispatcher) থাকে। lifecycleScope — Activity/Fragment এর জন্য (Lifecycle-aware). viewModelScope — ViewModel এর জন্য (onCleared() এ স্বয়ংক্রিয় বাতিল). GlobalScope — গ্লোবাল পরিধি (প্রোডাকশনে ব্যবহার করবেন না — মেমরি লিক). Dispatchers: Dispatchers.Main (UI), Dispatchers.IO (নেটওয়ার্ক/ডিস্ক), Dispatchers.Default (CPU-intensive), Dispatchers.Unconfined (সুপারিশ করা হয় না). launch — coroutine শুরু: Job. async — ফলাফল সহ শুরু: Deferred<T>. runBlocking — ব্লকিং ব্রিজ. withContext — suspend ফাংশনের ভিতরে Dispatcher পরিবর্তন।

kotlin
// ViewModel এ ডেটা লোড করার উদাহরণ coroutines
class MainViewModel : ViewModel() {
    private val _state = MutableStateFlow<UiState>(UiState.Loading)
    val state: StateFlow<UiState> = _state.asStateFlow()

    fun loadData() {
        viewModelScope.launch {
            _state.value = UiState.Loading
            try {
                val data = withContext(Dispatchers.IO) {
                    repository.fetchData()
                }
                _state.value = UiState.Success(data)
            } catch (e: Exception) {
                _state.value = UiState.Error(e.message)
            }
        }
    }
}

// async সহ সমান্তরাল অনুরোধ
suspend fun loadCombinedData(): CombinedData = coroutineScope {
    val users = async(Dispatchers.IO) { api.getUsers() }
    val posts = async(Dispatchers.IO) { api.getPosts() }
    CombinedData(users.await(), posts.await())
}

viewModelScope.launch — ViewModel এ স্ট্যান্ডার্ড coroutine লঞ্চ। withContext(Dispatchers.IO) — নেটওয়ার্ক অনুরোধের জন্য IO থ্রেডে সুইচ করা। Dispatchers নির্ধারণ করে কোন থ্রেড পুলে coroutine এক্সিকিউট হয়। IT Sectr ViewModel এর জন্য viewModelScope এবং Activity/Fragment এর জন্য lifecycleScope সুপারিশ করে।

উন্নত বৈশিষ্ট্য (reified, destructuring, lateinit/lazy)

reified — inline ফাংশনে টাইপ সংশোধক। টাইপ ব্যবহারের অনুমতি দেয়: T::class, is T, as T. reified ছাড়া, JVM এ জেনেরিক মুছে যায় (type erasure). inline fun + reified — টাইপ-সেফ API এর জন্য শক্তিশালী সমন্বয়। Destructuring Declaration — val (x, y) = point. data class এবং componentN() যুক্ত টাইপের জন্য কাজ করে। typealias — টাইপ উপনাম: typealias Callback = (String) -> Unit. lateinit — var এর বিলম্বিত ইনিশিয়ালাইজেশন (dependency injection এর জন্য). থ্রেড-সেফ নয়। lazy — val এর লেজি ইনিশিয়ালাইজেশন (ডিফল্টভাবে থ্রেড-সেফ). lazy(LazyThreadSafetyMode.NONE) — সিঙ্ক্রোনাইজেশন ছাড়া। Extension function এবং Extension property — ইনহেরিটেন্স ছাড়া কার্যকারিতা যোগ করা। Kotlin এমন একটি ভাষা যেখানে extension functions 90% ইউটিলিটি কাজ সমাধান করে।

ডেলিগেটেড প্রপার্টি

Delegated Properties — getter/setter অন্য অবজেক্টে অর্পণ করা। স্ট্যান্ডার্ড ডেলিগেট: lazy, observable, vetoable, map. getValue/setValue অপারেটরের মাধ্যমে কাস্টম ডেলিগেট। by — ডেলিগেশন কীওয়ার্ড: val name by lazy { loadName() }. ডেলিগেটেড প্রপার্টি ViewModel ডেলিগেট (by viewModels()) এর ভিত্তি। IT Sectr বিলম্বিত ইনিশিয়ালাইজেশনের জন্য lazy এবং পরিবর্তন পর্যবেক্ষণের জন্য Delegates.observable সুপারিশ করে।

বৈশিষ্ট্য বিবরণ উদাহরণ
reifiedinline এ জেনেরিক টাইপ সংরক্ষণinline fun <reified T> parse(): T
destructuringdata class আনপ্যাক করাval (name, age) = person
typealiasটাইপ উপনামtypealias Orders = List<Order>
lateinitvar এর বিলম্বিত ইনিশিয়ালাইজেশনlateinit var adapter: Adapter
lazyval এর লেজি ইনিশিয়ালাইজেশনval config by lazy { load() }
delegatedপ্রপার্টি ডেলিগেশনvar x by Delegates.observable(0)

reified — টাইপ-সেফ API এর জন্য। lazy — বিলম্বিত লোডিংয়ের জন্য। delegated properties — প্রপার্টি লজিক পুনরায় ব্যবহারের জন্য। IT Sectr কার্যকর Kotlin ডেভেলপমেন্টের জন্য এই সমস্ত বৈশিষ্ট্য আয়ত্ত করার সুপারিশ করে।

Flow এবং StateFlow

Flow — Kotlin এ কোল্ড অ্যাসিনক্রোনাস ডেটা স্ট্রিম। কালেক্টরের চাহিদায় মান নির্গত করে। StateFlow — একক বর্তমান মান সহ হট Flow। ViewModel এ UI State এর জন্য ব্যবহৃত। SharedFlow — ইভেন্টের জন্য হট Flow (এক-শট ইভেন্ট). flowOf, asFlow — কালেকশন থেকে Flow তৈরি। catch, retry, debounce — অপারেটর। stateIn, shareIn — কোল্ড Flow কে হট এ রূপান্তর। IT Sectr UI State এর জন্য StateFlow এবং ইভেন্ট (Snackbar, নেভিগেশন) এর জন্য SharedFlow সুপারিশ করে।

kotlin
class SearchViewModel : ViewModel() {
    private val _query = MutableStateFlow("")
    val suggestions: StateFlow<List<String>> = _query
        .debounce(300)
        .filter { it.length >= 2 }
        .flatMapLatest { repository.search(it) }
        .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList())

    fun onQueryChanged(query: String) {
        _query.value = query
    }
}

সিরিয়ালাইজেশন (kotlinx.serialization, Parcelize)

kotlinx.serialization — JSON সিরিয়ালাইজেশনের জন্য Kotlin লাইব্রেরি। @Serializable — অ্যানোটেশন। @SerialName — কাস্টম ফিল্ড নাম। সমর্থন: JSON, CBOR, ProtoBuf. Parcelize — Android Parcelable এর জন্য @Parcelize (ম্যানুয়াল বাস্তবায়ন ছাড়া). Gson vs Moshi vs kotlinx: kotlinx.serialization — Kotlin-first, কম্পাইল-সেফ, reflection ছাড়া। Moshi — অ্যানোটেশন + codegen. IT Sectr নতুন প্রকল্পের জন্য kotlinx.serialization এবং বিদ্যমান প্রকল্পের জন্য Moshi সুপারিশ করে।

kotlin
@Serializable
data class ApiResponse<T>(
    val success: Boolean,
    @SerialName("data") val data: T? = null,
    val error: String? = null
)

@Serializable
data class User(
    val id: Int,
    val name: String,
    val email: String
)

// ডিসিরিয়ালাইজেশন
val json = Json { ignoreUnknownKeys = true }
val response = json.decodeFromString<ApiResponse<List<User>>>(jsonString)
println("Users: ${response.data?.size ?: 0}")

সচরাচর জিজ্ঞাসা

data class এবং sealed class এর মধ্যে পার্থক্য কী?

data class — ডেটার জন্য (equals/hashCode/copy এর স্বয়ংক্রিয় জেনারেশন). sealed class — টাইপ হায়ারার্কির জন্য (when এ চেক). sealed interface — একাধিক ইনহেরিটেন্স সহ একই।

Kotlin এ scope functions কী?

let, run, with, apply, also. প্রসঙ্গ (it vs this) এবং রিটার্ন মান (result vs context) অনুযায়ী পৃথক। let — null safety, apply — কনফিগারেশন, also — সাইড ইফেক্ট।

CoroutineScope কী এবং কী কী প্রকার রয়েছে?

CoroutineScope — coroutines এর পরিধি। lifecycleScope — Activity এর জন্য, viewModelScope — ViewModel এর জন্য। GlobalScope — সুপারিশ করা হয় না।

Kotlin এ reified কী?

reified — inline ফাংশনে টাইপ সংরক্ষণ। T::class এবং is T অনুমতি দেয়। শুধুমাত্র inline ফাংশনের সাথে কাজ করে।

coroutine builders কী: launch, async, runBlocking?

launch — ফলাফল ছাড়া। async — ফলাফল সহ (Deferred). runBlocking — main/test এর জন্য ব্লকিং ব্রিজ। withContext — Dispatcher পরিবর্তন।

সংক্ষিপ্তসার

  • data class — মডেলের জন্য। sealed class — অবস্থার জন্য। object — সিঙ্গলটনের জন্য।
  • Scope functions: let (null-safe), apply (কনফিগারেশন), run (গণনা), also (লগিং).
  • Coroutines: launch (fire-and-forget), async (ফলাফল সহ), withContext (Dispatcher পরিবর্তন).
  • viewModelScope — ViewModel এর জন্য মানক। lifecycleScope — Activity/Fragment এর জন্য।
  • reified — টাইপ-সেফ inline ফাংশন। lateinit — DI, lazy — লেজি ইনিশিয়ালাইজেশন।
  • Extension functions — ইনহেরিটেন্স ছাড়া কার্যকারিতা যোগ করুন।
  • Dispatchers: Main (UI), IO (নেটওয়ার্ক/ডিস্ক), Default (CPU). সঠিকটি বেছে নিন।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন