افزودن Kotlin به برنامه موجود

‫Android Studio پشتیبانی کامل از Kotlin ارائه می‌دهد و به شما امکان می‌دهد فایل‌های Kotlin را به پروژه موجودتان اضافه کنید و کد زبان Java را به Kotlin تبدیل کنید. سپس می‌توانید از همه ابزارهای موجود Android Studio با کد Kotlin خود استفاده کنید، ازجمله تکمیل خودکار، بررسی lint، بازسازی، اشکال‌زدایی، و غیره.

اگر پروژه جدیدی را شروع می‌کنید و می‌خواهید از Kotlin استفاده کنید، به ایجاد پروژه مراجعه کنید.

برای نمونه‌ها، نمونه‌های کد Kotlin ما را بررسی کنید.

افزودن Kotlin به پروژه موجود

برای افزودن Kotlin به پروژه، مراحل زیر را انجام دهید:

  1. روی File (فایل) > New (جدید) کلیک کنید و یکی از الگوهای مختلف Android را انتخاب کنید، برای مثال Fragment (تکه) خالی جدید، همان‌طور که در شکل ۱ نشان داده شده است. اگر فهرست الگوها را در این منو نمی‌بینید، ابتدا پنجره پروژه را باز کنید و واحد برنامه خود را انتخاب کنید.

    ایجاد یک تکه‌کد خالی جدید
    شکل ۱. از الگوهای دردسترس، مثل fragment یا activity انتخاب کنید.
  2. در دستیاری که ظاهر می‌شود، Kotlin را برای زبان منبع انتخاب کنید. شکل ۲ گفتگوی فعالیت جدید Android را برای زمانی که می‌خواهید فعالیت جدیدی ایجاد کنید نشان می‌دهد.

    چارگوشی که به شما امکان می‌دهد Kotlin را برای زبان مبدأ انتخاب کنید
    شکل ۲. کادر گفتگوی فعالیت جدید Android که در آن می‌توانید Kotlin را به‌عنوان زبان منبع انتخاب کنید.
  3. درطول دستیار ادامه دهید.

یا می‌توانید روی فایل > جدید > فایل/کلاس Kotlin کلیک کنید تا یک فایل Kotlin پایه ایجاد کنید. اگر این گزینه را نمی‌بینید، پنجره پروژه را باز کنید و دایرکتوری java را انتخاب کنید. پنجره فایل/کلاس جدید Kotlin به شما امکان می‌دهد نام فایل را تعریف کنید و چندین گزینه برای نوع فایل ارائه می‌دهد: فایل، کلاس، واسط، کلاس شمارشی، یا شیء. انتخاب شما تعیین می‌کند که داربست پایه در فایل جدید Kotlin برایتان ایجاد شود. اگر کلاس را انتخاب کنید، «استودیو Android» فایل منبع Kotlin جدیدی با نام داده‌شده و تعریف کلاس منطبق ایجاد می‌کند. اگر واسط را انتخاب کنید، واسطی در فایل تعریف می‌شود، و غیره.

اگر این اولین‌بار است که کلاس یا فایل Kotlin جدیدی را مستقیماً (بدون استفاده از الگوهای Android) به پروژه خود اضافه می‌کنید، Android Studio هشداری مبنی بر پیکربندی نشدن Kotlin در پروژه نمایش می‌دهد، همان‌طور که در شکل ۳ نشان داده شده است. با کلیک کردن روی پیکربندی در گوشه بالا سمت چپ ویرایشگر یا در هشدار گزارش رویداد که در گوشه پایین سمت چپ ظاهر می‌شود، Kotlin را پیکربندی کنید.

کادر گفتگوی هشداری که از شما می‌خواهد Kotlin را برای
      پروژه‌تان پیکربندی کنید
شکل ۳. وقتی Kotlin برای پروژه شما پیکربندی نشده باشد، Android Studio گفتگوی هشداری را نمایش می‌دهد.

وقتی از شما خواسته شد، گزینه پیکربندی Kotlin برای همه واحدهای دارای فایل‌های Kotlin را انتخاب کنید، همان‌طور که در شکل ۴ نشان داده شده است:

