Annotations ব্যবহার করে কোড মডিফাই করা

Kotlin এর Annotations এবং Reflection - কটলিন (Kotlin) - Mobile App Development

352

Annotations ব্যবহার করে কোড মডিফাই করা

কটলিনে Annotations ব্যবহারের মাধ্যমে আপনি আপনার কোডে মেটাডেটা যুক্ত করতে পারেন এবং এই তথ্যের ভিত্তিতে আপনার কোডের আচরণ পরিবর্তন করতে পারেন। এই পদ্ধতিটি বিশেষ করে ডেভেলপারদের জন্য সাহায্যকারী যন্ত্র হিসেবে কাজ করে, যা বিভিন্ন কাজ সম্পন্ন করতে এবং সঠিক কাজগুলি পরিচালনা করতে সহায়তা করে। নিচে Annotations ব্যবহার করে কোড মডিফাই করার প্রক্রিয়া এবং উদাহরণ দেওয়া হলো।


১. Annotation তৈরি করা

Annotations তৈরি করতে, আপনাকে annotation class কিওয়ার্ড ব্যবহার করতে হবে। এখানে একটি কাস্টম Annotation উদাহরণ দেওয়া হলো।

i) Annotation Definition

@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
annotation class LogExecution(val message: String)

ব্যাখ্যা:

  • এখানে LogExecution নামে একটি Annotation তৈরি করা হয়েছে যা FUNCTION টার্গেটের জন্য এবং runtime এ উপলব্ধ থাকবে।

২. Annotation প্রয়োগ করা

এখন আমরা আমাদের Annotation টি একটি ফাংশনে প্রয়োগ করব।

ii) Annotation Application

class Calculator {
    @LogExecution("Executing addition")
    fun add(a: Int, b: Int): Int {
        return a + b
    }
}

ব্যাখ্যা:

  • এখানে add ফাংশনের উপরে @LogExecution Annotation প্রয়োগ করা হয়েছে, যা যখন এই ফাংশনটি কল করা হবে তখন একটি বার্তা প্রদান করবে।

৩. Annotation Processing

Annotations ব্যবহারের পরে, আপনাকে runtime এ তাদের তথ্য প্রক্রিয়া করতে হবে। কটলিনে Reflection API ব্যবহার করে আপনি Annotation থেকে তথ্য সংগ্রহ করতে পারেন।

iii) Annotation Processing Example

import kotlin.reflect.full.*

fun main() {
    val calculator = Calculator()
    val function = calculator::class.members.find { it.name == "add" }

    // Check for the LogExecution annotation
    function?.annotations?.forEach { annotation ->
        if (annotation is LogExecution) {
            println("Annotation message: ${annotation.message}")
        }
    }

    // Call the add function
    val result = calculator.add(5, 3)
    println("Result of addition: $result") // আউটপুট: Result of addition: 8
}

ব্যাখ্যা:

  • এখানে আমরা Calculator ক্লাসের add ফাংশনের জন্য LogExecution Annotation এর তথ্য যাচাই করেছি এবং তার পরে সেই ফাংশনটি কল করেছি। Annotation থেকে একটি বার্তা প্রিন্ট করা হয়েছে।

৪. Annotations দ্বারা কোডের আচরণ পরিবর্তন করা

Annotations ব্যবহার করে কোডের আচরণ পরিবর্তন করার জন্য, আপনি ডাইনামিকভাবে ফাংশনগুলির কার্যকারিতা পরিবর্তন করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Annotation এর ভিত্তিতে একটি ফাংশনের কার্যকারিতা পরিবর্তন করা হচ্ছে।

iv) Dynamic Behavior Change Example

@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
annotation class RequiresAdmin

class User(val role: String) {
    @RequiresAdmin
    fun adminFunction() {
        println("Admin function executed.")
    }

    fun performAction(action: () -> Unit) {
        // Check if the action requires admin rights
        val requiresAdmin = action::class.annotations.any { it is RequiresAdmin }
        
        if (requiresAdmin && role != "Admin") {
            println("Access denied. Admin rights required.")
        } else {
            action()
        }
    }
}

fun main() {
    val user = User("User")

    // Trying to call the admin function
    user.performAction { user.adminFunction() } // আউটপুট: Access denied. Admin rights required.
    
    // Changing user role to Admin
    val adminUser = User("Admin")
    adminUser.performAction { adminUser.adminFunction() } // আউটপুট: Admin function executed.
}

ব্যাখ্যা:

  • এখানে User ক্লাসে একটি adminFunction আছে, যা @RequiresAdmin Annotation দ্বারা চিহ্নিত। performAction ফাংশনটি আগে থেকে নির্ধারিত কার্যক্রমের জন্য একটি প্যারামিটার গ্রহণ করে এবং চেক করে যে ঐ কার্যক্রমটি প্রশাসক অধিকার প্রয়োজন কিনা।
  • যদি role "Admin" না হয়, তাহলে এটি "Access denied" বার্তা দেখায়।

উপসংহার

কটলিনে Annotations ব্যবহার করে কোড মডিফাই করা একটি শক্তিশালী কৌশল। এটি আপনাকে কোডে মেটাডেটা যুক্ত করতে এবং runtime এ কোডের আচরণ পরিবর্তন করতে সক্ষম করে। Annotations ব্যবহারের মাধ্যমে আপনি আপনার কোডের কার্যকারিতা এবং নিয়ন্ত্রণ বৃদ্ধি করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...