Kotlin را به یک برنامه موجود اضافه کنید

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

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

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

Kotlin را به یک پروژه موجود اضافه کنید

برای اضافه کردن Kotlin به پروژه خود، موارد زیر را انجام دهید:

  1. روی File > New کلیک کنید و یکی از قالب های مختلف اندروید مانند یک Fragment خالی جدید را انتخاب کنید، همانطور که در شکل 1 نشان داده شده است. اگر لیست قالب ها را در این منو نمی بینید، ابتدا پنجره Project را باز کرده و خود را انتخاب کنید. ماژول برنامه

    یک قطعه خالی جدید ایجاد کنید
    شکل 1. از بین الگوهای موجود، مانند قطعه یا فعالیت، انتخاب کنید.
  2. در جادوگری که ظاهر می شود، Kotlin را برای زبان مبدا انتخاب کنید. شکل 2 گفتگوی New Android Activity را برای زمانی که می خواهید یک فعالیت جدید ایجاد کنید نشان می دهد.

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

همچنین، می‌توانید روی File > New > Kotlin File/Class کلیک کنید تا یک فایل اصلی Kotlin ایجاد کنید. اگر این گزینه را نمی بینید، پنجره Project را باز کرده و دایرکتوری جاوا را انتخاب کنید. پنجره New Kotlin File/Class به شما امکان می دهد نام فایل را تعریف کنید و چندین انتخاب برای نوع فایل ارائه می دهد: File ، Class ، Interface ، Enum Class یا Object . انتخابی که انجام می‌دهید، داربست اصلی ایجاد شده برای شما در فایل جدید Kotlin را تعیین می‌کند. اگر کلاس را انتخاب کنید، Android Studio یک فایل منبع جدید Kotlin با نام داده شده و یک تعریف کلاس منطبق ایجاد می کند. اگر Interface را انتخاب کنید، یک رابط در فایل اعلان می شود و غیره.

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

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

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

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

هنگامی که روی OK کلیک کردید، 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 خود را از فایل های جاوا جدا کنید، می توانید فایل های Kotlin را در src/main/kotlin/ قرار دهید. اگر این کار را انجام دادید، باید این دایرکتوری را نیز مانند شکل زیر در پیکربندی sourceSets خود بگنجانید:

شیار

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

کاتلین

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

کد جاوا موجود را به کد کاتلین تبدیل کنید

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

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

تبدیل کد و پوچ پذیری

فرآیند تبدیل اندروید استودیو کد Kotlin از نظر عملکردی معادل تولید می کند که کامپایل و اجرا می شود. با این حال، این احتمال وجود دارد که شما نیاز به بهینه سازی های اضافی در کد تبدیل شده داشته باشید. به عنوان مثال، ممکن است بخواهید نحوه مدیریت کدهای تبدیل شده با انواع nullable را اصلاح کنید.

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

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

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

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

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