কম্পিউটার টিউটোরিয়াল

জাভার static মেথডের কোটলিন সমতুল্য

জাভায় Static উদাহরণ

জাভায়, দক্ষ মেমরি ম্যানেজমেন্টের জন্য "static" কীওয়ার্ড ব্যবহার করা হয়। একবার কোনো ভেরিয়েবল বা মেথড static হিসেবে ঘোষণা করলে, JVM এই ভেরিয়েবলগুলোর জন্য মেমরি শুধু একবার অ্যালোকেট করে। সাধারণত static ভেরিয়েবল ব্যবহার করা হয় একটি class-এর সাধারণ বৈশিষ্ট্য ঘোষণা করতে, উদাহরণস্বরূপ, "সংস্থার নাম"। নিচের উদাহরণে, আমরা দেখব কিভাবে static কীওয়ার্ড ব্যবহার করা হয়।

উদাহরণ: জাভায় Static ব্যবহার

public class Test {
    static int myStaticVariable = 10;

    // static method
    static void staticMethod() {
        System.out.println("www.tutorialspoint.com");
    }

    public static void main(String[] args) {
        // ক্লাস Test-এর কোনো অবজেক্ট তৈরি না করেই static মেথড এবং ভেরিয়েবল অ্যাক্সেস করা
        staticMethod();
        System.out.println("Static ভেরিয়েবল অ্যাক্সেস করছি - " + myStaticVariable);
    }
}

আউটপুট

www.tutorialspoint.com
Accessing Static variable-10

কোটলিনে জাভার Static মেথডের সমতুল্য

কোটলিনে static কীওয়ার্ড নেই। এই নিবন্ধে, আমরা শিখব কিভাবে কোটলিন লাইব্রেরির ভিন্ন কীওয়ার্ড ব্যবহার করে একই মেমরি ম্যানেজমেন্ট অর্জন করা যায়। উদ্দেশ্য হল এমন একটি কন্ডিশন বাস্তবায়ন যেখানে মেমরি শুধু একবার তৈরি হবে এবং এর মান অ্যাপ্লিকেশনের অন্যান্য অংশ থেকে পরিবর্তন করা যাবে না।

কোটলিনে static অর্জনের দুটি উপায় রয়েছে:

  • Companion object ব্যবহার করে

  • Object class এবং @JvmStatic এনোটেশন ব্যবহার করে

১. Companion Object ব্যবহার

Object-এ companion যোগ করলে কোটলিনে static ফাংশনালিটি অর্জন করতে সাহায্য করে। এটি ক্লাস সংরক্ষিত ফাইলে একই ফাইলে অবজেক্ট সংরক্ষণ করে, তাই এটি ক্লাসের ভেতরের সব প্রাইভেট মেথড এবং ভেরিয়েবল অ্যাক্সেস করতে পারে। এটি ক্লাস আরম্ভকরণের সাথে সাথে আরম্ভ হয়।

উদাহরণ

fun main(args: Array<String>) {
    // ক্লাস অবজেক্ট তৈরি না করেই ক্লাস ভেরিয়েবল এবং মেথড অ্যাক্সেস করা
    println("Hello!\\n" + "এটি ক্লাস ভেরিয়েবল অ্যাক্সেস করার উদাহরণ অবজেক্ট ছাড়া।" + MyClass.staticField + "\\n")
    println("Hello!\\n" + "এটি ক্লাস মেথড অ্যাক্সেস করার উদাহরণ অবজেক্ট ছাড়া।" + MyClass.getStaticFunction() + "\\n")
}

class MyClass {
    companion object {
        val staticField = "এটি একটি Static Variable।"
        fun getStaticFunction(): String {
            return "এটি একটি static Method।"
        }
    }
}

আউটপুট

Hello!
এটি ক্লাস ভেরিয়েবল অ্যাক্সেস করার উদাহরণ অবজেক্ট ছাড়া। This is a Static Variable.
Hello!
এটি ক্লাস মেথড অ্যাক্সেস করার উদাহরণ অবজেক্ট ছাড়া। This is a static Method.

এই স্যাম্পল কোডে, আপনি যদি যেকোনো static ভেরিয়েবলের মান পরিবর্তন করার চেষ্টা করেন, তবে কোটলিন কম্পাইলার ত্রুটি ফেলবে।

উদাহরণ: Static ভেরিয়েবল পরিবর্তন করার চেষ্টা

fun main(args: Array) {
    // Static ভেরিয়েবল পরিবর্তন করার চেষ্টা
    MyClass.staticField = "Hello Students"
    println("Hello!\\n" + "এটি ক্লাস ভেরিয়েবল অ্যাক্সেস করার উদাহরণ অবজেক্ট ছাড়া - " + MyClass.staticField + "\\n")
}

class MyClass {
    companion object {
        val staticField = "This is an Static Variable"
        fun getStaticFunction(): String {
            return "This is a static Method"
        }
    }
}

আউটপুট

$kotlinc -nowarn main.kt -include-runtime -d main.jar
main.kt:5:5: error: val cannot be reassigned
MyClass.staticField="Hello Students";
^

২. Object Class এবং @JvmStatic Annotation ব্যবহার

কোটলিন ডকুমেন্টেশন অনুযায়ী, একবার @JvmStatic এনোটেশন যেকোনো ভেরিয়েবল বা মেথডে প্রয়োগ করলে, সেটি সেই ক্লাসের static ফাংশনালিটি হিসেবে কাজ করবে।

উদাহরণ

fun main(args: Array) {
    // ক্লাস অবজেক্ট তৈরি না করেই ক্লাস ভেরিয়েবল এবং মেথড অ্যাক্সেস করা
    println("Hello!\\n" + "এটি ক্লাস ভেরিয়েবল অ্যাক্সেস করার উদাহরণ অবজেক্ট ছাড়া।" + MyClass.staticField + "\\n")
    println("Hello!\\n" + "এটি ক্লাস মেথড অ্যাক্সেস করার উদাহরণ অবজেক্ট ছাড়া।" + MyClass.getStaticFunction() + "\\n")
}

object MyClass {
    @JvmStatic
    val staticField = "This is a Static Variable."
    @JvmStatic
    fun getStaticFunction(): String {
        return "This is a Static Method."
    }
}

আউটপুট

Hello!
এটি ক্লাস ভেরিয়েবল অ্যাক্সেস করার উদাহরণ অবজেক্ট ছাড়া। This is a Static Variable.
Hello!
এটি ক্লাস মেথড অ্যাক্সেস করার উদাহরণ অবজেক্ট ছাড়া। This is a Static Method.
  1. জাভাতে JSeparator ক্লাসের গুরুত্ব কী?

  2. জাভাতে JViewport ক্লাসের গুরুত্ব কী?

  3. জাভাতে Container ক্লাসের গুরুত্ব কী?

  4. জাভাতে CardLayout ক্লাসের গুরুত্ব কী?