Kotlin Academy · पाठ

व्यावहारिक रिफ़्लेक्शन

एनोटेशन को गतिशील रूप से पढ़ें

पाठ 4, कुल 4 में से13 चरण

व्यावहारिक रिफ़्लेक्शन, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

एनोटेशन और रिफ्लेक्शन का मेल

RUNTIME रिटेंशन वाला एनोटेशन रनटाइम पर रिफ्लेक्शन के माध्यम से खोजा जा सकता है। यह संयोजन क्रमांकन, मान्यकरण और निर्भरता इंजेक्शन को सक्षम बनाता है।

इस पाठ में हम अपने एनोटेशन को गतिशील रूप से पढ़ेंगे।

क्लास एनोटेशन पढ़ना

हर KClass एक annotations सूची उपलब्ध कराता है। किसी विशेष प्रकार के एनोटेशन को खोजने के लिए हम इसकी जाँच कर सकते हैं।

@Retention(AnnotationRetention.RUNTIME)
annotation class Entity(val table: String)

@Entity("users")
class User

fun main() {
    val ann = User::class.annotations
        .filterIsInstance<Entity>()
        .first()
    println(ann.table)
}

findAnnotation सहायक

findAnnotation एक्सटेंशन मैन्युअल रूप से फ़िल्टर करने से अधिक साफ़ है। यह एनोटेशन या null लौटाता है।

import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Entity(val table: String)

@Entity("orders")
class Order

fun main() {
    val ann = Order::class.findAnnotation<Entity>()
    println(ann?.table)
}

प्रॉपर्टी पर एनोटेशन

प्रॉपर्टीज़ के अपने एनोटेशन होते हैं। memberProperties पर इटरेट करें और प्रत्येक प्रॉपर्टी के annotations का निरीक्षण करें।

import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Column(val name: String)

class Product(@Column("product_id") val id: Int, val title: String)

fun main() {
    Product::class.memberProperties.forEach { prop ->
        val col = prop.findAnnotation<Column>()
        if (col != null) println(prop.name + " -> " + col.name)
    }
}

मिनी क्रमांकक बनाना

आउटपुट बनाने के लिए प्रॉपर्टी पढ़ने को एनोटेशन के साथ मिलाएँ। यहाँ हम प्रत्येक प्रॉपर्टी को कुंजी=मान स्ट्रिंग में बदलते हैं और उपलब्ध होने पर कॉलम नाम का उपयोग करते हैं।

import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Column(val name: String)

class Item(@Column("item_id") val id: Int, val name: String)

fun main() {
    val item = Item(7, "Book")
    val parts = Item::class.memberProperties.map { p ->
        val key = p.findAnnotation<Column>()?.name ?: p.name
        key + "=" + p.getter.call(item)
    }
    println(parts.joinToString(", "))
}

मार्कर से छोड़ना

मार्कर एनोटेशन उन प्रॉपर्टीज़ को चिह्नित कर सकता है जिन्हें अनदेखा करना है। हम hasAnnotation से उसकी उपस्थिति जाँचते हैं।

import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.hasAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Transient2

class Account(val id: Int, @Transient2 val secret: String)

fun main() {
    Account::class.memberProperties
        .filterNot { it.hasAnnotation<Transient2>() }
        .forEach { println(it.name) }
}

एनोटेशन आर्ग्युमेंट पढ़ना

एनोटेशन इंस्टेंस प्राप्त हो जाने पर उसके पैरामीटर साधारण प्रॉपर्टीज़ होते हैं। उन्हें किसी भी फ़ील्ड की तरह पढ़ें।

import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Validated(val min: Int, val max: Int)

@Validated(min = 1, max = 100)
class Quantity

fun main() {
    val v = Quantity::class.findAnnotation<Validated>()!!
    println("range " + v.min + ".." + v.max)
}

फ़ंक्शन पर एनोटेशन

फ़ंक्शन पर भी एनोटेशन लगाए और उनका निरीक्षण किए जा सकते हैं। फ़्रेमवर्क इसका उपयोग हैंडलर खोजने के लिए करते हैं, जैसे परीक्षण रनर परीक्षण फ़ंक्शन ढूँढ़ते हैं।

import kotlin.reflect.full.memberFunctions
import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Route(val path: String)

class Api {
    @Route("/home")
    fun home() = "home page"
}

fun main() {
    Api::class.memberFunctions.forEach { f ->
        f.findAnnotation<Route>()?.let { println(f.name + " @ " + it.path) }
    }
}

व्यवहार चलाना

रूट एनोटेशन पढ़ें और वास्तव में कोई कॉल भेजें। रूटिंग फ़्रेमवर्क इसी मूल विचार पर काम करते हैं।

import kotlin.reflect.full.memberFunctions
import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Route(val path: String)

class Api {
    @Route("/ping")
    fun ping() = "pong"
}

fun main() {
    val api = Api()
    val target = "/ping"
    Api::class.memberFunctions.forEach { f ->
        if (f.findAnnotation<Route>()?.path == target) {
            println(f.call(api))
        }
    }
}

वास्तविक दुनिया में उपयोग

एनोटेशन-आधारित रिफ्लेक्शन कई लाइब्रेरी का आधार है:

  • जेएसओएन क्रमांकन में फ़ील्ड को कुंजियों से जोड़ना
  • मान्यकरण द्वारा प्रतिबंध लागू करना
  • रूटिंग में पथों को हैंडलर से मिलाना
  • निर्भरता इंजेक्शन द्वारा घटकों को जोड़ना

इसे सीमित रखें

रिफ्लेक्शन को ऐसी आरंभिक व्यवस्था और फ़्रेमवर्क कोड तक सीमित रखना सबसे अच्छा है जो एक बार या कभी-कभार चलता है। जब संभव हो, परिणामों को कैश करें। हर अनुरोध वाले बार-बार चलने वाले पथों के लिए संकलन-समय की प्रोसेसिंग को प्राथमिकता दें।

त्वरित जाँच

व्यावहारिक रिफ्लेक्शन से संबंधित अपनी समझ जाँचिए।

पुनरावलोकन

आपने एनोटेशन और रिफ्लेक्शन को मिलाकर यह करना सीखा:

  • क्लास, प्रॉपर्टी और फ़ंक्शन के एनोटेशन ढूँढ़ना
  • रनटाइम पर एनोटेशन आर्ग्युमेंट पढ़ना
  • मिनी क्रमांकक और रूट डिस्पैचर बनाना
  • मार्कर एनोटेशन वाले फ़ील्ड छोड़ना

वास्तविक फ़्रेमवर्क इसी तरह बनाए जाते हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

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

क्या “व्यावहारिक रिफ़्लेक्शन” पाठ निःशुल्क है?

हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “व्यावहारिक रिफ़्लेक्शन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“व्यावहारिक रिफ़्लेक्शन” में मैं क्या सीखूँगा?

एनोटेशन को गतिशील रूप से पढ़ें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“व्यावहारिक रिफ़्लेक्शन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. एनोटेशन का उपयोग
  2. एनोटेशन परिभाषित करना
  3. रिफ़्लेक्शन की मूल बातें
  4. व्यावहारिक रिफ़्लेक्शन
← Kotlin Academy पर वापस जाएँ