کاربردهای زبان کاتلین
اکنون زمان آن رسیده که زبان برنامه نویسی تان را نو کنید. امروز قصد داریم در ادامه مقالات آموزش زبان کاتلین ، در مورد ویژگی ها و مزایای زبان کاتلین حرف بزنیم و دلایلی را نام ببریم که شما مجبور شوید در پروژه ی بعدی تان به سمت این زبان بیایید. تا همین چند وقت پیش جاوا با اختلاف در صدر زبان های برنامه نویسی مورد علاقهمان بود اما با آمدن کاتلین و کار با این زبان تازه نفس اما حرفه ای، جای خود را به کاتلین داد و در جای دوم قرار گرفت.
کاتلین توسط گروه JetBrains توسعه پیدا کرده است، گروهی که کارهای درخشانی مانند IntelliJ و ReSharper را در کارنامه خود دارند که هر کدام از این IDEها در دل کاتلین شما را مبهوت خود خواهند کرد. کاتلین کاربردی و موجز است و همین امر باعث می شود که از کدنویسی در این زبان احساس خوب و تجربه ی غنی ای را بدست بیاورید.
به علاوه این زبان به دو حوزه ی جاوا اسکریپت(JavaScript) و بزودی ماشین کد (Machine Code) کامپایل می کند که البته بهتر هست روی محیط اصلی اش تمرکز کنید یعنی ماشین مجازی جاوا(Java Virtual Machine). در ادامه مواردی را به شما خواهیم گفت که شما به طور کامل برای رفتن به سمت کاتلین قانع شوید:
1. صمیمیت با جاوا
کاتلین به طور کامل با جاوا همکاری می کند. شما می توانید حتی پروژه های قدیمی جاوا را با کاتلین پیش ببرید. از آنجاییکه تمامی فریم ورک های جاوا که دوستشان دارید هنوز در دسترس هستند، فرقی نمی کند که با چه فریم ورکی در کاتلین کد بزنید، همه ی پروژه هایتان برای کسانی که با جاوا کار می کنند قابل فهم و استفاده است.
2. سینتکس(Syntax) آشنا
کاتلین از آن دست زبان ها نیست که خروجی، محیط آکادمیک باشد بلکه Syntax آن تقریبا برای تمامی برنامه نویسانی که از محیط برنامه نویسی شیءگرا میآیند آشناست. البته که تفاوت هایی میان جاوا و کاتلین وجود دارد مانند عبارات دستوری” val” ” var”. برای فهم بیشتر به قطعه کد پایین نگاه کنید:
3. فرآیند ارزیابی رشته ای
بنظر می آید نسخه ی بهینه تری از فرآیند () String.formatجاوا در کاتلین تعریف شده باشید:
4. ارجاعات نوشتار
با کاتلین میتوانید در هر جایی از کدنویسی که حس کردید نیاز دارید از قابلیت ارجاعات عبارت یا دستوری که وارد کردید استفاده کرده و خوانایی کدهایتان را بهبود ببخشید.
5. کست های(Casts) هوشمند
کامپایلر(Compiler) کاتلین منطق نوشتارتان را رصد می کند و در صورت امکان به صورت خودکار آن را کست می کند، که بدین معناست که با کمک این کست های واضح دیگر نیازی به چک کردن با دستور insatanceof نیست.
6. برابری های شهودی
دیگر نیازی نیست عبارت ()equals را بکار ببرید، تنها با نوشتن عبارت == اوپراتور کاتلین برابری ساختاری را بررسی می کند:
7. Argument آرگمانهای پیش فرض
نیازی نیست چندین روش مشابه با آرگمان های مختلف تعریف کنید:
8. آرگمان های نام گذاری شده
ترکیب آرگمان های پیش فرض و نام گذاری شده، شما را از وابستگی به بیلدرها(builder) بی نیاز می کند:
9. عبارت “کِی”(When)
عبارت switch case رو با یک عبارت خوانا تر و منعطف تر جایگزین می کنیم:
هم به شکل یک جمله هم به شکل یک عبارت کار می کنه هم با آرگیومنت هم بدون آرگیومنت.
10. تنظیمات
می توانید عبارات set و get را به صورت دلخواه تنظیم کرده و در بخش های عمومی(public fields) بکار ببرید. این قابلیت باعث می شود تا دیگر کدهایمان خراب نشوند.
11. کلاسِ “داده”
این کلاس همان صورت کامل شده ی POJO با عبارات ()tostring() ،equals() ،hashCode و () copy است که برخلاف نسخه ی جاوا نیازی نیست شما صد خط کد بنویسید:
12. Overloading عملگر:
مقادیر از پیش تعیین شده ی عمل گرها می توانند Overload شوند تا خوانایی کدهایتان را بهبود ببخشند:
13. اعلان های تخریب
برخی از آبجکت ها (object) می توانند تخریب شوند، به عنوان مثال این قابلیت برای مپ های(map) تکرار پذیر مفید است:
14. محدوده ها:
برای خوانایی بیشتر:
15. توابع پسوند
آیا خاطرتان هست زمانی که برای اولین بار یک list را در جاوا دسته بندی کردید؟ اگر جوابتان مثبت است بنابراین می دانید که نمی توانستید تابع ()sort را پیدا کنید بنابراین باید سراغ یک جاوا کار حرفه ای می رفتید و یا اینکه در گوگل جست و جو می کردید تا فرآیند ()Collections.sort را یاد بگیرید. و بعدتر زمانی که شما مجبور بودید یک string را بزرگ نمایی کنید، کد نویسی تان بخاطر عدم دانستن فرآیند ()
StringUtils.capitalize
. برای نوشتن تابع کمک کننده خودتان متوقف میشد. اگر تنها یک مسیر ساده برای اضافه کردن تابع جدید به کلاس های قدیمی می بود، آن مسیر IDE خواهد بود که با داشتن قابلیت اصلاح و پیشنهاد کدها به شما در پیداکردن تابع درست کمک می کند. در کاتلین همین مسیر طولانی را به روش زیر می توانید به راحتی انجام دهید:
این کتابخانه ی استاندارد، در گسترش عملکرد انواع نسخ اصلی جاوا کمک شایانی کرده و بخصوص نیاز اصلی برای string به شمار می رود:
16. امنیت Null
تقریبا جاوا به استاتیک (ایستا) ترین شکل ممکن نوشته شده است. در جاوا، تضمینی وجود ندارد که متغیری از جنس رشته به یک رشته ارجاع داده شود، بلکه باید حتما به null ارجاع داده شود. این اجبار سبب می شود تا امنیت در هنگام بررسی نوع استاتیک نادیده گرفته شود، در نتیجه توسعه دهندگان جاوا همیشه در ترس از NPE ها به سر می برند.
کاتلین این معضل را با تفکیک به دو دسته ی بدون null و null پذیر حل کرده است. بدون null به صورت پیش فرض در کاتلین لحاظ شده است و همانطور که در تصویر مشاهده می کنید به راحتی می توانید با اضافه کردن یک علامت سوال آن را null پذیر کنید:
کار به همینجا ختم نمی شود، بلکه کاتلین شمارا مجبور می کند تا زمانی که می خواهید به گونه ی nullپذیری دسترسی پیدا کنید در برابر NPEها از خود محافظت نمایید:
و درست در زمانی که شاید مشکل بزرگی در پیش پایتان احساس می کنید، به راحتی آب خوردن توسط امکاناتی که در کاتلین وجود دارد این مشکل حل می شود. همانطور که قبلا اشاره شد در کاتلین شما کست(cast) های باهوشی در اختیار دارید که عمل کستینگ را چه برای انواع null پذیر و چه برای غیر nullها در هر جایی که ممکن باشد انجام دهید:
همچنین شما می توانید از علامت سوال برای امنیت بیشتر استفاده کنید. با این کار خود null را پیش از ورود به NPE ارزیابی می کنید:
ارزیابی های امنیتی می توانند درکل، پیچیدگی هایی که بعلت عدم بررسی nullها در دیگر زبان ها ممکن است گاها رخ دهد را هشدار داده و در زمانی که مقدار پیشفرضی را بجای null بخواهید می توانید از ?: elvis operator استفاده کنید:
اگر هیچ کدام از این موارد برایتان کار نکرد و شما صددرصد به یک NPE نیاز داشتید، باید به صراحت آن را درخواست کنید:
17. Lambda های بهتر
سیستم فوق العاده ی Lambda که در کمال هماهنگی بین خوانایی و ایجاذ وجود دارد، برساخته ی انتخاب های طراحی هوشمندانه است. اول از هرچیز ترکیب(syntax) آن است که بسیار ساده است:
و نقاط قوت دیگر:
- چینش پرانتزها می تواند جابه جا یا حذف شوند، اگر lambda آخرین و تنهاترین استدلال یک چینش باشد.
- اگر شما نخواهید استدلال یک تک-استدلال-LAMBDA را اعلان کنید، می توانید به وضوح در زیر نام it مشاهده نمایید.
تلفیق این موارد در نهایت موجب می شوند که سه خط زیر باهم برابر باشند:
این قابلیت به ما امکان می دهد که کدهای عملگر فشرده ای را بنویسیم. لطفا به تصویر پایین نگاه بیندازید:
سیستم lambda در کاتلین که با پسوندهای عملگر در هم آمیخته است، برای درست کردن DSL ایده آل است. پسوندهای عملگر در هم آمیخته با سیستم lambda در کاتلین باعث شده که این سیستم را برای طراحی DSL ها ایده آل کند. برای دیدن یک نمونهی موفق DSL میتوان به Anko اشاره کرد که موجب رشد و ترقی اندروید می شود:
18. پشتیبانی از IDE
اگر قصد استفاده از کاتلین را داشته باشید، انتخاب های زیادی در پیش روی شماست، اما ما قویا InteliJ را پیشنهاد می کنیم که همراه کاتلین است، زیرا سازندگان این IDEA همان کسانی هستند که کاتلین را برای شما به ارمغان آورده اند.
بعنوان یک مثال ساده اما هوشمندانه، زمانی که شما بخواهید کدهای جاوا را از سایت stack overflow کپی پیست کنید، با چنین پیغامی روبه رو خواهید شد:
سلام
من همیشه با جاوا کار کردم برای برنامه نویسی اندروید – الانم تو این چند ماه اخیر بیشتر با این زبان کار کردم – ولی یه چند روزه که تصمیم گرفتم برم سمت کاتلین ولی خب تردید دارم – چون خیلی رو زبان جاوا وقت گذاشتم – حالا میترسم که کوچ کنم به کاتلین زحمت هام هدر بره یا شایدم نه-
چه پیشنهادی برای من دارید…
سلام بر شما. هرگز اینجوری مقایسه نکنید، شما اگر جاوا رو یاد گرفتید خیلی هم عالی هست چون جاوا زبانی نیست که به این راحتی ها بشه گفت کنار رفت یا ….، بعد هم این رو بدونید که زمانی که شما یک زبان اونم مثل جاوا رو مسلط هستید هر زبان دیگری رو به سرعت یاد میگیرید، پس من پیشنهادم اینه که می تونید به کاتلین به راحتی سوئیچ کنید و هیچ ضرری نکردید بلکه فایده کردید و همچنین با جاوا هم پروژه ها رو ادامه بدید تا در آینده در صورت الزام گوگل سوئیچ کنید.