JavaRush /وبلاگ جاوا /Random-FA /آیا تفاوتی بین کاتلین و جاوا وجود دارد؟
Paul Soia
مرحله
Kiyv

آیا تفاوتی بین کاتلین و جاوا وجود دارد؟

در گروه منتشر شد
سلام به همه. من می خواهم چند نکته اساسی در مورد زبان کاتلین به شما بگویم که برای مبتدیان مفید خواهد بود. اتفاقاً اکنون ورود به توسعه اندروید تنها با یک زبان دشوار خواهد بود - اکثر پروژه های جدید شروع به نوشتن در Kotlin می کنند ، بیشتر پروژه های آماده در جاوا نوشته می شوند. آیا تفاوتی بین کاتلین و جاوا وجود دارد؟  - 1در حال حاضر 4 پروژه در حال کار دارم: دو پروژه در کاتلین و دو پروژه در جاوا (یکی اصلی بزرگ و سه پروژه کوچک برای استفاده داخلی). وقتی شرکت تصمیم گرفت پروژه های جدیدی در کاتلین بنویسد، این تصمیم برای من عجیب به نظر می رسید. چرا زبان های مختلف را مخلوط می کنیم؟ بگذارید شخص دیگری در کاتلین بنویسد، چرا به آن نیاز داریم؟ اما هیچ راهی وجود نداشت، بنابراین تصمیم گرفتم زبان جدیدی را امتحان کنم و شروع به مطالعه آن کردم. البته اولین کد کاملاً به سبک جاوا نوشته شده بود که این سوء تفاهم را بیشتر کرد: چرا به یک زبان جدید نیاز دارم؟ اما همانطور که از آن استفاده کردم، مزایای بیشتری پیدا کردم و اکنون (تقریباً 2 سال است که در Kotlin می نویسم) می توانم بگویم که Kotlin در توسعه اندروید راحت تر است. من می خواهم برخی از تفاوت های ظریف را نشان دهم که برای کسی که تصمیم گرفته است پس از جاوا شروع به یادگیری کاتلین کند، واضح نخواهد بود. همچنین به شما یادآوری می کنم که اندروید از جاوا 8 استفاده می کند که نسخه فعلی آن 14 است. بنابراین، ابتدا - متغیرها : جاوا:
Int a = 1;
String s = "test";
کاتلین:
val a = 1
var b = 2
val c: Int
val d = "test"
دو نوع متغیر در کاتلین وجود دارد: val (فقط خواندنی) و var (خواندن-نوشتن). توصیه می شود در صورت امکان از val استفاده کنید. اگر متغیر قبلاً مقداردهی اولیه شده باشد، نیازی به اعلام نوع متغیر نیست. دوم - if/else، سوییچ دستورات : چند وقت یکبار از این زنجیره عبارات در جاوا استفاده می کنید:
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
یا مثل این:
switch(выражениеДляВыбора) {
        case (meaning 1):
                Код1;
                break;
        case (meaning 2):
                Код2;
                break;
...
        case (meaning N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
در کاتلین، عملگر When برای چنین عباراتی استفاده می شود (اگرچه if/else نیز می تواند استفاده شود):
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
در اینجا ما نه تنها از طریق زنجیره شرایط عبور کردیم، بلکه بلافاصله کل عبارت را به متغیر نتیجه اختصاص دادیم که چند خط کد را ذخیره کرد. اما با این حال، اگر فقط دو گزینه در یک شعبه دارید، توصیه می کنم از if..else معمول استفاده کنید. زمان ساخت و ساز تنها از سه گزینه کوتاهتر خواهد بود. بیایید به جلو برویم - سازندگان . اینجا یک افسانه است. فقط کدهای جاوا و کاتلین را مقایسه کنید. جاوا:
public class Person {

    private String firstName;
    private String lastName;
    private int age;

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
کاتلین:
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
ممکن است به نظر برسد که چیزی در کد کاتلین ناتمام مانده است. اما نه، این دو کد یکسان در زبان های مختلف هستند. بیایید کمی آن را بفهمیم. در Kotlin، سازنده را می توان مستقیماً در بدنه نام کلاس نوشت (اما اگر بخواهید، می توانید آن را به روش قدیمی مانند جاوا انجام دهید). بنابراین، ما سه متغیر نوشته‌ایم، در جاوا یک سازنده، getters و یک تنظیم کننده برای متغیر age ایجاد کرده‌ایم. همانطور که به یاد داریم، در کاتلین، متغیر val فقط خواندنی است و بنابراین تنظیم کننده این متغیرها در دسترس نیست (کاتلین گیرنده-ستترها را زیر خود هود پیاده سازی می کند). متغیر var به شما امکان می دهد از یک ستتر استفاده کنید. در نتیجه، ما تقریباً در یک خط همان چیزی را نوشتیم که بیش از ده خط در جاوا طول کشید. در اینجا توصیه می کنم در مورد کلاس های داده در Kotlin بیشتر بخوانید. اما این تمام چیزی نیست که سازندگان کاتلین در آن خوب هستند. اما اگر به دو سازنده نیاز دارید چه؟ اگه سه تا باشه چی؟ در جاوا به شکل زیر است:
public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

public Person(String firstName) {
        this.firstName = firstName;
    }
هیچ چیز پیچیده ای نیست، فقط به تعداد طراحان مورد نیاز، این کاری است که آنها انجام دادند. در کاتلین می توانید تنها با یک سازنده به موفقیت برسید. چگونه؟ این ساده است - مقادیر پیش فرض.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
ما مقادیر پیش فرض را در سازنده اختصاص دادیم و اکنون فراخوانی آنها به شکل زیر خواهد بود:
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
ممکن است این سوال پیش بیاید: این چیست:
private val lastName: String? = null
این علامت سوال های دیگر چیست؟ بله، اگر مقدار می تواند null باشد، آنگاه تنظیم می شود ?. همچنین گزینه ای مانند این وجود دارد - !!(اگر متغیر نتواند null را قبول کند). خودتان در مورد آن بخوانید، همه چیز ساده است. و به سراغ نکته بعدی می رویم. پسوندها _ این یک ابزار بسیار جالب در Kotlin است که در جاوا موجود نیست. گاهی اوقات در یک پروژه از متدهای قالب استفاده می کنیم که در بسیاری از کلاس ها تکرار می شوند. به عنوان مثال، مانند این:
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
در Kotlin می توانیم یک کلاس را گسترش دهیم:
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
و سپس از آن به صورت زیر در طول پروژه استفاده کنید:
context?.toast("hello world")
ما یک پسوند برای کلاس Context ساختیم. و اکنون هر جا که زمینه در دسترس باشد، روش نان تست جدید آن در دسترس خواهد بود. این را می توان برای هر کلاسی انجام داد: String، Fragment، کلاس های سفارشی شما، هیچ محدودیتی وجود ندارد. و آخرین نکته ای که به آن نگاه خواهیم کرد کار با رشته ها است . اینجا همه چیز ساده است. در جاوا به این صورت نوشته شده است:
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
در کاتلین راحت تر است:
val s = "friends"
val a = 5
println("I have $a $s!")
اینها نکات ظریفی است که من در ابتدای یادگیری کاتلین با آنها برخورد کردم، امیدوارم این به شما کمک کند.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION