Behnam Nasehi | بهنام ناصحی
Behnam Nasehi | بهنام ناصحی
خواندن ۶ دقیقه·۲ سال پیش

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

What is Kotlin ? کاتلین چیست
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) یک مرحله میانی بین کد تجزیه شده و بایت کد تولید شده نهایی است. این به عنوان یک نمایش ساده و ساختار یافته از کد شما عمل می کنه که تجزیه و تحلیل، بهینه سازی و تبدیل برای کامپایلر آسان تر است.<br/>بیشتر در ویکی‌پدیا

مرحله پنجم: Optimization

کامپایلر تکنیک های مختلف بهینه سازی را برای کد IR تولید شده اعمال می کند. هدف بهینه سازی بهبود عملکرد، کارایی و اندازه کد کامپایل شده است. ساختار کد را تجزیه و تحلیل می کند و تغییراتی را برای اجرای سریعتر، استفاده از حافظه کمتر یا بهینه سازی عملیات خاص اعمال می کند.
بیشتر در ویکی‌پدیا

مرحله ششم: Bytecode Generation

اگر همه چیز درست بود و هیچ مشکلی وجود نداشت کامپایلر کدهارو به فرمت خاصی به اسم بایت کد ( Byte Code ) تبدیل میکنه , بایت کد یک لول سطح پایین تر از کد های شماست که برای کامپیوتر قابل درک هست و میتونه اجرا کنه.
بیشتر در ویکی‌پدیا



این داستان ما ادامه داره و سعی میکنم از کوچیک ترین مسائل هم به سادگی نگذرم و همه چیو بررسی کنم جدا از این که به شما کمک کوچیکی میشه , برای یادگیری خودم خیلی موثر تر هست که بخوام بنویسم و آموزش بشدم
میتونید در توییتر با من در ارتباط باشید : BinaryBeastt

مطمئن باشید هر کمکی از دستم بر بیاد انجام میدم :)

کاتلینkotlinandroidprogrammingبرنامه نویسی
Android Application Developer https://behnamnasehi.ir
شاید از این پست‌ها خوشتان بیاید