مقایسه دو زبان جاوا و کاتلین


تفاوت های جاوا و کاتلین در چیست؟

برای توسعه ی یک اپلیکیشن اندرویدی دو زبان قدرتمند وجود دارند. جاوا و کاتلین. برای انتخاب بین دو زبانی که هر دو قدرتمند هستند، باید تفاوت های آنها را بررسی نمود. مقایسه جاوا و کاتلین به ما کمک می کند که انتخاب بهتری داشته باشیم. در این مقاله به بررسی تفاوت های جاوا و کاتلین، با ذکر مثال های عملی حین توسعه ی برنامه ی اندرویدی می پردازیم.

جاوا، پیش کسوت و همه فن حریف

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

کاتلین، ارادتمند جاوا با نگاهی ساده زیست

کاتلین مثل زبان های c++ و جاوا یک زبان استاتیک می باشد. در زبان استاتیک، نوع داده ها پیش از اجرای برنامه بررسی می شوند. با وجود اینکه کاتلین زبانی استاتیک است می توان آن را وارد جاوا اسکریپت و اندروید و native برای توسعه ی برنامه ها در ios نمود.

شاید این سوال برای شما پیش بیاید که با وجود زبان قدرتمندی مثل جاوا، چرا زبان کاتلین عرضه شد؟ کاتلین با هدف کاهش تعداد خط های کد و ساده تر شدن مسیر توسعه یک برنامه، ساخته شد. هر امکانی که برای توسعه ی برنامه ی اندرویدی با جاوا ایجاد می شد با کاتلین هم ایجاد می شود.

جاوا سال هاست که در زمینه های مختلفی کاربرد دارد و جامعه گسترده ای را تشکیل داده. اگر در زبان جاوا به مشکلی بر بخوریم می توان به سادگی راه حل را یافت. اما کاتلین جامعه ی کوچک تری دارد و رفع خطاها در این زبان کمی سخت تر از جاواست.

مثالی از ساده سازی کدها در کاتلین

برای معرفی هر ویجتی که در layout می سازیم، در جاوا، از متد findViewByID استفاده می کنیم. در کاتلین نیازی به این متد نداریم. مثلا اگر بخواهیم مقداری را در textView نمایش دهیم، در جاوا به این دو مرحله نیاز داریم :

TextView text = (TextView) findViewById(R.id.textView);
text.setText("Hello World");

اما در کاتلین مستقیما می توانیم مقدار را در textView نمایش دهیم.

textView.setText("Hello World")
رهایی از null pointer exception

ناامید کننده ترین بخش جاوا رویارویی با خطاهای دسته ی null pointer exception می باشد. در حین ساخت یک برنامه منابع متعددی برای بروز این خطا می تواند بروز کند. در کاتلین بطور پیش فرض، همه انواع داده ها از ابتدا مقدارِ null را نمی پذیرند و به این ترتیب از بروز این خطا جلوگیری شده است. حتی اگه در کد از مقدارِ null استفاده بشه، در زمان کامپایل خطا میگیره.

var a: String = “abc”
//compilation error
a = null
دیتا کلاس در کاتلین

همواره برای نگهداری و کار با داده ها کلاسی می سازیم. این کلاس ها ساختار مشخصی دارند و توابعی که در آنها ساخته می شوند تکراری هستند. در کاتلین این نوع کلاس ها به طور آماده، با نام data class وجود دارند.

در جاوا این کلاس ها شامل متغیرها و توابع getter و setter هستند. هم چنین متد constructorی مناسب با کلاس، فیلدهایی هستند که همیشه در چنین کلاسی وجود دارند.

class User{
	   private String name;
   private int age;
   public String getName(){return this.name;}
   public void setName(String name) {this.name = name;}
   public int getAge() {return this.age;}
   public void setAge(int age) {this.age = age; }
   public User(String name, int age) {
         this.name = name;
         this.age = age;
   }
}

در کاتلین چنین کلاسی، با همان امکانات، در قالب data class به شکل زیر تعریف می شود:

data class User(val name: String, val age: Int)
انجام عملیات غیر هم زمان

در جاوا، اگر عملیات زمان بری مثل دریافت و ارسال فایل، پروسه های فشرده ی cpu روی یک thread انجام شود، آن thread مسدود خواهد شد. اندروید به طور پیش فرض عملیات خود را روی یک thread انجام می دهد.

جاوا امکان ساخت چند thread را در پس زمینه فراهم می کند. این thread با توجه به مسئولیتی که به آنها محول شده اجرا می شوند اما مدیریت آنها کار پیچیده ای ست.

در کاتلین برای انجام عملیات زمان بر در برنامه، می توان چند thread ساخت. با این تفاوت که به کمک پشتیبانی از corounties اجرای این thread ها مدیریت می شود و هر کدام در زمان مشخصی کار می کنند. بدون اینکه threadی ، threadِ دیگری را مسدود کند.

گسترش توابع

در جاوا، اگر بخواهیم عملکرد کلاسی که وجود دارد را بیشتر کنیم، کلاس جدیدی را از این کلاس extend می کنیم. به این ترتیب چنین شرایطی را برای کلاس ها داریم اما برای توابع نداریم.

در کاتلین می توانیم بدون ایجاد کلاس جدید و extend کردن از کلاس والد، عملکرد جدیدی را به کلاس والد اضافه کنیم.

فرض کنید در برنامه ای نیاز داشتیم تابع جدیدی را در کلاس Int ایجاد و استفاده کنیم. مثلا متدی که خاصیت قدرمطلق را داشته باشد. این متد بطور پیش فرض در کلاس Int وجود ندارد.

fun Int.abs() : Int{ 
        return if(this < 0) -this else this
    } 
  
    println((-4).abs())
تعیین نوع متغیر

در جاوا هنگام تعریف یک متغیر باید نوع آن را تعیین نمود. اما در کاتلین نیازی به مشخص نمودن نوع متغیر، هنگام تعریف نیست.

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

اما با یک ساختار تمیز جاوا 12-10 درصد سریع تر از کاتلین، کامپایل می شود. کاتلین هم مزایایی دارد که با وجود آنها می تواند از نظر سرعت کامپایل با جاوا رقابت کند. مزایا شامل مواردی ست که در بالاتر ذکر شد.

مشخصه هاجاواکاتلین
پرفورمنس برنامهعالیبسیار عالی
کیفیت کدغیر بهینهعالی
امنیت برنامهخوبعالی
پشتیبانی از معماری پیچیدهعالیضعیف

به این پست امتیاز دهید

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

میانگین امتیاز / 5. تعداد:

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *




Enter Captcha Here : *

Reload Image