Jetpack Compose: मूल बातें, Composable फ़ंक्शन और State

लेखक: IT Sectr प्रकाशित: 2026-02-21 पढ़ने का समय: 8 मिनट

Jetpack Compose Google का Android डेवलपमेंट के लिए आधुनिक घोषणात्मक UI फ्रेमवर्क है, जो जुलाई 2021 में स्थिर संस्करण 1.0 में जारी किया गया। Compose अनिवार्य XML लेआउट और View सिस्टम को @Composable एनोटेशन वाले Kotlin फ़ंक्शन से बदल देता है। Google I/O (2025) के अनुसार, 55% नए Android प्रोजेक्ट्स में Compose का उपयोग होता है, और XML की तुलना में UI कोड का औसत आकार 30–50% कम हो जाता है। फ्रेमवर्क State बदलने पर केवल बदले हुए स्क्रीन भागों को स्वचालित रूप से दोबारा खींचता है, जिससे notifyDataSetChanged या findViewById के मैन्युअल कॉल समाप्त हो जाते हैं।

मुख्य बिंदु

  • Jetpack Compose — Kotlin में Android के लिए Google का घोषणात्मक UI फ्रेमवर्क (XML लेआउट के बजाय @Composable फ़ंक्शन)।
  • @Composable — फ़ंक्शन एनोटेशन जो UI के एक भाग का वर्णन करता है, पैरामीटर ले सकता है और State पढ़ सकता है।
  • State और MutableState — प्रतिक्रियाशीलता तंत्र: State बदलने पर Compose केवल निर्भर Composable फ़ंक्शन को पुनः चलाता (recompose) करता है।
  • remember — पुनर्संयोजन के बीच मान कैश करने वाला फ़ंक्शन; इसके बिना State हर अपडेट पर रीसेट हो जाता है।
  • Modifier — सेटिंग्स की श्रृंखला (padding, size, clickable, background) जो Composable के स्वरूप और व्यवहार को नियंत्रित करती है।

Jetpack Compose क्या है?

Jetpack Compose Google का UI फ्रेमवर्क है जो रिएक्टिव प्रोग्रामिंग सिद्धांतों पर बनाया गया है। Activity के साथ XML लेआउट, FragmentManager और ViewBinding के बजाय, डेवलपर @Composable एनोटेशन के साथ Kotlin फ़ंक्शन के माध्यम से इंटरफ़ेस का वर्णन करता है। Compose LayoutInflater का उपयोग नहीं करता — UI शुद्ध Kotlin फ़ंक्शन हैं जो बाइटकोड में कंपाइल होते हैं। फ्रेमवर्क कई लाइब्रेरीज़ से बना है: Compose UI (मूल घटक Text, Button, Column, Row), Compose Foundation (Material Design, Gestures, Focus), Compose Material3 (Material You with Dynamic Colors) और Compose Runtime (State, Side Effects, Coroutines)। Compose Android API 21+ (Android 5.0) पर काम करता है और ComposeView — एक AndroidView एडॉप्टर के माध्यम से मौजूदा View/XML कोड के साथ पूरी तरह से संगत है।

Compose बनाम View System

View System (2008) मैन्युअल प्रबंधन के साथ View ऑब्जेक्ट्स के पदानुक्रम का उपयोग करता है: डेवलपर XML लेआउट बनाता है, findViewById के माध्यम से Views ढूंढता है, RecyclerView के लिए Adapter लागू करता है और डेटा बदलने पर notifyDataSetChanged कॉल करता है। Compose UI को कार्यात्मक रूप से वर्णित करता है: जब स्थिति बदलती है, फ्रेमवर्क केवल बदले हुए Composable फ़ंक्शन को पुनः चलाता (recompose) है, diff की गणना करता है और Canvas में न्यूनतम परिवर्तन लागू करता है। Compose का प्रदर्शन View System के बराबर है, और जटिल सूचियों (LazyColumn) वाले परिदृश्यों में key पैरामीटर के माध्यम से अनावश्यक तत्वों को छोड़कर यह अक्सर RecyclerView से बेहतर प्रदर्शन करता है। IT Sectr में, Compose का उपयोग minSdk 24+ वाले Android एप्लिकेशन के नए मॉड्यूल के लिए किया जाता है।

Composable फ़ंक्शन: UI के निर्माण खंड

@Composable — एक एनोटेशन जो सामान्य Kotlin फ़ंक्शन को UI निर्माण खंड में बदल देता है। Composable फ़ंक्शन अन्य Composable फ़ंक्शन को कॉल कर सकते हैं, जिससे घटकों का एक पेड़ बनता है। View के विपरीत, Composable फ़ंक्शन में डिफ़ॉल्ट रूप से कोई स्थिति नहीं होती — वे स्टेटलेस होते हैं और इनपुट पैरामीटर या State में प्रत्येक परिवर्तन पर दोबारा खींचे जाते हैं। Compose Compiler @Composable फ़ंक्शन को ऐसे कोड में बदल देता है जिसे बीच में रोका और फिर से शुरू किया जा सकता है (positional memoization) — यह Compose को पेड़ को पूरी तरह से पुनर्निर्माण किए बिना केवल बदले हुए भागों को पुनः आरंभ करने की अनुमति देता है।

