একটি বিদ্যমান অ্যাপে Kotlin যোগ করুন

অ্যান্ড্রয়েড স্টুডিও কোটলিনের জন্য সম্পূর্ণ সমর্থন প্রদান করে, যা আপনাকে আপনার বিদ্যমান প্রকল্পে কোটলিন ফাইল যোগ করতে এবং জাভা ভাষার কোডকে কোটলিনে রূপান্তর করতে সক্ষম করে। তারপরে আপনি স্বয়ংসম্পূর্ণ, লিন্ট চেকিং, রিফ্যাক্টরিং, ডিবাগিং এবং আরও অনেক কিছু সহ আপনার কোটলিন কোড সহ Android স্টুডিওর বিদ্যমান সমস্ত সরঞ্জামগুলি ব্যবহার করতে পারেন।

আপনি যদি একটি নতুন প্রকল্প শুরু করেন এবং কোটলিন ব্যবহার করতে চান তবে একটি প্রকল্প তৈরি করুন দেখুন।

নমুনার জন্য, আমাদের কোটলিন কোডের নমুনাগুলি দেখুন।

একটি বিদ্যমান প্রকল্পে Kotlin যোগ করুন

আপনার প্রকল্পে কোটলিন যোগ করতে, নিম্নলিখিতগুলি করুন:

  1. File > New এ ক্লিক করুন এবং বিভিন্ন অ্যান্ড্রয়েড টেমপ্লেটগুলির মধ্যে একটি বেছে নিন, যেমন একটি নতুন ফাঁকা ফ্র্যাগমেন্ট , যেমন চিত্র 1-এ দেখানো হয়েছে। আপনি যদি এই মেনুতে টেমপ্লেটগুলির তালিকা দেখতে না পান, তাহলে প্রথমে প্রজেক্ট উইন্ডো খুলুন এবং আপনার নির্বাচন করুন অ্যাপ মডিউল।

    একটি নতুন ফাঁকা টুকরা তৈরি করুন
    চিত্র 1. উপলব্ধ টেমপ্লেটগুলি থেকে চয়ন করুন, যেমন খণ্ড বা কার্যকলাপ।
  2. প্রদর্শিত উইজার্ডে, উৎস ভাষার জন্য Kotlin নির্বাচন করুন। আপনি যখন একটি নতুন কার্যকলাপ তৈরি করতে চান তখন চিত্র 2 নতুন Android কার্যকলাপ ডায়ালগ দেখায়৷

    ডায়ালগ যা আপনাকে আপনার উৎস ভাষার জন্য Kotlin বেছে নিতে দেয়
    চিত্র 2। একটি নতুন অ্যান্ড্রয়েড অ্যাক্টিভিটি ডায়ালগ যেখানে আপনি কোটলিনকে আপনার উৎস ভাষা হিসেবে বেছে নিতে পারেন।
  3. উইজার্ডের মাধ্যমে চালিয়ে যান।

বিকল্পভাবে, আপনি একটি মৌলিক Kotlin ফাইল তৈরি করতে File > New > Kotlin File/Class এ ক্লিক করতে পারেন। আপনি যদি এই বিকল্পটি দেখতে না পান তবে প্রকল্প উইন্ডোটি খুলুন এবং java ডিরেক্টরি নির্বাচন করুন। নতুন কোটলিন ফাইল/ক্লাস উইন্ডো আপনাকে ফাইলের নাম সংজ্ঞায়িত করতে দেয় এবং ফাইলের প্রকারের জন্য বিভিন্ন পছন্দ প্রদান করে: ফাইল , ক্লাস , ইন্টারফেস , এনাম ক্লাস , বা অবজেক্ট । আপনি যে পছন্দটি করেন তা নতুন Kotlin ফাইলে আপনার জন্য তৈরি মৌলিক ভারা নির্ধারণ করে। আপনি যদি ক্লাস বেছে নেন, তাহলে অ্যান্ড্রয়েড স্টুডিও প্রদত্ত নাম এবং একটি মিলিত ক্লাস সংজ্ঞা সহ একটি নতুন কোটলিন সোর্স ফাইল তৈরি করে। আপনি যদি ইন্টারফেস নির্বাচন করেন, একটি ইন্টারফেস ফাইলে ঘোষণা করা হয়, এবং তাই।

