کاتلین چیست و چجوری کار میکنه ؟ شروع یادگیری کاتلین قسمت اول

What is Kotlin ? کاتلین چیستاگه برنامه نویس اندروید باشید و هنوز با جاوا کار میکنید دیگه کم کم باید جاوا بزارید روی طاقچه و چمدون رو ببندید کوچ کنید به سمت کاتلین... منم از این قافله مستثنا نیستم و در همین مسیر هستم ولی خب دوست داشتم این مسیری رو که دارم طی میکنم مکتوب داشته باشم تا به کسانی که شرایط من رو دارن بتونم کمکی کرده باشم. من میخوام مرحله به مرحله مسیرم رو توضیح بدم و کمی عمیق تر وارد کاتلین شم.مرحله اول : شناخت زبانشرکت Jet Brains واقع در سن پترزبورگ روسیه که توسعه زبان کاتلین بر عهده اون ها بود اسم این زبان رو از جزیره کاتلین در روسیه الهام گرفت, در 8 نوامبر سال 2010 اولین کامیت در ریپازیتوری زده شد و نسخه اول در سال 2016 منتشر شد.جزیره کاتلین در روسیهاز مزیت های کاتلین میشه به cross-platform , statically typed, general-purpose , High-level programming language و type inference اشاره کرد که تک تک این موارد رو براتون توضیح میدمکاتلین Cross Platform زبان های Cross Platform به شما این اجازه رو میدن که روی پلتفرم های مختلف بتونی با یک زبان کد بزنی و دوباره نیاز نیست که واسه پلتفرم جدید کد های جدید بنویسی , برای مثال در کاتلین شما میتونی یک هسته مشترک طراحی کنی که شامل منطق و عملکرد برنامه باشه و از کد نوشتن دوباره در هر پلتفرم جلوگیری کنی و در نهایت در هر پلتفرم فقط UI مخصوص به خودش رو به کمک هسته پیاده سازی میکنی.علاوه بر خود زبان, کاتلین فریم ورکی به نام KMM رو داره که توسعه پلتفرمی رو تسهیل میده , شما با این فریم ورک میتونی هم برای Android و iOS کد مشترکی بزنید.کاتلین Statically Typedوقتی یک زبانی Statically Typed باشه به این معنی هست که هر متغییری دارای یک نوع خاص هست ( Int , String , Boolean...) و قبل اجرا شدن توسط کامپایلر شناخته میشه و بررسی میشه . در این نوع زبان ها وقتی متغییری تعریف میکنید نوع اون رو باید به صراحت مشخص کنید تا کامپایلر بفهمه که این متغییر چجوری باید استفاده بشه و مطمئن بشه که اون متغییر درست تعریف و استفاده شده.کاتلین General Purpose - GPLبه زبان هایی گفته میشه که طیف وسیعی از حوزه هارو شامل میشن مثل توسعه وب، توسعه اپلیکیشن موبایل، توسعه سمت سرور، برنامه های دسکتاپ و غیرهبه عنوان مثال، Python یک GPL است، در حالی که SQL یک DSL برای جستجو در پایگاه‌های داده رابطه‌ای است.کاتلین High-level programming languageبه صورت خیلی خلاصه بخوام بگم : زبانی که خیلی کد زدن شمارو آسون بکنه بر خلاف زبان برنامه نویسی سطح پایین جوری طراحی شدن که خوندن و نوشتن و درکش برای ما بهتر باشه , بجای دستورات پیچیده ای که فقط کامپیوتر میفهمه , خیلی محاوره ای تر هست و به تفکر ما نزدیک تره ,این به برنامه نویس ها اجازه می ده تا با استفاده از کلمات، نمادها و ساختارهای آشنا کد بنویسن و بیان ایده ها و حل مسائل را آسان تر می کنه. کاتلین Type Inferenceکامپایلر خودش نوع متغییر رو با مقدار دادن اون متغیر تشخیص میده و نیاز نیست که شما نوعش رو مشخص کنید , این باعث میشه شما کد مختصری بنویسید و در عین حال type safety رو حفظ کنید.کاتلین چجوری کامپایل میشه ؟کاتلین چجوری کامپایل میشه کامپایلر کاتلین به نام kotlinc یک برنامه خاصی هست که توسط JetBrains توسعه داده شده تا کد های کاتلین رو انالیز و کد های کاتلین رو به فرمی تبدیل کنه که کامپیوتر متوجه بشه و اجرا کنه.فایل .kt که کد های کاتلین شما داخل این فایل قرار داره رو به کامپایلر به عنوان ورودی میدید و کامپایلر مثل یک مترجم که به زبان کاتلین تسلط داره اون رو برای ماشین ترجمه میکنه و همچنین چک میکنه که شما از ساختار و قوانین از پیش تعیین شده پیروی میکنید و به دنبال تمامی خطاها و مشکلاتی میگرده که شما در کد انجام دادید .اگر همه چیز درست بود و هیچ مشکلی وجود نداشت کامپایلر کدهارو به فرمت خاصی به اسم بایت کد ( Byte Code ) تبدیل میکنه , بایت کد یک لول سطح پایین تر از کد های شماست که برای کامپیوتر قابل درک هست و میتونه اجرا کنه.زمانی کامپایلر کد های شمارو تبدیل کرد به بایت کد , حالا این بایت کد میتونه روی پلتفرم مورد نظر اجرا بشه , برای مثال اگر شما دارید برنامه اندروید میسازید , بایت کد روی گوشی های اندرویدی قابل اجراست و یا اگر هدفتون ماشین های مجازی جاواست ( JVM ) بایت کد شما روی تمامی دستگاه هایی که JVM رو ساپورت کنند اجرا میشه.درون کامپایلر چه خبره ؟اینجا میخوام یکم جزئی تر وارد کامپایلر بشیم و اینکه کد از اول چه مسیری رو طی میکنه که به بایت کد تبدیل بشه: مرحله اول: Lexical Analysisوقتی کد کاتلین خودتون رو به کامپایلر میدید وارد مرحله تحلیل واژگانی میشه ( Lexical Analysis ) . یعنی کد شما رو کاراکتر به کاراکتر میخونه و تحلیل میکنه و در اخر به قسمت های کوچیکتری به نام توکن ذخیره میکنه , توکن ها میتونند keywords ها باشند مثل : val، if، while و یا شناسه ها باشن مثل متغییر ها و نام توابع , یا موارد دیگر مثل عملگرها , نماد ها و ...بیشتر در ویکی پدیامرحله دوم: Syntax Analysis (Parsing)بعد از اینکه کامپایلر توکن هارو شناسایی کرد وارد این مرحله میشه که سینتکس ها و ساختار کد هارو چک میکنه و مطمئن میشه شما از قوانین کاتلین پیروی میکنید و تمامی توکن ها به درستی مرتب شده اند و در اخر یک سلسله مراتبی به اسم parse tree میسازهبیشتر در ویکی‌پدیامرحله سوم: Semantic Analysisدر این مرحله کامپایلر از parse tree استفاده میکنه و درون این tree , نحوه استفاده متغییر ها , فراخوانی تابع ها و دیگر قوانین زبان کاتلین رو بررسی میکنه تا از نظر منطقی درست باشند و به اصطلاح کدی معنا دار داشته باشیدبیشتر در گیگز فور گیگمرحله چهارم: Intermediate Representation (IR)نمایش میانی (IR) یک مرحله میانی بین کد تجزیه شده و بایت کد تولید شده نهایی است. این به عنوان یک نمایش ساده و ساختار یافته از کد شما عمل می کنه که تجزیه و تحلیل، بهینه سازی و تبدیل برای کامپایلر آسان تر است.&lt;br/&gt;بیشتر در ویکی‌پدیامرحله پنجم: Optimizationکامپایلر تکنیک های مختلف بهینه سازی را برای کد IR تولید شده اعمال می کند. هدف بهینه سازی بهبود عملکرد، کارایی و اندازه کد کامپایل شده است. ساختار کد را تجزیه و تحلیل می کند و تغییراتی را برای اجرای سریعتر، استفاده از حافظه کمتر یا بهینه سازی عملیات خاص اعمال می کند.بیشتر در ویکی‌پدیامرحله ششم: Bytecode Generationاگر همه چیز درست بود و هیچ مشکلی وجود نداشت کامپایلر کدهارو به فرمت خاصی به اسم بایت کد ( Byte Code ) تبدیل میکنه , بایت کد یک لول سطح پایین تر از کد های شماست که برای کامپیوتر قابل درک هست و میتونه اجرا کنه.بیشتر در ویکی‌پدیااین داستان ما ادامه داره و سعی میکنم از کوچیک ترین مسائل هم به سادگی نگذرم و همه چیو بررسی کنم جدا از این که به شما کمک کوچیکی میشه , برای یادگیری خودم خیلی موثر تر هست که بخوام بنویسم و آموزش بشدم میتونید در توییتر با من در ارتباط باشید : BinaryBeastt مطمئن باشید هر کمکی از دستم بر بیاد انجام میدم :)