kotlin
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

@Composable
fun UserProfile(name: String, avatarUrl: String) {
    Row(
        modifier = Modifier
            .fillMaxWidth()
            .padding(16.dp),
        verticalAlignment = Alignment.CenterVertically
    ) {
        AsyncImage(
            model = avatarUrl,
            contentDescription = "User avatar",
            modifier = Modifier.size(48.dp)
        )
        Spacer(modifier = Modifier.width(12.dp))
        Text(
            text = name,
            style = MaterialTheme.typography.titleMedium
        )
    }
}

UserProfile फ़ंक्शन name और avatarUrl को पैरामीटर के रूप में लेता है, एक अवतार और नाम के साथ एक पंक्ति बनाता है। Modifier.fillMaxWidth() घटक को पूरी चौड़ाई में फैलाता है, .padding(16.dp) पैडिंग जोड़ता है। MaterialTheme.typography.titleMedium सिस्टम Material 3 शैली का उपयोग करता है। जब name या avatarUrl पैरामीटर बदलते हैं, Compose UserProfile को पुनः शुरू करता है — नए मानों के साथ घटक का पुनर्निर्माण।

Jetpack Compose में State और Recomposition

State Compose में कोई भी मान है जिसके बदलने से निर्भर @Composable फ़ंक्शन का पुनर्संयोजन (पुनः आरंभ) होता है। मूल तरीका है mutableStateOf(), जो Compose की स्नैपशॉट प्रणाली के समर्थन के साथ MutableState<T> बनाता है। स्नैपशॉट परिवर्तन ट्रैकिंग तंत्र है: State में लिखने पर, Compose वर्तमान स्नैपशॉट को गंदा (dirty) चिह्नित करता है, और पुनर्संयोजन शेड्यूलर केवल उन Composable फ़ंक्शन को पुनः आरंभ करता है जो उस State को पढ़ रहे हैं। देखने योग्य संग्रहों के लिए mutableStateListOf() और mutableStateMapOf() का उपयोग करें। Compose Kotlin Flow के लिए collectAsState() और LiveData के लिए observeAsState() के माध्यम से Lifecycle-Aware घटकों से State का समर्थन करता है।

kotlin
@Composable
fun LikeButton() {
    var liked by remember { mutableStateOf(false) }
    var count by remember { mutableStateOf(42) }
    
    Button(
        onClick = {
            liked = !liked
            if (liked) count++ else count--
        },
        colors = ButtonDefaults.buttonColors(
            containerColor = if (liked) MaterialTheme.colorScheme.primary
                else MaterialTheme.colorScheme.surfaceVariant
        )
    ) {
        Text("♥ $count")
    }
}

कोड mutableStateOf() के माध्यम से संग्रहीत liked (Boolean) और count (Int) स्थिति के साथ एक "Like" बटन बनाता है। दबाने पर, liked उल्टा हो जाता है और काउंटर बढ़/घट जाता है — Compose स्वचालित रूप से LikeButton को पुनः शुरू करता है। by डेलीगेट State को सामान्य चर की तरह उपयोग करने की अनुमति देता है: liked = !liked बजाय liked.value = !liked.value। बटन का रंग प्राथमिक (पसंद किया गया) और surfaceVariant (पसंद नहीं किया गया) के बीच प्रतिक्रियाशील रूप से बदलता है।

remember: पुनर्संयोजन के बीच कैशिंग

remember — एक Compose फ़ंक्शन जो पुनर्संयोजनों के बीच मान को कैश करता है। remember के बिना, Composable फ़ंक्शन का प्रत्येक पुनः आरंभ एक नई स्थिति (mutableStateOf) बनाता है — यह एप्लिकेशन तर्क को तोड़ता है: स्क्रीन रोटेशन या पैरेंट State परिवर्तन पर, काउंटर रीसेट हो जाता है। remember एक कैलकुलेटर लैम्ब्डा लेता है और केवल पहली संरचना पर मान की गणना करता है; बाद की संरचनाओं पर कैश किया गया परिणाम लौटाता है। कैश रीसेट करने के लिए remember(key) का उपयोग करें — कुंजी निर्धारित करती है कि मान की पुनर्गणना कब करनी है। remember(key1, key2) किसी भी कुंजी के बदलने पर पुनर्गणना करता है। लंबे समय तक रहने वाली स्थितियों (स्क्रीन रोटेशन से बचने वाली) के लिए rememberSaveable का उपयोग करें — SavedStateHandle के माध्यम से Bundle में सहेजने के साथ remember का एनालॉग।

