خوب هفته پیش و در قسمت ۰ کاتلین راجع به یسری موضوعات صحبت کردیم. اگرچه ضروری نیست و به همین دلیل اسم اون قسمت را ۰ گذاشتیم؛ توصیه میکنم بخونید اون قسمت را چون یک حرفهایی زدیم که نه به لحاظ فنی ولی از این نظر که بدونید داریم چیکار میکنیم و هدفمون چیه مهمه :) و اما دوباره کاتلین
توی قست قبل گفتیم که کاتلین را میشه در ۴ حوزه استفاده کرد و این خودش یک موضوع هیجان انگیز در مورد این زبانه و خیلی مختصر این چهار تا حوزه را گفتیم. اما حالا میخوایم یکم عمیقتر بدونیم توی هر کدام از این حوزه ها چه خبر هست:
این زبان به دلیل تطابق کاملش با تکنولوژیهای جاوا و منحنی نرم! یادگیریش آن را به یک زبان مناسب برای برنامهنویسی سمت سرور تبدیل میکنه. این زبان مشخصههای زیر را برای خودش اعلام میکنه
فریمورکهای توسعه سمت سرور که با کاتلین کار میکنن هم Spring از نسخه ۵، Vert.x، Ktor، kotlinx.html و ابزارهای بسیار بیشتری برای اتصال به دیتابیس های رابطهای(RDBMS) و NoSQL ها.
ذکر این نکته لازمه که اگر برنامهای با کاتلین برای وب و سمت سرور نوشتین بدونین که هر سروری که برنامههای تحت وب جاوایی را ساپورت میکنن تنها گزینههای قابل استفاده شما هستن. درحال حاضر Corda و سیستم کاربری JetBrain سیستمهایی هستند که ۱۰۰ درصد با کاتلین پیادهسازی شدند.
یک موضوع جالب در مورد کاتلین اینه که میشه کدش را به جاوااسکریپت «تبدیل» یا «transpile» یا «تبدیل کد به کد» یا «خواندن کد در یک زبان و تبدیل آن به همان کد در زبان دیگر»؛ کرد. در حال حاضر این کد به ECMAScript 5.1 - یک استاندارد برنامهنویسی در زبان جاوااسکریپت - تبدیل میشه ولی در برنامه تیم توسعه کاتلین هست که ECMAScript 2015 را هم پیادهسازی کنه.
تنها نکته - یا شاید بشه گفت نقطه ضعف - در این تبدیل از کاتلین به جاوااسکریپت اینه که هیچ کد مربوط به JVM و JDK و یا هر کتابخانه یا فریمورک جاوایی استفاده شده در کد تبدیل نخواهد شد. به عبارت دیگر هر کدی که کاتلین نباشه در این تبدیل جایی نخواهد داشت.
اگرچه منطقیه تا حدی، ولی خوب چون یک بخشی از کار فریمورکها سهل کردن کارهای سخته، طبیعتا در این تبدیل یک بخش قابل توجهی از دشواریها هستن که باید توی کد جاوا اسکریپت پیادهسازی بشن دوباره.
هدف کامپایلر کاتلین در این تبدیل چهار تا موضوع هست:
اما یک خبر خوب در مورد این داستان اینه که کاتلین میتونه با کتابخانهها و فریمورکهای جاوااسکریپتی مثل React و jQuery همزیستی کنه! و همچنین کدهای نوشته شده در TypeScript هم قابل تبدیل به کدهای کاتلین با استفاده از ابزاری به نام ts2kt هست. و همچنین میتونید به اینها هم یک نگاهی بندازین: React bindings و React Kotlin App و در نهایت اینجا
تکنولوژی Kotlin/Native یک تکنولوژی هست که این امکان را میده که برنامههای نوشته بشه که بدون نیاز به هر ماشین مجازی «VM» اجرا بشه. این تکنولوژی با این هدف طراحی شده که بشه برای ابزارهایی که استفاده از ماشین مجازی در اونها جایی نداره - مثل ابزارهای iOS اپل یا سیستمهای توکار(embeded) - استفاده کرد. یا مثلا زمانی که یک توسعهدهنده میخواد نرمافزاری بنویسه که بدون هیچ وابستگی در زمان اجرا استفاده بشه.
برای این منظور این تکنولوژی از تمام قابلیتهای C و در سیستم عامل مکینتاش و iOS از تمام قابلیتهای Objective/C پشتیبانی میکنه.
خبر بد اینه که این تکنولوژی همچنان در حال توسعه است ولی میتونید از نسخههای پیش نمایش اون برای تست و لذت بردن استفاده کنید. چون این پلتفورمها را پشتیبانی میکنه:
بالاخره رسیدیم جایی که اصلا براش اومدیم کاتلین یاد بگیریم :) البته این بخش، توی خود آموزش بخش دوم بود ولی من آوردمش اینجا که حسابی معطلش بمونیم :) خوب ماجرا اینه که این زبان برای توسعه برنامههای اندروییدی یک گزینه بسیار مناسبه که با خودش تمام ویژگیهای و فواید یک زبان برنامهنویسی مدرن را همراه داره و اونهم بدون هیچ محدودیتی در توسعه اپ.
اما برنامههای باحالی هم تا حالا با کاتلین توسعه داده شده که از میان آنها میشه به Pinterest، Basecamp و KeepSafe اشاره کرد. که دو تای آخری ۱۰۰ درصد با کد کاتلین پیادهسازی شدند.
ابزارهای باحالی هم تولید کردن مثل Kotlin Android Extension - که اگر قبلا با اندرویید کد زده باشید - از دست ()findViewById
راحتتون میکنه. یک ابزار فوقالعاده دیگهای که با این زبان ارایه شده Anko هست که یسری پوشش(wrapper) کاربرپسند ارایه میکنه برای استفاده از APIهای اندرویید و همینطور DSL که اجازه میده قالب xml فایلها با کد کاتلین پیادهسازی بشه.
تا هفته بعد :)
* اگر جاهایی که این علامت را دیدین متوجه نشدین اصلا نگران نشید. من معادل فارسی براشون توی ذهنم نبود و نمیخواستم اینجا بازشون کنم. به موقع وقتی به سرفصل هرکدوم برسیم با مثال و تمرین کاملا روشن میشه برامون چی هستن! اگرم فهمیدن که عالی :)
** یک نکتهای را دوست دارم بگم، نه به این معنیه که درسته فقط به این معنی که نظر من اینه. اگر تا حالا برنامهنویسی نخوندین یا از رشته دیگه ای هستین که و دلتون خواسته برنامه نویس بشید اول بدونید که فوق العادهاید. و دوم اینکه لازمه یسری چیزها را یاد بگیرید. ساختار توابع بازگشتی، الگوریتم، انواع ساختمان دادهها، تحلیل و طراحی یک سیستم، الگوهای طراحی و .... منظورم این نیست که همه را یهو یادبگیرید. منظورم اینه که یادگرفتن این موارد به شدت روی حرفهای شدنتون تاثیر میذاره.
بروزرسانی ۱۷-۰۲-۹۷: یک ایده به ذهنم رسید که البته هنوز کامل بررسیش نکردم که بخوام قولش را بدم ولی به نظرم رسید توی فاصلهای که این درسها را میذاریم بد نیست که یکسری مطالب کوتاه از حاشیه این زبان بگم. تلاشم را میکنم اما قول روتین بودنش را نمیدم :) ایندفعه هم داشتم دنبال یک تصویر برای «نوعهای پایه» یا همون «Basic Types» که بحث قسمت ۱ هست میگشتم که یک مطلب خیلی مرتبط به صحبتهای قبلمون دیدم در سایت slideshare.net. پیشنهاد میکنم ۸ تا اسلاید اولش را ببینین. و بعد اسلاید ۱۴ را. یک مقایسه خیلی جالبی داره با Java و Scala که بنظرم خوندنیه! اسلاید ۶۸ این نمایش خبر از Functional Programming در کاتلین میده که البته این روش برنامه نویسی خیلی این روزها مورد توجهه!