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ফাংশনের উপরে@LogExecutionAnnotation প্রয়োগ করা হয়েছে, যা যখন এই ফাংশনটি কল করা হবে তখন একটি বার্তা প্রদান করবে।
৩. 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ফাংশনের জন্যLogExecutionAnnotation এর তথ্য যাচাই করেছি এবং তার পরে সেই ফাংশনটি কল করেছি। 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আছে, যা@RequiresAdminAnnotation দ্বারা চিহ্নিত।performActionফাংশনটি আগে থেকে নির্ধারিত কার্যক্রমের জন্য একটি প্যারামিটার গ্রহণ করে এবং চেক করে যে ঐ কার্যক্রমটি প্রশাসক অধিকার প্রয়োজন কিনা। - যদি
role"Admin" না হয়, তাহলে এটি "Access denied" বার্তা দেখায়।
উপসংহার
কটলিনে Annotations ব্যবহার করে কোড মডিফাই করা একটি শক্তিশালী কৌশল। এটি আপনাকে কোডে মেটাডেটা যুক্ত করতে এবং runtime এ কোডের আচরণ পরিবর্তন করতে সক্ষম করে। Annotations ব্যবহারের মাধ্যমে আপনি আপনার কোডের কার্যকারিতা এবং নিয়ন্ত্রণ বৃদ্ধি করতে পারেন।
Read more