যদি আপনি এই প্রথমবার আপনার প্রোজেক্টে একটি নতুন কোটলিন ক্লাস বা ফাইল সরাসরি যুক্ত করেন (অ্যান্ড্রয়েড টেমপ্লেট ব্যবহার না করেন), তাহলে অ্যান্ড্রয়েড স্টুডিও একটি সতর্কতা প্রদর্শন করে যে কোটলিন প্রজেক্টে কনফিগার করা হয়নি, যেমন চিত্র 3-তে দেখানো হয়েছে। এর দ্বারা কোটলিন কনফিগার করুন সম্পাদকের উপরের ডানদিকের কোণায় অথবা নিচের-ডান কোণায় পপ আপ হওয়া ইভেন্ট লগ অ্যালার্টে কনফিগার করুন -এ ক্লিক করুন।

সতর্কীকরণ ডায়ালগ যা আপনাকে আপনার প্রকল্পের জন্য Kotlin কনফিগার করতে অনুরোধ করে
চিত্র 3. যখন আপনার প্রকল্পের জন্য Kotlin কনফিগার করা হয় না তখন Android Studio একটি সতর্কীকরণ ডায়ালগ প্রদর্শন করে।

প্রম্পট করা হলে Kotlin ফাইল ধারণকারী সমস্ত মডিউলের জন্য Kotlin কনফিগার করার বিকল্পটি চয়ন করুন, চিত্র 4 এ দেখানো হয়েছে:

Kotlin কোড আছে এমন সমস্ত মডিউলের জন্য Kotlin কনফিগার করতে বেছে নিন
চিত্র 4. Kotlin কোড ধারণকারী সমস্ত মডিউলের জন্য Kotlin কনফিগার করতে বেছে নিন।

একবার আপনি ঠিক আছে ক্লিক করলে, অ্যান্ড্রয়েড স্টুডিও আপনার প্রোজেক্ট ক্লাসপাথে Kotlin যোগ করে এবং Kotlin ফাইল ধারণ করে এমন প্রতিটি মডিউলে Kotlin Android প্লাগইন প্রয়োগ করে। আপনার build.gradle ফাইলগুলি নীচের উদাহরণগুলির মতো দেখতে হবে:

গ্রোভি

// Project build.gradle file.
buildscript {
    ext.kotlin_version = '1.4.10'
    ...
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

কোটলিন

// Project build.gradle.kts file.
buildscript {
    extra["kotlin_version"] = "1.4.10"
    ...
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
    }
}

গ্রোভি

// Inside each module using kotlin
plugins {
    ...
    id 'kotlin-android'
}

...

dependencies {
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

কোটলিন

// Inside each module using kotlin
plugins {
    ...
    kotlin("android")
}

...

val kotlin_version: String by rootProject.extra

dependencies {
    implementation("androidx.core:core-ktx:1.3.2")
    implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
}

উত্স সংস্থা

ডিফল্টরূপে, নতুন Kotlin ফাইলগুলি src/main/java/ এ সংরক্ষিত হয়, যা কোটলিন এবং জাভা উভয় ফাইলকে একই স্থানে দেখা সহজ করে তোলে। আপনি যদি আপনার জাভা ফাইলগুলি থেকে আপনার Kotlin ফাইলগুলিকে আলাদা করতে চান, তাহলে আপনি Kotlin ফাইলগুলিকে src/main/kotlin/ এর অধীনে রাখতে পারেন। আপনি যদি এটি করেন, তাহলে আপনাকে এই ডিরেক্টরিটি আপনার sourceSets কনফিগারেশনে অন্তর্ভুক্ত করতে হবে, যেমনটি নীচে দেখানো হয়েছে:

গ্রোভি

android {
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

কোটলিন

android {
    sourceSets {
        getByName("main") {
            java.srcDir("src/main/kotlin")
        }
    }
}

বিদ্যমান জাভা কোডকে কোটলিন কোডে রূপান্তর করুন

জাভা কোডকে কোটলিনে রূপান্তর করতে, অ্যান্ড্রয়েড স্টুডিওতে জাভা ফাইল খুলুন এবং কোড > জাভা ফাইলকে কোটলিন ফাইলে রূপান্তর করুন নির্বাচন করুন। বিকল্পভাবে, একটি নতুন কোটলিন ফাইল তৈরি করুন ( ফাইল > নতুন > কোটলিন ফাইল/ক্লাস ), এবং তারপর সেই ফাইলটিতে আপনার জাভা কোড পেস্ট করুন। অ্যান্ড্রয়েড স্টুডিও তারপর একটি প্রম্পট প্রদর্শন করে এবং আপনার কোডকে কোটলিনে রূপান্তর করার প্রস্তাব দেয়, যেমন চিত্র 5-এ দেখানো হয়েছে। রূপান্তর করতে হ্যাঁ ক্লিক করুন। আপনি ঐচ্ছিকভাবে পরের বার এই ডায়ালগটি দেখাবেন না চেক করতে পারেন, যা ভবিষ্যতের রূপান্তরগুলিকে স্বয়ংক্রিয় করে তোলে৷

Kotlin কোড আছে এমন সমস্ত মডিউলের জন্য Kotlin কনফিগার করতে বেছে নিন
চিত্র 5. অ্যান্ড্রয়েড স্টুডিও জাভা কোডকে কোটলিনে রূপান্তর করতে পারে।

কোড রূপান্তর এবং বাতিলযোগ্যতা

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

অ্যান্ড্রয়েডে, View অবজেক্ট এবং অন্যান্য উপাদানগুলির সাথে সংযুক্ত করা অংশ বা কার্যকলাপ উপযুক্ত জীবনচক্র অবস্থায় না পৌঁছানো পর্যন্ত দেরি করা সাধারণ। উদাহরণস্বরূপ, আপনার একটি টুকরোতে একটি বোতামের রেফারেন্স থাকতে পারে, যেমনটি নিম্নলিখিত স্নিপেটে প্রদর্শিত হয়েছে:

public class JavaFragment extends Fragment {

    // Null until onCreateView.
    private Button button;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_content, container,false);

        // Get a reference to the button in the view, only after the root view is inflated.
        button = root.findViewById(R.id.button);

        return root;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // Not null at this point of time when onViewCreated runs
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ...
            }
        });
    }
}

