دلایل استفاده از زبان برنامه نویسی کوتلین در برنامه نویسی اندروید!
بلاگ آکادمی لرن فایلز
طرح تخفیف «به افتخار کوروش بزرگ» فعال شد با ۷۵و۸۵ درصد تخفیف-۴۸ساعته
دریافتبلاگ آکادمی لرن فایلز
در این مقاله قصد داریم دلیل استفاده از زبان برنامه نویسی کوتلین در اندروید را برایتان شرح دهیم. جاوا پرکاربردترین زبان برنامهنویسی برای اندروید است، اما این بدان معنی نیست که همیشه بهترین گزینه است. جاوا کمی قدیمی شده و احتمال خطا در آن زیاد است. همچنین، این بستر معمولاً دیر بروز شده و این ثابت میکند که Kotlin بهترین جایگزین برای آن هست.
برنامه نویسان OpenJDK در تلاشاند تا مشکلات جاوا ۸ را برطرف کنند، اما اندروید از تمامی ویژگیهای جاوا ۸ استفاده نمیکند. برنامه نویسان هنوز در دنیای جاوای ۶ و ۷ گیرکردهاند و این موضوع قرار نیست در آیندهی نزدیک پیشرفتی داشته باشد. این دقیقا جایی است که چرا باید از زبان Kotlin برای برنامهنویسی در اندروید استفاده کرد؟ چرا باید از زبان برنامه نویسی Kotlin در اندروید استفاده کرد؟ زبان Kotlin وارد بازی می شود. این زبان Open Source و جدید که بر مبنای JVM یا ماشین مجازی جاوا کار میکند، در میان مهندسین برنامهنویسی اندروید محبوبیت زیادی پیداکرده است.
زبانهای دیگری نیز هستند که بر مبنای JVM فعالیت میکنند، اما زبان برنامه نویسی کوتلین به شما این امکان را میدهد که بهراحتی با استودیوی اندروید و IDE گوگل برای اندروید کارکنید که تا به حال هیچ زبانی به غیر از جاوا در اختیار کاربران قرار نداده است. حالا زمان آن فرا رسیده تا با یک زبان مدرن، پیچیده و آینده نگر، پروژه های اندرویدی خود را ایجاد کنید.
اکثر شما سال هاست از جاوا برای برنامهنویسی استفاده کرده اید، پس با آن بخوبی آشنا هستید. گوشه به گوشه آن را می شناسید و می دانید چیز هایی در آن وجود دارد که بزرگان همیشه به شما یادآور می شوند و این ترفند هاجایی نوشته نشده است.
پس وقتی زبان جدیدی وارد بازار می شود، شما کمی به آن مشکوک هستید. خود من هم این مشکل را داشتم. باید بگویم که مدت زیادی است که از جاوا استفاده میکنم و یک رابطه عشق و تنفر با آن برقرار کرده ام!
در ابتدای کار، خیلی علاقه ای به جدایی از جاوا نداشتم ولی با آشنایی بیشتر با زبان برنامه نویسی کوتلین، نظرم عوض شد. در ادامه به تعدادی از دلایل آن اشاره می کنم:
جاوا یکی از پرمصرف ترین زبان ها بود؛ اما امروزه، جاوایی که ما در اندروید استفاده می کنیم هیچ نوع پشتیبانی برای Lambdas, Method references و Streams ندارد. هنوز مجبوریم از API های javax.time در نسخه های ۶ و ۷ استفاده کنیم. البته با برخی از ابزار ها می توان به این ویژگی ها دست پیدا کرد(مثل Retrolambda, ThreeTenABP)، اما این ابزار ها نیز دردسر های خاص خود را دارند. Android Nougat نیز تلاش زیادی کرده است تا ویژگیهای جاوای ۸ را با کمکJack Compiler پشتیبانی کند اما این ویژگی ها معمولا زمانی کاربرد دارند که هدف شما minSDK نسخه ۲۴ باشد که با توجه به کند بودن بروزرسانی های اندروید، اصلا توصیه نمی شود.
یکی دیگر از مشکلات جاوا، روش کار آن با “Null” است که باعث ایجاد خطای معروف NPE یا NullPoniterException شده است. امروزه، NPEها دلیل اصلی خطا و مشکلات نرم افزاری در اندروید هستند. در حقیقت، هیچ برنامه ی اندرویدی وجود ندارد که بدون این خطا باشد(اگر دیدید حتما به ما هم اطلاع بدهید، چون خیلی مشتاقیم بدانیم چطور جلوی این خطا را گرفته اید).
“Nullabiltiy” یک مشکل بزرگ در اندروید است. Null یک روش راحت و مفید برای نشان دادن نبود یک مقدار هست و اندروید از آن در فریم ورک ها و API هایش استفاده میکند. جاوا کار با null ها را سخت تر کرده و این یکی از نقاط ضعف این بستر هست.
مشکل سوم این جاست که برنامه نویس ها معمولا توجهی به Inner class ها در جاوا نمیکنند که باعث می شود فراخوانی از خارج Class ها بیش از حد شود و برنامه های تولید شده در اندروید با مشکل کمبود حافظه روبرو شوند.
جاوا مجموعه عظیمی از ایراد ها را در خود جای داده است که در این جا به آن ها اشاره ای نمی کنیم. اگرچه از بزگترین مشکل آن نمی توان به همین راحتی گذشت.
برنامه نویس ها همیشه به دنبال کد های مرتب و خلاصه اند. کد های کمتر یعنی زمان خواندن کمتر و خطاهای کمتر؛ اما در جاوا، باید برای ساده ترین کارها، کد های فراوانی بنویسید. اگر تا بحال برای اندروید کد نویسی کرده باشید، منظور من را متوجه می شوید.
“تعارفات” و کارهای زیادی برای کار با APIها در جاوا وجود دارد و اندروید به خاطر داشتن مراحل مختلف کاری، مثل دسترسی به پایگاه داده و تراکنشهای مربوط به Fragmentها، این فرانید را بسیار پیچیدهتر کرده است.
سادهتر کردن این فرایندها شمارا به یک برنامهنویس باتجربه و با بازدهی بالا، تبدیل خواهد کرد.
جاوا تنها زبانی نیست که با آن بتوان برای برنامههای اندرویدی کد نوشت. بهغیراز جاوا، قویترین اکوسیستم اندرویدی که با ماشین مجازی جاوا MJV بهخوبی کار میکند، Kotlin است. این زبان برنامهنویسی Open source توسط JetBrains ابداع گردیده است.
JetBrains یکی از محبوبترین IDEها را بانام IntelliJ IDEA و استودیوی اندروید را ایجاد کرده است که گوگل از آن بهعنوان بهترین و استانداردترین IDE برای برنامهنویسی اندرویدی یاد میکند. سختیهای روزمره برنامه نویسان اندرویدی برای این گروه متخصص آشکارشده بود و به همین دلیل، آنها Kotlin را ارائه کردند تا با این مشکلات مقابله کند. JetBrains از Kotlin در تولید محصولات خود استفاده میکند و احتمال اینکه این بستر در آینده رها شود بسیار کم است.
Kotlin با روشی نوین و آیندهنگر، ویژگیهایی مثل Package Manager و Build را حذف کرده است. این دو ویژگی هماکنون توسط Gradle و Maven ارائه میشوند. استفاده از این ویژگیها در Kotlin باعث میشود تا پروژههایی که توسط Maven و Gradle انجامگرفتهاند، از بین بروند.
یکی دیگر از رویکردهای خوب در Kotlin، قرار نگرفتن فریم ورک Java Collections است. با کمک آنها کار کمی سادهتر میشد ولی برنامهنویسها مایل نبودند که JDKها خللی در کارشان ایجاد کنند.
یکی از مزیتهای مهم در Kotlin، تصمیم های طراحی برنامهنویسی است که باعث می شود برنامه هم خوانی بالاتری با سیستم های مختلف داشته باشد و بتوان براحتی با سایر پروژه های اندرویدی و جاوا، کار کرد. برای مثال؛ Kotlin از Bytecode در نسخه جاوا پشتیبانی میکند که نیمی از دستگاه های اندرویدی موجود به آن وابسته اند.
این اولین موضوعی است که باعث شد من به Kotlin علاقه مند شوم. شما براحتی می توانید کد های Kotlin و جاوا را در یکدیگر اجرا کنید. هر دو دارای Bytecode مشابه هستند و هیچ مشکلی در انتقال کد ها از یکی به دیگری وجود ندارد.
این یعنی شما می توانید براحتی پروژه ی کنونی خود را در kotlin ادامه دهید. برای شروع بهتر است بخش های کوچکی از برنامهی خود را در Kotlin بنویسید تا با ساختارهای آن آشنا بشوید(که باید گفت خیلی ساده اند).
خود من، برای اولین بار بخش های کوچکی از یک پروژه ی بزرگ، مثلUIها و ساختار های تجاری ساده را با کمک Kotlin نوشتم. از این برنامه، فقط ۴ تا ۵ درصد در Kotlin نوشته شده و بقیه در جاوا است. هدف بعدی من تبدیل این کدها به Kotlin است. ترکیبی از کدهای جاوا و Kotlin در پروژه ی من مشکلی ایجاد نکرده است و کاربردی بودن این ترکیب واقعا کمک زیادی به من کرده است.
تیم برنامه نویسی من سه سال است که در حال ساخت برنامه های اندریدی است و NPEها همیشه باعث ایجاد اختلال در برنامه ها بوده اند. سرمایه گذاری زیادی صرف برطرف کردن این خطاها شده و بررسی های انجام شده بر روی Null ها باعث شده زمان زیادی برای این کار کسل کننده تلف بشود.
با Kotlin، دیگر نگران NPE ها نیستیم، چون که امنیت Nullها در سیستم تایپی Kotlin در نظر گرفته شده اند. شما براحتی می توانید در زمان کامپایل کد ها متوجهNPE ها شوید و دیگری نیازی به نگرانی از مشکلات نرم افزاری در زمان اجرا نیست.
این موضوع به شکلی عملی شده است؟ به شکل پیش فرض تمامی متغیر ها غیر Null هتسند. اگر شما نیازی به متغیری دارید که Null داشته باشد، باید با قرار دادن؟ این موضوع را تعریف کنید. فرض کنید یک متغیر داریم و مقداری برای آن تعریف می کنیم:
این بخوبی عمل خواهد کرد. حالا این یکی را امتحان کنید:
در این جا، کامپایلر نمیتواند پردازش کند و به شما این پیام را خواهد داد “Null can not be a value of a non-null type String”. این پیام به این خاطر نمایش داده شد که به شکل پیش فرض، نوع متغیر غیر Null است. همیشه باید به کامپایلر اعلام کنید که متغیر از نوع Null باشد:
حالا به راحتی قابل پردازش است اما هنوز باید برای دسترسی به این متغیر دقت کنید. اگر در کدنویسی شما این نوع از متغیر ها وجود داشته باشند، احتمال NPEها در زمان اجرا به حداقل خواهد رسید.
با Kotlin، نگران پشتیبانی از ابزارهای مختلف نباشید چون که یک شرکت معتبر پشت آن قرار گرفته است. JetBrains تخصص زیادی در زمینه IDEها در اینترنت دارد.
در استودیوی اندروید، تنها کاری که باید انجام شود نصب کردن این افزونه است:
به همین سادگی. افزونهی Eclipse نیز براحتی در دسترس است، البته نیازی به آن حس نمی شود. تمامی ویژگیهایIDE در استودیوی اندروید در Kotlin به خوبی کار میکنند. می توانید کد های جاوا و Kotlin را راحت ترکیب کنید و پشتیبانی IDE از زبانهای مبتنی بر JVM تا این حد نمی توانند موفق عمل کنند. ویژگی منحصر بفرد دیگر در Kotlin، تبدیل فایل های جاوا به Kotlin است. براحتی فایل های قدیمی جاوا را به نسخه ی معادل Kotlin تبدیل کنید.
من ۹۹ درصد از فایل های که با جاوا نوشته شده و تبدیل به Kotlin شده اند را با موفقیت راه اندازی و استفاده کرده ام.
با این برنامه، کد های کم تری نوشته می شود. خط های کم تر کدنویسی به منزله فضای کم تر برای فایل های Kotlin می باشند. با استفاده از افزونه استودیوی اندروید، فایلهای جاوا را با اندازه های مختلف به Kotlin تبدیل کرده ام و معمولا فایل بدست آمده جای کم تری اشغال میکند. زبان برنامه نویسی کوتلین بسیار خوانا تر از جاوا است. این زبان بسیار راحت تر و قابل فهم تراز جاوا است. بخش اعظمی از وقت برنامه نویسان به این شکل برای مصارف بهتر هزینه خواهد شد.
برای مثال، کد زیر برای یک Listener کلیک در جاوا نوشته شده است. همه در برنامه های اندرویدی خود از این حسگر کلی استفاده میکند. مشکل این جاست که کد های زیادی برای این کار ساده باید نوشته بشود و تعارفات زیادی در جاوا برای عکس العمل نسبت به این کلیک وجود دارد:
حالا این را در نظر بگیرید:
Kotlin تازه واردی در دنیای برنامهنویسی است. سال های کمی عمر دارد و شورع آن توسط شرکت JetBrains در سال ۲۰۱۵ اتفاق افتاد. برخلاف سایر برنامه های مبتنی برJVM، این زبان یک پیشینه ی تجاری و تحقیقاتی دارد و آکادمیک نمیباشد. نوشتن برنامه های جدید و زبانهای نوین همیشه وسوسه کننده است ولی شرکت Jetbrains تصمیم گرفت تا با ساخت Kotlin به دنبال زبانی ساده و ملموس برای رفع مشکلات تجاری و برنامهنویسی مربوط به آن باشد.
Kotlin زندگی شما را به عنوان یک برنامه نویس اندرویدی بسیار راحت تر خواهد کرد. ابزار های جدید آن به شما توانایی رشد و توسعه زیادی میدهد و شش سال تجربه کاری این زبان باعث شده تا جای پایش، در بازار برنامهنویسی محکم شود.
این زبان را امتحان کنید، Kotlin را از لینک زیر دانلود کرده و از آن در پروژه های بعدیتان استفاده کنید. مشتاق هستیم نظرات و تجربیات شما را دراین زمینه بدانیم. پس آنها را با ما در میان بگذارید.
سلام و خسته نباشی خدمت دوست عزیز
من در حال یادگیری اندروید استودیو با جاوا هستم بنظرتون ابتدا جاوا رو کامل تموم کنم و بعد بیام کاتلین رو یاد بگیرم ؟
یا در همین بین مقدمات کاتلین رو هم یاد بگیرم؟
من اواخر فصل پنج اندروید هستم
با تشکر
دوست عزیزم سلام
ما بخشی رو راه اندازی کردیم به نام مشاوره ی تخصصی
می تونین با ما تماس بگیرین و داخلی مشاوره ی تخصصی رو بزنین:
۰۵۱-۳۶۱۱۰۰۴۱
داخلی ۲
سلام خسته نباشید الان شرکت های مطرح دنیا مثل خود گوگل برنامه نویسانشان از کاتلین استفاده میکنن ممنون میشم راهنمایی کنید.
سلام دوست من، من منظورتون رو متوجه نشدم، جمله ی اول شما سوالی هست یا خبری؟ اگر خبری هست که ما از این مورد خبر نداریم و اگر سوالی هست با توجه به چیزهایی که من خوندم در این رابطه اینطور نیست..
مقاله خوبی بود ممنون ، ( شورع – اشتباه تایپی )
خوشحالیم که رضایت داشتید. موفق باشید