Built-in এবং Custom Annotations তৈরি
কটলিনে Annotations একটি গুরুত্বপূর্ণ ফিচার, যা কোডের বিভিন্ন অংশকে মেটাডেটা প্রদান করে। এটি কম্পাইলার, রানটাইম বা লাইব্রেরি দ্বারা বিশেষভাবে ব্যবহার করা হয়। Built-in annotations যেমন @Deprecated, @Override, এবং @JvmField ইতোমধ্যে কটলিনে বিদ্যমান। Custom annotations তৈরি করে আপনি আপনার প্রয়োজন অনুযায়ী নতুন মেটাডেটা তৈরি করতে পারেন। নিচে Built-in এবং Custom Annotations সম্পর্কে বিস্তারিত আলোচনা করা হলো।
১. Built-in Annotations
কটলিনে কিছু Built-in annotations রয়েছে, যা সাধারণত কিছু নির্দিষ্ট কার্যকারিতার জন্য ব্যবহৃত হয়।
i) @Deprecated
@Deprecated annotation একটি এলিমেন্ট বা ফাংশনকে চিহ্নিত করে যে এটি ব্যবহৃত হতে পারে কিন্তু এটি আর সুপারিশ করা হয় না এবং ভবিষ্যতে সরিয়ে ফেলা হতে পারে।
উদাহরণ:
@Deprecated("Use newFunction() instead", ReplaceWith("newFunction()"))
fun oldFunction() {
println("This is an old function.")
}
fun newFunction() {
println("This is the new function.")
}
fun main() {
oldFunction() // এটি একটি ডিপ্রিকেটেড ফাংশন কল করবে
}
ব্যাখ্যা:
- এখানে
oldFunctionডিপ্রিকেটেড, এবং এর পরিবর্তেnewFunctionব্যবহারের জন্য সুপারিশ করা হয়েছে।
ii) @JvmField
@JvmField annotation ব্যবহার করে আপনি কটলিন প্রোপার্টি প্রকাশ করতে পারেন যাতে এটি সরাসরি জাভা ফিল্ড হিসেবে ব্যবহার করা যায়। এটি কটলিনের getter/setter অতিক্রম করে।
উদাহরণ:
class Example {
@JvmField
var number: Int = 10
}
ব্যাখ্যা:
- এখানে
@JvmFieldব্যবহার করেnumberপ্রোপার্টিটি জাভা ফিল্ড হিসেবে প্রকাশ করা হয়েছে, ফলে জাভা থেকে সরাসরি এটি অ্যাক্সেস করা যাবে।
২. Custom Annotations
Custom annotations তৈরি করতে, আপনাকে annotation টাইপ ঘোষণা করতে হবে। কটলিনে, @Target, @Retention, এবং অন্যান্য মেটাডেটা ব্যবহার করে annotation কাস্টমাইজ করা যায়।
i) Custom Annotation তৈরি
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
annotation class MyCustomAnnotation(val info: String)
ব্যাখ্যা:
@Targetব্যবহার করে আপনি চিহ্নিত করতে পারেন যে এই annotation কোন ধরনের এলিমেন্টে ব্যবহার করা যাবে (যেমন ক্লাস, ফাংশন, প্রোপার্টি)।@Retentionব্যবহার করে চিহ্নিত করা হয় যে annotation কবে পর্যন্ত ধরে রাখা হবে (যেমন SOURCE, BINARY, RUNTIME)।
ii) Custom Annotation ব্যবহার
@MyCustomAnnotation("This is a custom annotation")
class MyClass {
@MyCustomAnnotation("Method annotation")
fun myFunction() {
println("Function with custom annotation.")
}
}
ব্যাখ্যা:
- এখানে
MyClassএবংmyFunctionএMyCustomAnnotationব্যবহার করা হয়েছে।
iii) Custom Annotation-এর তথ্য পড়া
Custom annotation ব্যবহার করে যে তথ্য পড়া যায়, তার উদাহরণ:
fun main() {
val annotations = MyClass::class.annotations
for (annotation in annotations) {
if (annotation is MyCustomAnnotation) {
println("Class annotation info: ${annotation.info}")
}
}
val method = MyClass::class.java.methods.first()
val methodAnnotations = method.annotations
for (annotation in methodAnnotations) {
if (annotation is MyCustomAnnotation) {
println("Method annotation info: ${annotation.info}")
}
}
}
ব্যাখ্যা:
- এখানে
MyClassএর উপর লাগানো annotation-এর তথ্য পড়া হয়েছে এবংmyFunctionএর annotation সম্পর্কে তথ্য বের করা হয়েছে।
উপসংহার
কটলিনে Built-in এবং Custom Annotations কোডে মেটাডেটা যোগ করতে ব্যবহৃত হয়, যা প্রোগ্রামিংয়ের বিভিন্ন প্রেক্ষাপটে কাজ করে। Built-in annotations যেমন @Deprecated এবং @JvmField ডেভেলপমেন্টে সাহায্য করে, যখন Custom annotations আপনার নিজস্ব মেটাডেটা তৈরি করতে এবং ব্যবহারে সহায়তা করে।
Read more