যদিও বোতাম ভেরিয়েবলটি বাতিলযোগ্য, সমস্ত ব্যবহারিক উদ্দেশ্যে এই উদাহরণে ব্যবহার করার সময় এটি কখনই শূন্য হওয়া উচিত নয়। যাইহোক, যেহেতু নির্মাণের সময় এর মান নির্ধারণ করা হয় না, তৈরি করা Kotlin কোড Button একটি বাতিলযোগ্য প্রকার হিসাবে বিবেচনা করে এবং একটি ক্লিক লিসেনার যোগ করার সময় বোতামটি খুলতে নন-নাল অ্যাসারশন অপারেটর ব্যবহার করে, যেমনটি নীচে দেখানো হয়েছে:

class JavaFragment : Fragment() {

    // Null until onCreateView.
    private var button: Button? = null

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?): View? {
        ...
        // Get a reference to the button in the view, only after the root view is inflated.
        button = root.findViewById(R.id.button)
        ...
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        // Not null at the point of time when onViewCreated fires 
        // but force unwrapped nonetheless
        button!!.setOnClickListener { }
    }
}

এই ক্ষেত্রে lateinit ব্যবহার করার চেয়ে এই রূপান্তরটি কম আদর্শ, কারণ আপনি যেখানে অ্যাক্সেস করা হয়েছে সেখানে একটি নন-নাল অ্যাসারশন বা নিরাপদ-কল অপারেটর দিয়ে বোতামের রেফারেন্স খুলতে বাধ্য হন।

অন্যান্য ক্ষেত্রে, যেখানে null হল একটি বৈধ পরিবর্তনশীল অ্যাসাইনমেন্ট যা আপনার অ্যাপ্লিকেশনের ব্যবহারের ক্ষেত্রের উপর ভিত্তি করে, একটি নিরাপদ-কল (?.) অপারেটর ব্যবহার করে একটি টার্মিনেটিং এলভিস অপারেটর (?:) অপারেটর ব্যবহার করে নালযোগ্য বস্তুটিকে নিরাপদে খুলতে আরও উপযুক্ত উপায় হতে পারে। অথবা একটি বোধগম্য নন-নাল ডিফল্ট মানকে জোর করে। রূপান্তর প্রক্রিয়া চলাকালীন এই সিদ্ধান্ত নেওয়ার জন্য Android স্টুডিওর কাছে পর্যাপ্ত তথ্য নেই। যদিও এটি নন-নাল অ্যাসারশনে ডিফল্ট হয়, আপনাকে অনুসরণ করা উচিত এবং প্রয়োজন অনুসারে রূপান্তরিত কোড সামঞ্জস্য করা উচিত।

অধিক তথ্য

আপনার প্রকল্পে কোটলিন এবং জাভা কোড উভয়ই ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, কোটলিন থেকে কলিং জাভা কোড দেখুন।

এন্টারপ্রাইজ পরিস্থিতিতে কোটলিন ব্যবহার সম্পর্কে আরও তথ্যের জন্য, বড় দলগুলির জন্য কোটলিন গ্রহণ করা দেখুন।

বিদ্যমান অ্যান্ড্রয়েড এপিআইগুলির জন্য ইডিওম্যাটিক কোটলিন র‍্যাপার সম্পর্কে তথ্যের জন্য, Android KTX দেখুন।