Kotlin डेवलपर का एक दिन: कोड, कॉफी और Coroutines

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

सुबह की शुरुआत कॉफी से नहीं, बल्कि Merge Request से होती है

\n\n

सुबह के 7:45 बज रहे हैं। फ़ोन वाइब्रेट कर रहा है — यह अलार्म नहीं है, बल्कि GitLab का नोटिफिकेशन है: आपका कल का Merge Request CI/CD पाइपलाइन पास कर गया है। जब तक केतली में पानी गर्म होता है, मैं लैपटॉप खोलता हूँ और हरी टिक देखता हूँ। दिन की पहली जीत। गुड मॉर्निंग, Kotlin।

\n\n

मेरा नाम अलेक्से है, मैं एक प्रोडक्ट कंपनी में Kotlin डेवलपर हूँ। पिछले तीन सालों से मैं Kotlin में Android ऐप्स और Ktor के साथ थोड़ा बैकएंड भी लिख रहा हूँ। अगर आपको लगता है कि प्रोग्रामर का काम सिर्फ "Hello World" लिखना है, तो आज मैं यह मिथक तोड़ दूँगा। मेरे असली कार्य दिवस में आपका स्वागत है।

\n\n

8:30 — Daily Standup: समन्वय और संदर्भ

\n\n

सबसे पहले होता है दैनिक स्टैंडअप। हम Zoom पर मिलते हैं, लेकिन बिना किसी "कल-आज-समस्या" के। हमारा तरीका संक्षिप्त है: क्या किया, क्या योजना है, कोई ब्लॉकर है या नहीं। आज मैं यूज़र्स के लिए Push नोटिफिकेशन फीचर पर काम कर रहा हूँ।

\n\n

— कल मैंने NotificationService का रिफैक्टरिंग पूरा किया, कोरूटीन पर रिवाइट किया। आज Firebase Cloud Messaging कनेक्ट कर रहा हूँ और Flow टेस्ट कर रहा हूँ। कोई ब्लॉकर नहीं है।

\n\n

वैसे, स्टैंडअप पर ही अक्सर आर्किटेक्चर के बेहतरीन आइडियाज जन्म लेते हैं। उदाहरण के लिए, पिछले हफ्ते एक सहकर्मी ने RxJava को Kotlin Flow से बदलने का सुझाव दिया — और हमने boilerplate कोड 40% कम कर दिया। अब यह कुछ इस तरह दिखता है:

\n\n
// पुराने RxJava के बजाय:\n// Observable.just(data).subscribeOn(Schedulers.io())\n\n// Kotlin Flow का उपयोग:\nfun observeNotifications(): Flow<Notification> = flow {\n    val service = NotificationService()\n    while (true) {\n        emit(service.getNextNotification())\n        delay(5000) // हर 5 सेकंड में पोलिंग\n    }\n}.flowOn(Dispatchers.IO)
\n\n

अंतर स्पष्ट है: पठनीयता, टाइप सेफ्टी, और कोई callback hell नहीं।

\n\n

9:15 — डेवलपमेंट: Kotlin में कोड लिखना

\n\n

स्टैंडअप के बाद मैं कोड में डूब जाता हूँ। आज का काम है इनकमिंग push नोटिफिकेशन को हैंडल करना। मैं Kotlin Coroutines और StateFlow का उपयोग कर रहा हूँ UI स्टेट मैनेज करने के लिए। मेरा ViewModel कुछ इस तरह है:

\n\n
class PushViewModel(\n    private val repository: NotificationRepository\n) : ViewModel() {\n\n    private val _uiState = MutableStateFlow<PushUiState>(PushUiState.Loading)\n    val uiState: StateFlow<PushUiState> = _uiState.asStateFlow()\n\n    fun loadNotifications() {\n        viewModelScope.launch {\n            repository.getNotifications()\n                .catch { e ->\n                    _uiState.value = PushUiState.Error(e.message ?: "Unknown error")\n                }\n                .collect { notifications ->\n                    _uiState.value = PushUiState.Success(notifications)\n                }\n        }\n    }\n}\n\nsealed class PushUiState {\n    object Loading : PushUiState()\n    data class Success(val data: List<Notification>) : PushUiState()\n    data class Error(val message: String) : PushUiState()\n}
\n\n

ध्यान दें: मैं UI स्टेट के लिए sealed class का उपयोग कर रहा हूँ। यह आधुनिक Android डेवलपमेंट में Kotlin की मानक प्रथा है। कोई if-else चेन नहीं — सिर्फ शुद्ध टाइपिंग।

\n\n

वैसे, अगर आप Kotlin में नए हैं, तो Scope functions पर ध्यान दें: let, apply, also। ये कोड को और संक्षिप्त बनाते हैं। उदाहरण के लिए:

\n\n
// Scope functions के बिना\nval user = User()\nuser.name = "Alex"\nuser.age = 30\nsaveUser(user)\n\n// apply के साथ\nval user = User().apply {\n    name = "Alex"\n    age = 30\n}\nsaveUser(user)
\n\n

11:00 — Code Review: सहकर्मियों से सीखना

\n\n

दोपहर के भोजन के बाद (हाँ, मैं 11 बजे खाना खाता हूँ — रिमोट काम की आदत) मैं एक सहकर्मी का Merge Request खोलता हूँ। वह ऑथेंटिकेशन मॉड्यूल को Kotlin Multiplatform पर रिवाइट कर रहा है। कोड पढ़ते हुए मुझे एक दिलचस्प बात दिखती है:

\n\n
// पहले था (                

ब्लॉग

पुस्तक अनुशंसाएँ