kotlin
@Composable
fun TimerScreen() {
    var seconds by rememberSaveable { mutableStateOf(0) }
    
    LaunchedEffect(Unit) {
        while (true) {
            delay(1000)
            seconds++
        }
    }
    
    Column(
        modifier = Modifier.fillMaxSize().padding(32.dp),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(
            text = "Elapsed: ${seconds}s",
            style = MaterialTheme.typography.displayMedium
        )
    }
}

rememberSaveable स्क्रीन रोटेशन (कॉन्फ़िगरेशन परिवर्तन) पर seconds को संरक्षित करता है। LaunchedEffect एक कोरूटीन शुरू करता है जो हर सेकंड seconds बढ़ाता है। TimerScreen के पुनर्संयोजन (हर सेकंड) पर rememberSaveable के कारण seconds रीसेट नहीं होता। सामान्य remember का उपयोग उस स्थिति के लिए करें जो कॉन्फ़िगरेशन परिवर्तनों से नहीं बचनी चाहिए (उदाहरण के लिए, एनिमेशन फ़्लैग)।

Modifier: Composable सेटिंग्स की श्रृंखला

Modifier — एक अपरिवर्तनीय कंटेनर ऑब्जेक्ट जो Composable घटकों के स्वरूप, व्यवहार और लेआउट को कॉन्फ़िगर करने के लिए Builder पैटर्न को लागू करता है। Modifier विधि का प्रत्येक कॉल (.padding(), .width(), .clickable(), .background()) जोड़े गए तत्व के साथ एक नया Modifier लौटाता है। मॉडिफ़ायर क्रम मायने रखता है: .padding(16.dp).clickable { } — पैडिंग क्लिक हैंडलर से पहले लागू होती है, clickable पैडिंग सहित पूरे क्षेत्र को ट्रैक करता है। .clickable { }.padding(16.dp) — पैडिंग से पहले का पूरा क्षेत्र क्लिक करने योग्य है, पैडिंग सामग्री को अंदर की ओर खिसका देती है। Modifier then(otherModifier) और पैरेंट सेटिंग्स तक पहुंचने के लिए compositionLocal के माध्यम से कस्टम कार्यान्वयन का समर्थन करता है।

kotlin
@Composable
fun CardExample() {
    Card(
        modifier = Modifier
            .fillMaxWidth()
            .padding(16.dp)
            .clickable { println("Card clicked") },
        elevation = CardDefaults.cardElevation(defaultElevation = 4.dp),
        colors = CardDefaults.cardColors(
            containerColor = MaterialTheme.colorScheme.surfaceVariant
        )
    ) {
        Column(modifier = Modifier.padding(16.dp)) {
            Text("Jetpack Compose", style = MaterialTheme.typography.titleLarge)
            Spacer(modifier = Modifier.height(8.dp))
            Text(
                "Android के लिए State और Modifier के साथ घोषणात्मक UI",
                style = MaterialTheme.typography.bodyMedium
            )
        }
    }
}

CardExample Modifier श्रृंखला प्रदर्शित करता है: fillMaxWidth + padding + clickable। Card अपनी खुद की elevation और colors सेटिंग्स के साथ एक Material3 घटक है। नेस्टेड Column में 16dp की आंतरिक पैडिंग है। Compose Material3 Android 12+ पर Dynamic Color (Material You) के लिए स्वचालित रूप से रंगों को अनुकूलित करता है। Card Compose में 30+ अंतर्निहित Material3 घटकों में से एक है।

State hoisting और Compose आर्किटेक्चर

State hoisting — स्थिति को Composable फ़ंक्शन से उसके कॉलर में ऊपर उठाने का पैटर्न, फ़ंक्शन को स्टेटलेस बनाता है। एक स्टेटलेस घटक State को स्वयं धारण किए बिना पैरामीटर के माध्यम से डेटा और कॉलबैक प्राप्त करता है। यह पुन: प्रयोज्यता और परीक्षण क्षमता में सुधार करता है: घटक को विभिन्न States के साथ बुलाया जा सकता है और preview में परीक्षण किया जा सकता है। Google आर्किटेक्चर की सिफारिश करता है: ViewModel + StateFlow (या MutableStateFlow) + Compose में collectAsState()। ViewModel स्थिति को स्क्रीन स्तर तक उठाता है, Compose इसे रेंडर करता है। साइड-इफ़ेक्ट (LaunchedEffect, DisposableEffect) एक-बार की घटनाओं को संभालते हैं।