انتخاب کنید که Kotlin را برای همه واحدهایی که حاوی کد Kotlin هستند پیکربندی کنید
شکل ۴. انتخاب کنید که Kotlin برای همه واحدهایی که کد Kotlin دارند پیکربندی شود.

پس‌از کلیک کردن روی تأیید، Android Studio زبان Kotlin را به مسیر کلاس پروژه شما اضافه می‌کند و افزایه Kotlin Android را روی هر ماژولی که حاوی فایل‌های Kotlin است اعمال می‌کند. فایل‌های 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 و Java را در یک مکان آسان می‌کند. اگر ترجیح می‌دهید فایل‌های Kotlin را از فایل‌های Java جدا کنید، می‌توانید فایل‌های Kotlin را در src/main/kotlin/ قرار دهید. اگر این کار را انجام دهید، باید این دایرکتوری را نیز در پیکربندی sourceSets خود بگنجانید، همان‌طور که در زیر نشان داده شده است:

شیک

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

کاتلین

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

تبدیل کد جاوا موجود به کد Kotlin

برای تبدیل کد جاوا به Kotlin، فایل جاوا را در «استودیو Android» باز کنید و کد > تبدیل فایل جاوا به فایل Kotlin را انتخاب کنید. یا فایل Kotlin جدیدی (File > New > Kotlin File/Class) ایجاد کنید و سپس کد جاوا را در آن فایل جای‌گذاری کنید. سپس Android Studio پیام‌واره‌ای نمایش می‌دهد و پیشنهاد می‌کند کدتان را به Kotlin تبدیل کنید، همان‌طور که در شکل ۵ نشان داده شده است. برای تبدیل کردن، روی بله کلیک کنید. می‌توانید به‌صورت اختیاری این کادر گفتگو دفعه بعد نشان داده نشود را علامت بزنید، که باعث می‌شود تبدیل‌های آینده به‌صورت خودکار انجام شود.

انتخاب کنید که Kotlin را برای همه واحدهایی که حاوی کد Kotlin هستند پیکربندی کنید
شکل ۵. ‫Android Studio می‌تواند کد جاوا را به Kotlin تبدیل کند.

تبدیل کد و قابلیت تهی بودن

فرایند تبدیل Android Studio کد Kotlin معادل عملکردی تولید می‌کند که کامپایل و اجرا می‌شود. بااین‌حال، احتمالاً باید بهینه‌سازی‌های بیشتری روی کد تبدیل‌شده انجام دهید. برای مثال، ممکن است بخواهید نحوه مدیریت انواع تهی توسط کد تبدیل‌شده را اصلاح کنید.

در Android، معمولاً مقداردهی اولیه اشیای 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 یک تخصیص متغیر معتبر براساس مورد استفاده برنامه شما است، استفاده از عملگر فراخوانی ایمن (?.) با عملگر elvis خاتمه‌دهنده (?:) ممکن است روش مناسب‌تری برای باز کردن ایمن شیء تهی‌پذیر یا تبدیل آن به مقدار پیش‌فرض غیرتهی معقول باشد. ‫Android Studio اطلاعات کافی برای انجام این تعیین درطول فرایند تبدیل ندارد. اگرچه به‌طور پیش‌فرض به ادعای غیرتهی تبدیل می‌شود، باید پیگیری کنید و کد تبدیل‌شده را درصورت نیاز اصلاح کنید.

اطلاعات بیشتر

برای کسب اطلاعات بیشتر درباره استفاده از کد Kotlin و Java در پروژه‌تان، به فراخوانی کد Java از Kotlin مراجعه کنید.

برای کسب اطلاعات بیشتر درباره استفاده از Kotlin در سناریوهای سازمانی، به استفاده از Kotlin برای تیم‌های بزرگ مراجعه کنید.

برای کسب اطلاعات درباره داده‌پوش‌های اصطلاحی Kotlin برای APIهای موجود Android، به Android KTX مراجعه کنید.