घटकजिम्मेदारीप्रौद्योगिकी
ViewModelState भंडारण, व्यावसायिक तर्कStateFlow, MutableStateFlow
Screen Composableस्क्रीन संगठन, State hoistingcollectAsState(), Scaffold, LazyColumn
Stateless Componentबिना स्थिति के UI, शुद्ध प्रतिपादन@Composable पैरामीटर + lambdas
Side Effectएक-बार की क्रियाएं (स्नैकबार, नेविगेशन)LaunchedEffect, SnackbarHostState

अक्सर पूछे जाने वाले प्रश्न

Jetpack Compose XML लेआउट से कैसे अलग है?

XML लेआउट अनिवार्य है: LayoutInflater XML लोड करता है, findViewById Views ढूंढता है, डेवलपर मैन्युअल रूप से टेक्स्ट/सूचियां अपडेट करता है। Compose घोषणात्मक है: UI को Kotlin @Composable फ़ंक्शन द्वारा वर्णित किया जाता है, और फ्रेमवर्क State बदलने पर केवल बदले हुए भागों को स्वचालित रूप से दोबारा खींचता है। Compose UI कोड की मात्रा को 30–50% तक कम करता है और XML का उपयोग नहीं करता।

क्या Compose में नेविगेशन के लिए अलग लाइब्रेरी चाहिए?

हाँ, Google Navigation Compose प्रदान करता है — स्क्रीन के बीच घोषणात्मक नेविगेशन के लिए एक लाइब्रेरी। NavController रूट स्टैक प्रबंधित करता है, composable() स्क्रीन पंजीकृत करता है, navArgument पैरामीटर पास करता है। विकल्प: Voyager (community) और Decompose (Badoo)। Navigation Compose डीप लिंक और type-safe आर्गुमेंट समर्थन के साथ आधिकारिक मानक है।

Jetpack Compose में Modifier क्या है?

Modifier सजावट पैटर्न (padding, size, clickable, background, border, clip) का एक अपरिवर्तनीय कंटेनर है जो Composable घटकों पर लागू होता है। प्रत्येक कॉल जोड़े गए तत्व के साथ एक नया Modifier लौटाता है। क्रम मायने रखता है: .padding().clickable() क्लिक से पहले पैडिंग लागू करता है, .clickable().padding() — इसके विपरीत। Modifier Compose घटकों को अनुकूलित करने का प्राथमिक तरीका है।

क्या Compose Android के सभी संस्करणों पर काम करता है?

Jetpack Compose Compose Compiler और Compose BOM के माध्यम से Android API 21+ (Android 5.0 Lollipop) का समर्थन करता है। Material 3 (Dynamic Colors) Android 12+ पर उपलब्ध है; पुराने संस्करणों पर फ़ॉलबैक पैलेट का उपयोग होता है। नए प्रोजेक्ट्स के लिए, Google minSdk 24+ (Android 7.0) की सिफारिश करता है, जो Compose द्वारा पूरी तरह से कवर किया गया है।

Compose घटकों का परीक्षण कैसे करें?

Google Compose UI Test प्रदान करता है — JVM (डेस्कटॉप) और एमुलेटर पर परीक्षण के लिए एक लाइब्रेरी। मुख्य फ़ंक्शन: composeTestRule.setContent { } घटक रेंडर करने के लिए, onNodeWithText() तत्वों को खोजने के लिए, performClick()/performTextInput() क्रियाओं के लिए। Espresso परीक्षण ComposeTestRule के माध्यम से Compose के साथ संगत हैं, लेकिन Compose UI Test पसंदीदा और तेज़ तरीका है।

सारांश

  • Jetpack Compose — Kotlin @Composable फ़ंक्शन के साथ Android के लिए Google का घोषणात्मक UI फ्रेमवर्क (2021 से स्थिर)।
  • @Composable — एनोटेशन जो Kotlin फ़ंक्शन को UI घटक में बदलता है; Composable फ़ंक्शन ट्री View पदानुक्रम को बदल देता है।
  • State और mutableStateOf — स्नैपशॉट प्रणाली के माध्यम से Compose प्रतिक्रियाशीलता का आधार; पुनर्संयोजन केवल निर्भर फ़ंक्शन को प्रभावित करता है।
  • remember पुनर्संयोजनों के बीच मान कैश करता है; rememberSaveable कॉन्फ़िगरेशन परिवर्तनों पर State संरक्षित करता है।
  • Modifier — सेटिंग्स की श्रृंखला (padding, size, clickable, background) जो एक अपरिवर्तनीय कंटेनर बनाती है; मॉडिफ़ायर क्रम मायने रखता है।
  • State hoisting — स्टेटलेस घटकों के लिए स्थिति को ऊपर उठाने का पैटर्न; ViewModel + StateFlow + collectAsState() अनुशंसित आर्किटेक्चर है।
  • Material 3 Dynamic Colors (Android 12+) के साथ डिवाइस वॉलपेपर के स्वचालित अनुकूलन के साथ Compose की मानक थीम है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें