کاتلین یک زبان نسبتاً جدید برنامه‌نویسی است که از سوی JetBrains برای اپلیکیشن‌های مدرن چندپلتفرمی توسعه یافته است. امروزه کاتلین کاربرد گسترده‌ای برای توسعه اندروید دارد و جایگزین جاوا شده است. دلیل این امر آن است که زبان کاتلین امن و منسجم است و خواندن و نوشتن کد کاتلین آسان است. در این مقاله جامع به صورت تفصیلی به آموزش کاتلین خواهیم پرداخت.

فهرست مطالب این نوشته پنهان کردن

ویژگی‌های زبان برنامه‌نویسی کاتلین

زبان کاتلین تحت لایسنس آپاچی نسخه 2.0 توزیع یافته است. کامپایلر این زبان، پلاگین IntelliJ IDEA و همچنین بهینه‌سازی‌های صورت گرفته روی کتابخانه‌های ابتدایی جاوا و ابزارهای Build همگی متن-باز هستند.

کاتلین جایگزین جاوا و اندروید می‌شود: زبان برنامه‌نویسی کاتلین 100% امکان جایگزینی جاوا و اندروید را دارد. این بدان معنی است که همه کد‌های کنونی جاوا/اندروید شما می‌توانند به صورت کامل به زبان کاتلین نوشته شوند.

منسجم و گویا است: بر اساس برخی تخمین‌های اولیه، کدنویسی با کاتلین موجب می‌شود که تا حدود 40% از حجم کد در قیاس با زبان جاوا کاسته شود. معنی گویا بودن کاتلین هم این است که نوشتن کد به این زبان، به طوری که هم انسان و هم کامپایلر، آن را به سهولت درک کنند، کار آسانی است.

یادگیری کاتلین آسان است: اگر از قبل با زبان‌های برنامه‌نویسی دیگر مانند جاوا، اسکالا، گرووی، سی شارپ، جاوا اسکریپت و Gosu آشنا باشید، یادگیری کاتلین برای شما آسان خواهد بود.

کاتلین ابزارهای فروانی دارد: کاتلین از سوی JetBrains توسعه یافته است. این شرکت به خاطر توسعه ابزارهای برنامه‌نویسی برای افراد حرفه‌ای مشهور است. از این رو عجیب نیست که ابزارهای فراوانی برای زبان کاتلین عرضه شده است.

کاتلین امن است: کاتلین یک زبان نوع‌بندی استاتیک است. از این رو بررسی نوع در زمان کامپایل و نه زمان اجرا انجام می‌گیرد و باگ‌های ساده در همین مرحله به دام می‌افتند.

زبان برنامه‌نویسی کاتلین می‌تواند روی ماشین مجازی جاوا (JVM) اجرا شود. این زبان ترکیبی از پارادایم‌های برنامه‌نویسی شیءگرا و تابعی را در یک پلتفرم نامحدود، خودکفا و متمایز ترکیب کرده است.

تاریخچه زبان برنامه نویسی کاتلین

  • در سال 2016 نخستین نسخه کاتلین یعنی Kotlin v1.0 عرضه شد. در سال 2017 گوگل اعلام کرد که در زمینه اندروید پشتیبانی دست اولی از زبان کاتلین به عمل می‌آورد.
  • در سال 2018 کاتلین نسخه 1.2 به همراه امکان توزیع کد بین JVM و جاوا اسکریپت عرضه شد.
  • در سال 2019 گوگل اعلام کرد که کاتلین زبان برنامه‌نویسی ترجیحی این شرکت برای توسعه اپلیکیشن‌های اندرویدی محسوب می‌شود.

تنظیم محیط توسعه کاتلین

در این بخش مراحل راه‌اندازی محیط کاری را با نصب کاتلین توضیح می‌دهیم.

نصب جاوا

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

نصب IDE-های جاوا

خوشبختانه IDE-های متعددی برای جاوا وجود دارند. به منظور توسعه کد کاتلین می‌توانید از یکی از IDE-های Eclipse ،NetBeans یا IntelliJ IDEA استفاده کنید. ما در این راهنما از ایکلیپس استفاده می‌کنیم.

نصب کاتلین

برای نصب ایکلیپس در کاتلین باید به بخش Help ایکلیپس بروید و روی گزینه Eclipse Marketplace کلیک کنید.

آموزش کاتلین

اکنون کلیدواژه Kotlin را در کار جستجو وارد کنید. با کلیک روی کلمه Go لیستی از پلاگین‌ها نمایان می‌شود. در این بخش باید یک پلاگین برای کاتلین ببینید. با کلیک روی این لینک، پلاگین کاتلین برای ایکلیپس را نصب کنید.

آموزش کاتلین

IDE ایکلیپس را ری‌استارت کنید، زمانی که نصب کامل شد، می‌توانید یک آیکون میانبر در گوشه راست-بالای IDE ایکلیپس ببینید. این یک روش دسترسی سریع است.

آموزش کاتلین

روش دیگر برای دسترسی به کاتلین در IDE ایکلیپس این است که به منوی Windows> Perspectives>Open Perspectives بروید و گزینه Others را انتخاب کنید. در این بخش می‌توانید فهرستی از پلاگین‌های نصب شده اخیر را مانند تصویر زیر ببینید:

آموزش کاتلین

زمانی که نصب کاتلین پایان یافت، می‌توانیم نخستین برنامه کاتلین خود را بنویسیم.

نوشتن نخستین برنامه کاتلین

کار خود را با نخستین پروژه کاتلین آغاز می‌کنیم. به این منظور از منوی File گزینه New را انتخاب کرده و سپس با انتخاب Others یک پروژه کاتلین از فهرست ارائه شده ایجاد کنید.

آموزش کاتلین

اینک باید یک نام برای پروژه وارد کنید تا بتوانید شروع به کدنویسی کاتلین بکنید.

آموزش کاتلین

چنان که دیدید، با طی این مراحل ساده و دانلود نصب ایکلیپس و پلاگین کاتلین روی سیستم می‌توانید اقدام به برنامه‌نویسی کاتلین بکنید.

برنامه Hello, World

برنامه «!Hello, World» به یک برنامه ساده گفت می‌شود که خروجی !Hello, World را روی صفحه نمایش می‌دهد. از آنجا که این یک برنامه ساده است، غالباً برای معرفی یک زبان جدید برنامه‌نویسی مورد استفاده قرار می‌گیرد. در این بخش با نوشتن یک برنامه !Hello, World با ساختار و چارچوب زبان کاتلین آشنا می‌شویم:

زمانی که برنامه فوق را اجرا کنید، خروجی زیر را مشاهده می‌کنید:

طرز کار برنامه !Hello, World با زبان برنامه‌نویسی کاتلین چگونه است؟

کد موجود در خط نخست این برنامه به صورت زیر است:

در زبان کاتلین هر خطی که با دو علامت پشت سرهم ممیز (//) آغاز شود، به معنی توضیح یا کامنت است. این کامنت‌ها از سوی کامپایلر نادیده گرفته می‌شوند. هدف از نوشتن کامنت درک بهتر برنامه‌نویس‌ها از کد است و بدین ترتیب مقصود و کارکرد برنامه تشریح می‌شود.

خط دوم برنامه ما به این صورت است:

این تابع اصلی (main) برنامه است که وجود آن در هر اپلیکیشن کاتلین ضروری است. کامپایلر کاتلین اجرای کد را از تابع main آغاز می‌کند.

این تابع یک آرایه از رشته‌ها به عنوان پارامتر می‌گیرد و یک Unit بازگشت می‌دهد. در مورد تابع‌ها و پارامتر‌های آن در کاتلین در بخش‌های بعدی بیشتر توضیح خواهیم داد.

فعلاً به خاطر داشته باشید که تابع main یک تابع الزامی است که نقطه ورودی هر برنامه کاتلین محسوب می‌شود. امضای تابع main به صورت زیر است:

خط سوم برنامه به صورت زیر است:

تابع ()println پیام مورد نظر را درون علامت گیومه پرینت کرده و یک کاراکتر newline به استریم خروجی استاندارد اضافه می‌کند. در این برنامه عبارت !Hello, World و یک خط جدید در خروجی چاپ می‌شود.

مقایسه با برنامه Hello, World در جاوا

چنان که قبلاً اشاره کردیم، کاتلین به صورت 100% قابلیت جایگزین کردن جاوا را دارد. معادل برنامه Hello, World در زبان جاوا به صورت زیر است:

چند نکته مهم

در کاتلین برخلاف جاوا، الزامی به ساخت کلاس در همه برنامه‌ها وجود ندارد. دلیل این امر آن است که کامپایلر کاتلین یک کلاس برای ما ایجاد می‌کند.

اگر از IntelliJ IDEA استفاده می‌کنید، با مراجعه به منوی Run > Edit Configurations می‌توانید این کلاس را ببینید. اگر نام فایل کاتلین به صورت HelloWorld.kt باشد، کامپایلر کلاس HelloWorldKt را برای شما ایجاد می‌کند.

آموزش کاتلین

تابع ()println به صورت داخلی ()System.out.println را فراخوانی می‌کند.

اگر از IntelliJ IDEA استفاده می‌کنید، کرسر ماوس خود را در کنار عبارت println قرار دهید و به منوی Navigate > Declaration بروید. همچنین می‌توانید کلیدهای ترکیبی Ctrl+B (در مک: Cmd+B) را بزنید. به این ترتیب فایل اعلان Console.kt باز می‌شود. در این فایل می‌توان دید که تابع ()println به صورت داخلی ()System.out.println را فراخوانی‌ می‌کند.

آموزش کاتلین

متغیرهای کاتلین و انواع ابتدایی

چنان که می‌دانید، متغیر در یک برنامه به مکانی از حافظه گفته می‌شود که داده‌ها را در خود نگهداری می‌کند. برای مشخص ساختن این ناحیه ذخیره‌سازی، هر متغیر باید یک نام یکتا (شناسه) داشته باشد.

شیوه اعلان متغیر در کاتلین

برای اعلان یک متغیر در کاتلین می‌توان از کلیدواژه var یا val استفاده کرد. به مثال زیر توجه کنید:

اختلاف بین var و val در ادامه این بخش توضیح داده شده است. فعلاً روی شیوه اعلان متغیر تمرکز می‌کنیم. در کد فوق language یک متغیر از نوع String و Score نیز متغیری با نوع Int است. در کاتلین لزومی به اعلام صریح نوع متغیر وجود ندارد و این زبان خودش ‌می‌تواند نوع متغیر را برای شما مشخص بکند. کامپایلر خودش تشخیص می‌دهد که “French” یک رشته (String) و 95 یک عدد صحیح (Int) است. این قابلیت در زبان‌های برنامه‌نویسی به نام «استنباط نوع» (type inference) شناخته می‌شود.

با این حال، در صورت تمایل می‌توانید نوع یک متغیر را به صورت صریح نیز تعیین کنید:

ما در مثال فوق متغیر را هم‌زمان با اعلان، مقداردهی نیز کرده‌ایم. با این حال، این کار لزومی ندارد. شما می‌توانید یک متغیر را در یک گزاره اعلان و نوع آن را مشخص کنید و سپس در گزاره دیگری در ادامه برنامه آن را مقداردهی نمایید:

اما مثال زیر موجب بروز خطا می‌شود:

در مثال فوق، نوع متغیر language به صورت صریحی مشخص نشده است. همچنین متغیر نیز درون گزاره اعلان، مقداردهی نشده است.

در مثال فوق نیز تلاش کرده‌ایم که مقدار 14 (عدد صحیح) را به متغیری از نوع متفاوت (String) نسبت دهیم که موجب بروز خطا شده است.

تفاوت بین var و val

  • Val (ارجاع تغییرناپذیر) – متغیری که با استفاده از کلیدواژه val اعلان شود، پس از این که مقداری به آن انتساب یافت، دیگر نمی‌تواند تغییر داده شود. این وضعیت شبیه متغیر final در جاوا است.
  • Var (ارجاع تغییرپذیر) – متغیری که با کلیدواژه var اعلان شود، می‌تواند در ادامه برنامه مقدار متفاوتی بگیرد. این کلیدواژه معادل متغیرهای معمولی جاوا است.

به مثال‌های زیر توجه کنید:

در مثال فوق متغیر language پس از مقدار‌دهی اولیه، در ادامه مقدار German را گرفته است. از آنجا که این متغیر با استفاده از کلیدواژه var اعلان یافته است، این کد به درستی کار می‌کند.

در مثال فوق با خطا مواجه می‌شویم زیرا امکان مقداردهی مجدد به متغیر تعریف شده با کلیدواژه val وجود ندارد. اکنون که با مفهوم متغیرهای کاتلین آشنا شدید، نوبت آن رسیده است که با مقادیر مختلفی که یک متغیر کاتلین می‌تواند بگیرد نیز آشنا شوید.

انواع ابتدایی کاتلین

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

در مثال فوق، کامپایلر پیش از کامپایل کردن کد می‌داند که language دارای نوع Int است و marks از نوع Double است.

انواع داخلی داده‌ها در زبان کاتلین به صورت زیر دسته‌بندی می‌شوند:

  • اعداد
  • کاراکترها
  • مقادیر بولی
  • آرایه‌ها

نوع عددی

اعداد در کاتلین انواعی مشابه زبان جاوا دارند. شش نوع داده داخلی در کاتلین وجود دارد که اعداد را نمایش می‌دهند:

  • Byte
  • Short
  • Int
  • Long
  • Float
  • Double

نوع Byte

نوع داده byte مقادیری درباره 128- تا 127 می‌گیرد. این نوع معادل عدد صحیح مکمل دوی هشت بیتی علامت‌دار است. از این نوع داده در مواردی که عدد در بازه 128 -تا 127 قرار می‌گیرد، به جای نوع Int یا دیگر انواع داده صحیح برای صرفه‌جویی در مصرف حافظه استفاده می‌شود.

مثال

زمانی که برنامه فوق اجرا شود، خروجی زیر چاپ می‌شود:

نوع Short

نوع داده Short می‌تواند مقادیری بین 32678- تا 32677 داشته باشد که معادل عدد صحیح مکمل دوی 16 بیتی علامت‌دار است. در صورتی که مطمئن هستید مقدار یک متغیر در بازه [32767, 32768-] قرار دارد، می‌توانید از این نوع داده به جای انواع داده دیگر استفاده کنید.

مثال

زمانی که برنامه را اجرا کنید، خروجی زیر تولید می‌شود:

نوع Int

نوع داده Int مقادیری بین $$-2^{31}$$ تا $$2^{31}-1$$ می‌گیرد که معادل عدد صحیح مکمل دوی 2 بیتی علامت‌دار است.

مثال

زمانی که برنامه را اجرا کنید، خروجی به صورت زیر خواهد بود:

اگر یک عدد صحیحی را بدون انتساب صریح نوع، بین $$-2^{31}$$ تا $$2^{31}-1$$ به یک متغیر انتساب دهید، این متغیر از نوع Int خواهد بود. به مثال زیر توجه کنید:

اگر از IntelliJ IDEA استفاده می‌کنید، می‌توانید کرسر را روی متغیر قرار داده و با فشردن کلیدهای ترکیبی Ctrl+Shift+P نوع آن را ببینید.

آموزش کاتلین

نوع Long

نوع داده Long مقادیری بین $$-2^{63}$$ تا $$2^{63}-1$$ می‌گیرد که معادل عدد صحیح مکمل دوی 63 بیتی علامت‌دار است.

مثال

fun main(args: Array<String>)

زمانی که برنامه فوق را اجرا کنید، با خروجی زیر مواجه می‌شوید:

اگر بدون تعیین صریح نوع یک متغیر مقداری بزرگ‌تر از $$-2^{31}$$ تا $$2^{31}-1$$ به یک متغیر بدهید، این متغیر به صورت خودکار به نوع Long تبدیل می‌شود. به مثال زیر توجه کنید:

به طور مشابه می‌توانید از حرف بزرگ L به صورت زیر برای تعیین نوع یک متغیر به صورت Long استفاده کنید:

نوع Double

نوع داده Double دارای دقت دو برابر اعشار 64 بیتی است.

مثال

زمانی که این برنامه را اجرا کنید، خروجی زیر تولید می‌شود:

نوع Float

نوع داده Float یک عدد اعشاری 32 بیتی با دقت منفرد است.

مثال

خروجی برنامه فوق به صورت زیر است:

توجه کنید که ما به جای 19.5‌ مقدار 19.5F را در برنامه فوق داریم. دلیل این امر آن است که 19.5 یک مقدار لفظی Double است و نمی‌توان مقدار Double را به متغیر Float انتساب داد. برای این که به کامپایلر اعلام کنیم با عدد 19.5 به صورت Float برخورد کند، باید از حرف بزرگ F در انتهای آن استفاده کنیم.

اگر مطمئن نیستید یک متغیر در برنامه چه نوع عددی دریافت خواهد کرد، می‌توانید از نوع Number استفاده کنید. این نوع داده امکان انتساب هر دو نوع اعداد صحیح و اعشاری را به متغیر می‌دهد. به مثال زیر توجه کنید:

خروجی برنامه فوق به صورت زیر است:

نوع Char

برای نمایش یک کاراکتر در کاتلین از نوع داده Char استفاده می‌کنیم. برخلاف جاوا نوع داده Char در کاتلین می‌تواند به صورت عدد نیز استفاده شود.

خروجی برنامه فوق به صورت زیر است:

در جاوا می‌توان مانند زیر عمل کرد:

با این حال کد زیر در کاتلین موجب تولید خطا می‌شود:

نوع Boolean

نوع داده Boolean دو مقدار به صورت True و False می‌تواند بگیرد.

مثال

مقادیر بولی در گزاره‌های تصمیم‌گیری استفاده می‌شوند.

آرایه‌های کاتلین

یک آرایه در کاتلین داده‌ها (مقادیر) از یک نوع نگه‌داری می‌کند. برای نمونه می‌توانید یک آرایه ایجاد کنید که 100 مقدار از نوع Int را در خود ذخیره کند. آرایه‌ها در کاتلین به وسیله کلاس Array نمایش می‌یابند. این کلاس دارای تابع‌های get و set، مشخصه size و چند تابع عضو مفید دیگر است.

رشته‌های کاتلین

رشته‌ها در کاتلین به وسیله کلاس String نمایش می‌یابند. لفظ‌های رشته‌ای مانند “this is a string” به وسیله یک وهله از این کلاس پیاده‌سازی می‌شوند.

عملگرهای کاتلین

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

عملگرهای حسابی در کاتلین

فهرست عملگرهای حسابی و کارکرد آن‌ها در کاتلین به شرح زیر است:

عملگر توضیح
+ جمع (برای الحاق دو رشته نیز استفاده می‌شود.)
عملگر تفریق
* عملگر ضرب
/ عملگر تقسیم
% عملگر باقیمانده

مثال عملگرهای حسابی در کاتلین

خروجی برنامه فوق چنین است:
عملگر + برای الحاق مقادیر string استفاده می‌شود.

مثالی از الحاق رشته‌ها

خروجی برنامه فوق به صورت زیر است:

طرز کار عملگرهای حسابی چگونه است؟

فرض کنید از عملگر + برای جمع زدن دو عدد a و b استفاده می‌کنیم. در پشت صحنه a + b تابع عضو a.plus(b) را فراخوانی می‌کند. عملگر plus طوری overload شده که با مقادیر String و دیگر انواع داده مقدماتی (به جز Char و Boolean) نیز کار کند.

همچنین می‌توانید از عملگر + و از طریق overload کردن تابع ()plus برای کار با انواع تعریف شده از سوی کاربر (مانند شیءها) استفاده کنید. در جدول زیر عملگرهای حسابی و تابع‌های متناظر آن‌ها ارائه شده است:

عبارت نام تابع ترجمه
a + b plus a.plus(b)
a – b minus a.minus(b)
a * b times a.times(b)
a / b div a.div(b)
a % b mod a.mod(b)

عملگرهای انتساب

عملگرهای انتساب برای نسبت دادن یک مقدار به متغیر استفاده می‌شوند. ما قبلاً نمونه‌ای از کاربرد عملگر انتساب ساده (=) را دیده‌ایم.

در مقال فوق مقدار 5 با استفاده از عملگر = به متغیر age انتساب می‌یابد. در ادامه فهرستی از همه عملگرهای انتساب و تابع‌های متناظر آن‌ها را می‌بینید:

عبارت معادل ترجمه
a +=b a = a + b a.plusAssign(b)
a -= b a = a – b a.minusAssign(b)
a *= b a = a * b a.timesAssign(b)
a /= b a = a / b a.divAssign(b)
a %= b a = a % b a.modAssign(b)

مثالی از عملگر‌های انتساب

با اجرای کد فوق خروجی زیر به دست می‌آید:

عملگرهای پیشوند یکانی (Unary prefix) و افزایش/کاهش در کاتلین

در این بخش فهرستی از عملگرهای یکانی، معنای آن‌ها و تابع‌های معادلشان ارائه شده است:

عملگر معنا عبارت ترجمه
+ جمع یکانی +a ()a.unaryPlus
منهای یکانی ( معکوس‌سازی علامت) -a ()a.unaryMinus
! نه (معکوس مقدار) !a ()a.not
++ افزایش به مقدار 1 واحد ++a ()a.inc
کاهش به مقدار 1 واحد –a ()a.dec

مثالی از عملگرهای یکانی

کد فوق خروجی زیر را تولید می‌کند:

عملگرهای مقایسه و برابری

در ادامه جدولی از عملگرهای برابری و مقایسه‌ای را به همراه معنا و تابع‌های متناظرشان می‌بینید:

عملگر معنا عبارت ترجمه
> بزرگ‌تر از a > b a.compareTo(b) > 0
< کوچک‌تر از a < b a.compareTo(b) < 0
>= بزرگ‌تر مساوی a >= b a.compareTo(b) >= 0
<= کوچک‌تر مساوی a < = b a.compareTo(b) <= 0
== برابر است با a == b a?.equals(b) ?: (b === null)
!= برابر نیست با a != b !(a?.equals(b) ?: (b === null))

عملگرهای مقایسه و برابری در گردش کنترل از قبیل عبارت if، عبارت when و حلقه‌ها مورد استفاده قرار می‌گیرند.

مثالی از عملگرهای مقایسه‌ای و برابری

خروجی اجرای کد فوق به صورت زیر است:

عملگرهای منطقی

دو عملگر منطقی به صورت || و && در کاتلین وجود دارند. در ادامه جدولی از عملگرهای منطقی، معنا و تابع‌های متناظر آن‌ها را مشاهده می‌کنید:

عملگر توصیف عبارت تابع متناظر
|| در صورت true بودن هر یک از اجزا، true خواهد بود. (a>b)||(a<c) (a>b)or(a<c
&& در صورت true بودن همه عبارت‌ها مقدار true خواهد بود. (a>b)&&(a<c) (a>b)and(a<c)

توجه کنید که or و and تابع‌هایی هستند که از نمادگذاری میانوندی (infix notation) پشتیبانی می‌کنند. عملگرهای منطقی در گردش کنترل در عبارت‌هایی مانند if و when و همچنین حلقه‌ها کاربرد دارند.

مثالی از عملگرهای منطقی

خروجی اجرای کد فوق به صورت زیر است:

عملگر in

عملگر in برای بررسی این که یک شیء به یک مجموعه تعلق دارد یا نه، استفاده می‌شود.

عملگر عبارت ترجمه
in a in b b.contains(a)
in! a !in b b.contains(a)!

مثالی از عملگر in

نتیجه اجرای کد فوق به صورت زیر است:

عملگر دسترسی اندیس

در این بخش برخی عبارت‌ها که در عملگر دسترسی اندیس استفاده می‌شوند، به همراه تابع متناظرشان در کاتلین معرفی شده‌اند.

عبارت ترجمه
a[i] a.get(i)
a[i, n] a.get(i, n)
a[i1, i2, …, in] a.get(i1, i2, …, in)
a[i] = b a.set(i, b)
a[i, n] = b a.set(i, n, b)
a[i1, i2, …, in] = b a.set(i1, i2, …, in, b)

مثالی از عملگر دسترسی اندیس

با اجرای کد فوق نتیجه زیر حاصل می‌شود:

عملگر invoke

در این بخش برخی عبارت‌ها با استفاده از عملگر invoke و تابع‌های متناظر آن‌ها در کاتلین ارائه شده‌اند.

عبارت ترجمه
a() a.invoke()
a(i) a.invoke(i)
a(i1, i2, …, in) a.inkove(i1, i2, …, in)
a[i] = b a.set(i, b)
a[i, n] = b a.set(i, b)

در کاتلین پرانتزها به فراخوانی تابع عضو invoke ترجمه می‌شوند.

عملگرهای بیتی

برخلاف جاوا، در کاتلین هیچ عملگر بیتی و شیفت بیتی وجود ندارد. با این حال، برای اجرای این وظایف، تابع‌های مختلفی (با پشتیبانی از نمادگذاری میانوندی) مورد استفاده قرار می‌گیرند.

  • shl – شیفت چپ علامت‌دار
  • shr – شیفت راست علامت‌دار
  • ushr – شیفت راست بی‌علامت
  • and – و بیتی
  • or – یای بیتی
  • xor – xor بیتی
  • Inv – معکوس بیتی

همچنین در کاتلین هیچ عملگر سه‌تایی برخلاف جاوا وجود ندارد.

تبدیل نوع در کاتلین

در این بخش از مقاله آموزش کاتلین به بررسی تبدیل نوع و مثال‌های آن می‌پردازیم. در کاتلین، یک مقدار عددی از یک نوع، حتی در صورتی که نوع دیگر بزرگ‌تر باشد، به صورت خودکار به نوع دیگری تبدیل نمی‌شود. از این نظر کاتلین طرز کار متفاوتی نسبت به شیوه مدیریت تبدیل عددی در جاوا دارد. برای مثال در جاوا به صورت زیر عمل می‌کنیم:

در مثال فوق، مقدار number1 از نوع int به صورت خودکار به نوع long تبدیل می‌شود و به متغیر number2 انتساب می‌یابد.

از سوی دیگر در کاتلین به صورت زیر عمل می‌کنیم:

حتی با این که اندازه Long بزرگ‌تر از Int است، کاتلین به صورت خودکار Int را به Long تبدیل نمی‌کند. بلکه باید از به صورت صریح از متد ()toLong استفاده کنیم تا نوع متغیر را به Long تبدیل کنیم. کاتلین از این کار برای جلوگیری از شگفت‌زده کردن کاربر امتناع می‌کند.

در این بخش فهرستی از تابع‌های کاتلین را می‌بینید که برای تبدیل نوع استفاده می‌شوند:

  • toByte()
  • toShort()
  • toInt()
  • toLong()
  • toFloat()
  • toDouble()
  • toChar()

توجه کنید که تابعی برای تبدیل انواع Boolean وجود ندارد.

تبدیل از نوع بزرگ‌تر به نوع کوچک‌تر

تابع‌های مورد اشاره فوق را می‌توان در هر دو جهت یعنی تبدیل از نوع کوچک به بزرگ و برعکس، مورد استفاده قرار داد. با این حال تبدیل از نوع‌های بزرگ‌تر به انواع کوچک‌تر ممکن است باعث تعدیل یک مقدار شود. به مثال زیر توجه کنید:

خروجی اجرای کد فوق به صورت زیر است:

عبارت‌ها، گزاره‌ها و بلوک‌های کاتلین

در این بخش از مقاله آموزش کاتلین در مورد عبارت‌ها و گزاره‌های کاتلین توضیح می‌دهیم و تفاوت بین این دو را با هم و با بلوک‌های کاتلین مقایسه می‌کنیم.

عبارت‌های کاتلین

«عبارت» (Expression‌) شامل متغیر، عملگر و هر چیزی است که یک مقدار منفرد را ارزیابی می‌کند. به مثال زیر توجه کنید:

در کد فوق، 90 + 25 یک عبارت است که مقدار int بازگشت می‌دهد. توجه کنید که در کاتلین if برخلاف جاوا یک عبارت است. در جاوا if یک گزاره محسوب می‌شود.

در مثال فوق if (a > b) a else b یک عبارت است. مقدار این عبارت به متغیر max انتساب می‌یابد.

گزاره‌های کاتلین

«گزاره» (Statement) به هر چیزی گفته می‌شود که یک واحد ترکیبی اجرایی را تشکیل می‌دهد. به مثال زیر توجه کنید:

در کد فوق 90+25 یک عبارت است که مقدار 115 بازگشت می‌دهد، اما ;val score = 9*5 یک گزاره است. عبارت‌ها بخشی از گزاره‌ها هستند. در ادامه برخی مثال‌ها در این خصوص ارائه شده‌اند:

بلوک‌های کاتلین

در کاتلین، بلوک به گروهی از گزاره‌ها گفته می‌شود که درون آکولاد {} قرار می‌گیرند. به مثال زیر توجه کنید:

در کد فوق دو گزاره print(“Hey “) و print(” jude!”) درون بلوک if قرار دارند.

به طور مشابه تابع ()main نیز یک بدنه بلوک دارد.

کامنت‌ها در کاتلین

در این بخش از مقاله آموزش کاتلین به بررسی روش درج توضیح یا کامنت در کاتلین می‌پردازیم و علت استفاده از آن را شرح می‌دهیم.

کامنت‌ها بخشی از برنامه هستند که به منظور درک بهتر کد چه برای خود برنامه‌نویس و چه افراد دیگری که کد را می‌خوانند مورد استفاده قرار می‌گیرند. کامنت‌ها از سوی کامپایلر کاتلین به طور کامل نادیده گرفته می‌شوند. همانند جاوا دو روش برای درج کامنت در کاتلین وجود دارد:

  • /* … */
  • // ….

روش سنتی درج کامنت

برای درج کامنت‌های چندخطی که در خطوط مختلفی نوشته می‌شوند، باید از نمادهای /* … */ استفاده کنید. کامپایلر کاتلین هر چیزی را که بین /* و */ قرار داشته باشد، نادیده می‌گیرد. به مثال زیر توجه کنید:

از روش سنتی درج کامنت با کمی تغییر برای مستندسازی کد کاتلین (KDoc) نیز استفاده می‌شود. کامنت‌های KDoc با /** آغاز یافته و با/** خاتمه می‌یابند.

کامنت ته خط

برای درج کامنت در انتهای یک خط از برنامه باید از کاراکترهای // استفاده کنید. کامپایلر کاتلین این کاراکترهای // و هر چه پس از آن می‌ْآید را نادیده می‌گیرد. به مثال زیر توجه کنید:

برنامه فوق شامل دو کامنت ته خط است:

و

استفاده از کامنت‌ها به روش صحیح

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

برخی نیز بر این باورند که کد باید خود-گویا باید و می‌بایست از کامنت‌ها به ندرت استفاده کنیم. با این حال، دیدگاه عمومی با این نظر مخالف است. استفاده از کامنت در کد برای توضیح الگوریتم‌های پیچیده، regex یا تبیین سناریوهایی که از یک تکنیک به جای تکنیک‌های دیگر برای حل مسئله استفاده کنیم، هیچ اشکالی ندارد. در اغلب موارد باید از کامنت‌ها به منظور توضیح چرایی و نه چگونگی کد استفاده کنیم.

ورودی/خروجی ابتدایی کاتلین

در این بخش از مقاله آموزش کاتلین به بررسی روش نمایش خروجی روی صفحه و همچنین دریافت ورودی‌های از کاربر در این زبان برنامه‌نویسی خواهیم پرداخت.

خروجی کاتلین

امکان استفاده از تابع‌های ()println و ()print برای ارسال خروجی به خروجی استاندارد (صفحه نمایش) وجود دارد. به مثال زیر توجه کنید:

زمانی که این برنامه اجرا شود، خروجی به صورت زیر روی صفحه ظاهر می‌شود:

در این کد ()println رشته درون گیومه را در خروجی ارائه می‌کند.

تفاوت بین ()println و ()print

  • تابع ()print رشته درون گیومه را پرینت می‌کند.
  • تابع ()println رشته درون گیومه را مشابه تابع ()print پرینت می‌کند. سپس کرسر به ابتدای خط بعدی می‌رود.

زمانی که از تابع ()println استفاده می‌کنیم، تابع ()System.out.println به صورت داخلی فراخوانی می‌شود. این تابع به منظور نمایش خروجی روی صفحه در جاوا استفاده می‌شود.

اگر از IntelliJ IDEA استفاده می‌کنید کرسر ماوس را در کنار عبارت println قرار داده و به منوی Navigate > Declaration قرار دهید. همچنین می‌توانید کلیدهای ترکیبی Ctrl+B (در مک کلیدهای Cmd+B) را بزنید. به این ترتیب فایل اعلان به نام Console.kt باز می‌شود. در این فایل می‌توانید ببینید که تابع ()println به صورت داخلی ()System.out.println را فراخوانی می‌کند. به طور مشابه زمانی که از تابع ()print استفاده می‌کنید، تابع ()System.out.print را در جاوا فراخوانی می‌کند.

مثال اول: ()print و ()println

خروجی برنامه فوق به صورت زیر است:

مثال دوم: پرینت متغیرها و مقادیر لفظی

خروجی برنامه فوق نیز به صورت زیر است:

ورودی در کاتلین

در این بخش با بحث گرفتن ورودی‌های کاربر در زبان برنامه‌نویسی کاتلین آشنا خواهیم شد. برای خواندن یک خط از رشته ورودی در کاتلین باید از تابع ()readline استفاده کنیم.

مثال سوم: پرینت رشته وارد شده از سوی کاربر

خروجی برنامه فوق به صورت زیر است:
ما می‌توانیم ورودی یک کاربر را به صورت یک رشته با استفاده از تابع ()readLine بگیریم و آن را به صورت صریح به مقادیر نوع دیگر مانند Int تبدیل کنیم.

اگر می‌خواهید ورودی‌های کاربر را با انواع دیگری از داده بگیرید، می‌توانید از شیء scanner استفاده کنید. به این منظور باید کلاس scanhner را از کتابخانه استاندارد جاوا ایمپورت کنید:

سپس باید شیء Scanner را از این کلاس بسازید.

اکنون شیء reader می‌تواند برای دریافت ورودی از کاربر مورد استفاده قرار گیرد.

مثال چهارم: دریافت عدد صحیح ورودی از سوی کاربر

با اجرای برنامه فوق، خروجی زیر تولید می‌شود:
در این کد، شیء reader از کلاس Scanner ایجاد می‌شود. سپس متد ()nextInt فراخوانی می‌شود که یک ورودی صحیح از کاربر می‌گیرد و آن را در متغیر Integer ذخیره می‌کند.

برای دریافت ورودی‌های از نوع Long ،Float ،double و Boolean از کاربر می‌توانیم به ترتیب از متدهای ()nextLong() ،nextFloat() ،nextDouble و ()nextBoolean استفاده کنیم.

عبارت if در کاتلین

در این بخش از مقاله آموزش کاتلین به کمک برخی مثال‌ها به بررسی شیوه استفاده از عبارت if در کاتلین می‌پردازیم.

کاربرد سنتی if…else

ساختار if…else به صورت زیر است:

عبارت if در صورتی که مقدار testExpression به صورت true ارزیابی شود، بخش خاصی از کد را اجرا می‌کند. در صورتی یک بند اختیاری else وجود داشته باشد، کدهای درون بند else در صورتی اجرا می‌شوند که مقدار testExpression به صورت false ارزیابی شود.

مثالی از کاربرد سنتی if…else

خروجی اجرای کد فوق به صورت زیر است:

عبارت if در کاتلین

برخلاف جاوا و دیگر زبان‌های برنامه‌نویسی، عبارت if در کاتلین می‌تواند در یک عبارت و نه گزاره نیز مورد استفاده قرار گیرد. به مثال زیر توجه کنید:

مثالی از عبارت if در کاتلین

با اجرای کد فوق، خروجی زیر روی صفحه نمایش می‌یابد:
شاخه esle کد در صورت استفاده از if به صورت یک عبارت، ضروری خواهد بود. اگر بدنه if مانند مثال زیر، تنها یک گزاره داشته باشد، استفاده از آکولادها، اختیاری خواهد بود:
این رفتار مشابه عملگر سه‌تایی در جاوا است. از این رو در کاتلین هیچ عملگر سه‌تایی وجود ندارد.

مثالی از بلوک if با عبارت‌های چندگانه

اگر یک شاخه از بلوک if شامل بیش از یک عبارت باشد، آخرین عبارت به عنوان مقدار بلوک بازگشت می‌یابد.

خروجی کد فوق به صورت زیر است:

ساختار if..else..if در کاتلین

در کاتلین امکان بازگشت یک بلوک از کد در میان بلوک‌های متعدد به صورت زیر با استفاده از ساختار if..else…if وجود دارد.

مثالی از ساختار if..else…if

برنامه بررسی می‌کند که آیا Number یک عدد مثبت، یک عدد منفی یا صفر است.

عبارت if تودرتو در کاتلین

بک عبارت if را می‌توان درون بلوک یک عبارت if دیگر قرار دارد. این وضعیت به نام عبارت if تودرتو شناخته می‌شود.

مثالی از عبارت if تودرتو

برنامه زیر بزرگ‌ترین عدد را در میان سه عدد پیدا می‌کند.

خروجی کد فوق به صورت زیر است:

عبارت when در کاتلین

در این بخش از مقاله آموزش کاتلین با سازه when آشنا شده و برخی مثال‌های کاربردی آن را بررسی می‌کنیم.

سازه when در کاتلین

سازه when در کاتلین را می‌توان به عنوان جایگزینی برای گزاره switch در جاوا تصور کرد. این سازه بخشی از کد را در برابر جایگزین‌های متعدد ارزیابی می‌کند.

مثالی از یک عبارت ساده when

خروجی کد فوق مانند زیر است:
برنامه فوق یک رشته ورودی از کاربر می‌گیرد. فرض کنید کاربر مقدار * وارد می‌کند. در این حالت، عبارت a*b ارزیابی می‌شود و مقدار مورد نظر به یک متغیر به نام result انتساب می‌یابد.

اگر هیچ کدام از شاخه‌های شرطی برقرار نباشند، یعنی کاربر چیزی به جز +، -، * یا / وارد کرده باشد، در این صورت شاخه else ارزیابی می‌شود.

در مثال فوق باید when به عنوان یک عبارت استفاده کرده‌ایم. اما الزامی برای استفاده از when به صورت یک عبارت وجود ندارد. به مثال زیر توجه کنید:

خروجی کد فوق به صورت زیر است:

در این برنامه when یک عبارت نیست، چون مقدار بازگشتی آن به هیچ چیز انتساب نمی‌یابد. در این حالت، وجود شاخه else ضرورتی ندارد.

کاربردهای مختلف when در کاتلین

امکان ترکیب دو یا چند شرط با استفاده از کاما وجود دارد. به مثال زیر توجه کنید:

خروجی برنامه فوق به صورت زیر است:

با استفاده از when امکان بررسی وجود مقداری در یک بازه فراهم می‌شود. به مثال زیر توجه کنید:

خروجی کد فوق به صورت زیر است:

بررسی نوع یک مقدار

برای این که در زمان اجرا بررسی کنیم یک مقدار دارای نوع خاصی است یا نه، می‌توانیم از عملگرهای is و ‎!is استفاده کنیم. به مثال زیر توجه کنید:

استفاده از عبارت به عنوان یک شرط شاخه. به مثال زیر توجه کنید:

خروجی برنامه فوق به صورت زیر است:

حلقه while و do…while در کاتلین

حلقه‌ها در برنامه‌نویسی برای تکرار یک بلوک خاص از کد استفاده می‌شوند. در این بخش از مقاله آموزش کاتلین با شیوه ایجاد حلقه while و do…while در برنامه‌نویسی کاتلین آشنا خواهیم شد. حلقه‌ها در برنامه‌نویسی برای تکرار یک بلوک خاص از کد تا زمانی که شرط معینی برقرار شود، استفاده می‌شود.

حلقه‌ها آن چیزی هستند که رایانه‌ها را به ماشین‌های جذابی تبدیل می‌کنند. تصور کنید لازم است یک جمله را 50 بار روی صفحه پرینت کنید. این کار را می‌توان با 50 بار استفاده از گزاره پرینت انجام داد. اما در صورتی که قرار باشد یک گزاره یک میلیون بار پرینت شود، این راه‌حل دیگر به کار نمی‌آید. در این صورت باید از حلقه‌ها استفاده کرد.

در ادامه این مقاله با بررسی مثال‌هایی با دو نوع حلقه while و do…while در زبان کاتلین آشنا می‌شویم. اگر با حلقه‌های while و do…while در جاوا آشنا باشید، باید بدانید که عملکرد این حلقه‌ها در کاتلین نیز دقیقاً به همان ترتیب است.

حلقه while در کاتلین

ساختار حلقه while به صورت زیر است:

طرز کار حلقه while چگونه است؟

عبارت تست درون پرانتز یک عبارت بولی است. اگر عبارت تست به صورت true ارزیابی شود:

  • گزاره درون عبارت while اجرا می‌شود.
  • سپس عبارت تست دوباره ارزیابی می‌شود.

این فرایند تا زمانی که عبارت test به صورت false ارزیابی شود، تداوم می‌یابد. در این حالت حلقه while خاتمه می‌یابد.

فلوچارت حلقه While در کاتلین

آموزش کاتلین

مثالی از حلقه while در کاتلین

با اجرای برنامه فوق، خروجی زیر ایجاد می‌شود:
توجه کنید که گزاره i++ درون حلقه while قرار دارد. پس از 5 بار تکرار، متغیر i به مقدار 6 افزایش می‌یابد. در این زمان عبارت تست به صورت i<=5 به صورت false ارزیابی می‌شود و حلقه خاتمه می‌یابد. اگر بدنه حلقه تنها یک گزاره داشته باشد، لزومی به استفاده از آکولاد {} وجود ندارد.

مثالی از محاسبه مجموع اعداد طبیعی

خروجی برنامه فوق به صورت زیر است:

در برنامه فوق متغیر sum با مقدار 0 آغاز می‌شود و i در ابتدا دارای مقدار 100 است. در هر بار تکرارِ حلقه while، متغیر sum به مقدار sum+1 انتساب می‌یابد و مقدار به اندازه 1 واحد کاهش می‌یابد تا این که i باربر با 0 باشد. برای تصور بهتر به نمونه اجرای زیر توجه کنید:
در بخش عملگرهای مقایسه و منطقی این مقاله در خصوص عبارت‌های تست بیشتر توضیح داده‌ایم.

حلقه do…while در کاتلین

حلقه do…while در کاتلین شبیه حلقه while است و تنها یک تفاوت با آن دارد. بدنه حلقه do…while یک بار پیش از بررسی عبارت تست، اجرا می‌شود. ساختار آن به صورت زیر است:

طرز کار حلقه do…while چگونه است؟

کد درون بدنه سازه do یک بار و بدون بررسی عبارت تست (testExpression)‌ اجرا می‌شود. سپس عبارت تست بررسی می‌شود. اگر عبارت تست به صورت true ارزیابی شود، کدهای درون بدنه حلقه اجرا می‌شوند و عبارت تست دوباره ارزیابی می‌شود. این فرایند تا زمانی که عبارت تست به صورت false ارزیابی شود ادامه می‌یابد. زمانی که عبارت تست به صورت false ارزیابی شود، حلقه do..while خاتمه می‌یابد.

فلوچارت حلقه do..while

آموزش کاتلین

مثالی از حلقه do..while

برنامه زیر مجموع اعداد وارد شده از سوی کاربر را تا زمانی که کاربر عدد 0 را وارد کند، محاسبه می‌کند. برای دریافت ورودی کاربر از تابع ()readline استفاده شده است.

خروجی برنامه فوق به صورت زیر است:

حلقه for در کاتلین

در این بخش از مقاله آموزش کاتلین با حلقه for در این زبان برنامه‌نویسی آشنا خواهیم شد. حلقه for در کاتلین برای تکرار یک قطعه کد به تعداد مشخصی دفعه استفاده می‌شود.

برخلاف جاوا و دیگر زبان‌های رایج برنامه‌نویسی، هیچ حلقه for در کاتلین به طور سنتی وجود ندارد. بلکه در کاتلین حلقه for برای تکرار روی بازه‌ها، آرایه‌ها، map-ها و مواردی از این دست استفاده می‌شود. در واقع حلقه for روی هر چیزی که یک «تکرارکننده» (iterator) داشته باشد اجرا می‌شود. ساختار حلقه for در کاتلین به صورت زیر است:

مثالی از تکرار روی یک بازه

در کد فوق، حلقه for روی یک بازه تکرار می‌کند و همه آیتم‌های منفرد را پرینت می‌گیرد. خروجی برنامه فوق به صورت زیر است:

اگر بدنه حلقه مانند مثال فوق، شامل تنها یک گزاره باشد، لزومی به استفاده از آکولاد {} نیست.

امکان تکرار روی یک بازه با استفاده از حلقه for به این جهت فراهم آمده است که بازه‌ها یک «تکرارکننده» (iterator) ارائه می‌کنند. در خصوص تکرارکننده‌ها در ادامه این مقاله مطالب بیشتری ارائه شده است.

مثالی از روش‌های مختلف تکرار روی یک بازه

خروجی برنامه فوق به صورت زیر است:

تکرار روی یک آرایه

در این بخش مثالی از تکرار روی یک آرایه String را بررسی می‌کنیم:

خروجی کد فوق به صورت زیر است:

امکان تکرار روی یک آرایه با استفاده از اندیس وجود دارد. به مثال زیر توجه کنید:

خروجی برنامه فوق به صورت زیر است:

اگر می‌خواهید در این خصوص اطلاعات بیشتری کسب کنید به بخش «آرایه‌های کاتلین» (+) مراجعه کنید.

تکرار روی یک رشته

در این بخش مثالی از تکرار روی یک String ارائه شده است.

خروجی کد فوق به صورت زیر است:

امکان تکرار روی یک String با استفاده از اندیس و به روشی مشابه آرایه‌ها وجود دارد. به مثال زیر توجه کنید:

خروجی کد فوق به صورت زیر است:

عبارت break در کاتلین

در این بخش از مقاله آموزش کاتلین، با عبارت break در این زبان برنامه‌نویسی آشنا می‌شویم. عبارت break برای خاتمه یک حلقه استفاده می‌شود. همچنین با برچسب‌های break آشنا خواهیم شد. فرض کنید مشغول کار با حلقه‌ها هستید. گاهی اوقات لازم می‌شود که حلقه را بی‌درنگ و بدون بررسی عبارت تست خاتمه ببخشیم. در این حالت، از عبارت break استفاده می‌کنیم. این عبارت موجب توقف نزدیک‌ترین حلقه می‌شود. طرز کار عبارت break در کاتلین شبیه همان عبارت در جاوا است.

طرز کار break چگونه است؟

عبارت berak تقریباً همیشه همراه با سازه if…else استفاده می‌شود. به عنوان مثال به کد زیر توجه کنید:

اگر testExpression به صورت true ارزیابی شود، break اجرا می‌شود که حلقه for را خاتمه می‌بخشد.

آموزش کاتلین

مثالی از break در کاتلین

خروجی کد فوق به صورت زیر است:
زمانی که مقدار i برابر با 5 شود، عبارت i == 5 درون if به صورت true ارزیابی می‌شود و break اجرا خواهد شد. این ترتیب اجرای حلقه for خاتمه می‌یابد.

مثال: محاسبه مجموع تا زمانی که کاربر عدد 0 وارد کند

برنامه زیر مجموع اعداد وارد شده از سوی کاربر را تا زمانی که وی عدد 0 وارد کند، محاسبه می‌کند. برای کسب اطلاعات بیشتر در خصوص روش دریافت ورودی از کاربر به بخش «ورودی/خروجی ابتدایی» در کاتلین مراجعه کنید.

خروجی کد فوق به صورت زیر است:

در برنامه فوق، عبارت تست حلقه while همواره به صورت true ارزیابی می‌شود. در این برنامه حلقه while تا زمانی اجرا می‌شود که کاربر عدد 0 را وارد کند. زمانی که کاربر عدد 0 وارد کند، break اجرا شده و حلقه while خاتمه می‌یابد.

برچسب break در کاتلین

آن چه تا کنون در خصوص break مطرح کردیم، شکل بدون برچسب این عبارت بوده است که نزدیک‌ترین حلقه محصور را خاتمه می‌بخشد. روش دیگری نیز برای استفاده از break به صورت برچسب‌دار برای خاتمه بخشیدن به حلقه مورد نظر (و نه لزوماً نزدیک‌ترین حلقه محصور) وجود دارد.

طرز کار break برچسب‌دار چگونه است؟

آموزش کاتلین

برچسب‌ها در کاتلین با یک شناسه آغاز شده و سپس یک علامت @ می‌آید. در مثال زیر @test یک برچسب است که برای نشانه‌گذاری حلقه while بیرونی استفاده می‌شود. بدین ترتیب با استفاده از یک عبارت break به همراه برچسب به صورت break@test می‌تواند حلقه خاصی را متوقف کنید:

خروجی کد فوق به صورت زیر است:

در مثال فوق، عبارت i==2 به صورت true ارزیابی می‌شود و break@first اجرا می‌شود که موجب خاتمه یافتن حلقه با نشانه @first می‌شود. در مثال زیر یک نسخه کمی متفاوت از برنامه فوق را می‌بینید. در برنامه زیر break حلقه با نشانه @second را خاتمه می‌بخشد.

خروجی برنامه فوق به صورت زیر است:

نکته: از آنجا که break در این برنامه برای خاتمه بخشیدن به درونی‌ترین حلقه استفاده شده است، در این حالت، لزومی به استفاده از break برچسب‌دار وجود ندارد.

به طور کلی سه عبارت پرش به صورت break ،continue و return در کاتلین وجود دارند. در این بخش از مقاله آموزش کاتلین با عبارت break آشنا شدیم. عبارت‌های پرشی continue و return نیز در بخش‌های بعدی این مقاله ارائه شده‌اند.

عبارت continue در کاتلین

در این بخش از مقاله آموزش کاتلین، از عبارت continue برای پرش و رد شدن از تکرار کنونی حلقه استفاده می‌کنیم. ضمناً در این بخش از مقاله با برچسب‌های continue نیز آشنا خواهیم شد.

فرض کنید مشغول کار روی حلقه‌ها هستید. برخی اوقات لازم می‌شود که تکرار کنونی حلقه را رد کنیم. در یک چنین حالتی، از عبارت continue استفاده می‌کنیم. سازه continue موجب می‌شود که تکرار کنونی درون حلقه رد شود (اجرا نمی‌شود) و کنترل برنامه به انتهای بدنه حلقه منتقل می‌شود.

طرز کار continue چگونه است؟

عبارت continue تقریباً همیشه همراه با سازه if…else استفاده می‌شود. به مثال زیر توجه کنید:

اگر مقدار testExpression2 به صورت true ارزیابی شود، سازه continue اجرا می‌شود و همه کدهای درون حلقه while برای آن دفعه تکرار رد می‌شود (اجرا نخواهد شد و به گام بعدی تکرار می‌رود).

آموزش کاتلین

مثالی از continue در کاتلین

خروجی کد فوق به صورت زیر است:
زمانی که مقدار i بزرگ‌تر از 1 و کمتر از 5 باشد، continue اجرا می‌شود که موجب اجرا نشدن گزاره زیر می‌شود:
با این حال گزاره زیر در هر تکرار حلقه اجرا می‌شود، زیرا این گزاره پیش از سازه continue قرار دارد:

مثالی از محاسبه مجموع صرف اعداد مثبت

برنامه زیر مجموع حداکثر 6 عدد را که از سوی کاربر وارد می‌شوند، محاسبه می‌کند. اگر کاربر عدد منفی یا صفر وارد کند، از محاسبه صرف‌نظر می‌شود.

خروجی کد فوق به صورت زیر است:

Continue برچسب‌دار در کاتلین

هر آنچه تا کنون در خصوص continue گفتیم به شکل بدون برچسب آن مربوط می‌شد. این نوع از سازه continue از اجرای تکرار جاری نزدیک‌ترین حلقه محصور جلوگیری می‌کند. اما می‌توان از continue برای رد شدن از تکرار هر حلقه مورد نظر (و نه لزوماً نزدیک‌ترین حلقه) استفاده کرد. بدین منظور باید از برچسب‌های continue استفاده کنیم.

طرز کار continue برچسب‌دار چگونه است؟

آموزش کاتلین

برچسب‌ها در کاتلین با یک شناسه آغاز می‌شوند و سپس کاراکتر @ می‌آید. در برنامه زیر از برچسب @outerloop استفاده می‌کنیم که حلقه while بیرونی را نشانه‌گذاری می‌کند. اینک با استفاده از continue به همراه برچسب continue@outerloop می‌توانید از اجرای کدهای یک حلقه خاص برای آن دفعه تکرار جلوگیری کنید.

مثالی از continue برچسب‌دار

خروجی کد فوق به صورت زیر است:
استفاده از continue برچسب‌دار غالباً توصیه نمی‌شود، زیرا موجب دشواری درک کد می‌شود. اگر در موقعیتی هستید که مجبور به استفاده از continue برچسب‌دار هستید، می‌توانید کد خود را با تلاش برای یافتن روش متفاوتی که خوانایی بیشتری داشته باشد، «بازسازی» (refactor) کنید.

در بخش بعدی به بررسی آخرین عبارت پرشی کاتلین یعنی return می‌پردازیم.

تابع‌های کاتلین

در این بخش از مقاله آموزش کاتلین به بررسی تابع‌ها، ماهیت و ساختار آن‌ها و شیوه ایجاد یک تابع تعریف شده کاربر در این زبان برنامه‌نویسی می‌پردازیم.

تابع در برنامه‌نویسی به گروهی از گزاره‌های مرتبط با هم گفته می‌شود که یک وظیفه خاص را اجرا می‌کنند.

تابع‌ها برای تجزیه یک برنامه بزرگ به اجزای کوچک‌تر و ایجاد حالت ماژولار مورد استفاده قرار می‌گیرند. برای نمونه فرض کنید باید یک دایره را بر اساس ورودی از سوی کاربر ایجاد و رنگ‌آمیزی کنید. به این منظور می‌توانید دو تابع بنویسید که به ترتیب عملیات ایجاد دایره و رنگ‌آمیزی آن را اجرا می‌کنند:

  • تابع ()createCircle
  • تابع ()colorCircl

تقسیم یک برنامه بزرگ به کامپوننت‌های کوچک‌تر، موجب می‌شود که برنامه قابلیت سازمان‌دهی و مدیریت بیشتری پیدا کند.

انواع تابع‌ها

بسته به این که یک تابع از سوی کاربر تعریف شده باشد یا در کتابخانه استاندارد موجود باشد، دو نوع تابع وجود دارد:

  • تابع کتابخانه استاندارد کاتلین
  • تابع‌های تعریف شده از سوی کاربر

تابع‌های کتابخانه استاندارد کاتلین

تابع‌های کتابخانه استاندارد کاتلین، تابع‌های داخلی این زبان برنامه‌نویسی هستند که به صورت آماده ‌می‌توان از آن‌ها استفاده کرد. برای نمونه به مثال زیر توجه کنید. در این مثال تابع ()print یک تابع کتابخانه استاندارد است که در استریم خروجی استاندارد (نمایشگر) پرینت می‌کند. همچنین تابع ()sqrt جذر عدد را با مقدار از نوع Double بازگشت می‌دهد:

خروجی برنامه فوق به صورت زیر است:

تابع‌های تعریف ‌شده‌ کاربر

همان طور که پیش‌تر اشاره کردیم، شما می‌توانید تابع‌ها را خودتان نیز ایجاد کنید. چنین تابع‌هایی به نام تابع‌های تعریف‌شده‌ی کاربر شناخته می‌شوند.

شیوه ایجاد تابع تعریف ‌شده‌ کاربر در کاتلین چگونه است؟

پیش از آن که بتوانیم از تابع استفاده (آن را فراخوانی) کنیم، باید آن را تعریف نماییم. روش تعریف تابع در کاتلین به صورت زیر است:

برای تعریف یک تابع در کاتلین از کلیدواژه fun استفاده می‌کنیم. سپس نام تابع (شناسه) می‌آید. در مثال فوق نام تابع callMe است. در برنامه فوق، پرانتزها خالی هستند. این بدان معنی است که این تابع هیچ آرگومانی نمی‌گیرد. در مورد آرگومان‌های تابع در ادامه بیشتر توضیح خواهیم داد.

کدهای درون آکولاد، بدنه تابع را تشکیل می‌دهند.

شیوه فراخوانی تابع چگونه است؟

برای اجرای کدهای درون بدنه تابع باید آن را فراخوانی (Call) کنیم. روش انجام این کار به صورت زیر است:

گزاره فوق، تابع ()callme را که پیش‌تر اعلان کرده‌ایم، فرا می‌خواند.

آموزش کاتلین

مثالی از یک برنامه ساده با تابع

خروجی برنامه فوق به صورت زیر است:
تابع ()callMe در کد فوق هیچ آرگومانی نمی‌گیرد. ضمناً این تابع هیچ مقداری بازگشت نمی‌دهد. در این بخش یک مثال دیگر از تابع را بررسی می‌کنیم. تابع زیر آرگومان می‌پذیرد و مقداری نیز بازگشت می‌دهد.

مثالی از کاربرد تابع برای جمع دو عدد

خروجی برنامه فوق به صورت زیر است:

طرز کار تابع‌های دارای آرگومان و مقدار بازگشتی در کاتلین چگونه است؟

در مثال فوق دو عدد number1 و number2 از نوع Double در طی فراخوانی تابع، به آن ارسال می‌شوند. این آرگومان‌ها به نام آرگومان‌های واقعی شناخته می‌شوند.

پارامترهای n1 و n2 آرگومان‌های ارسالی را می‌گیرند. این آرگومان‌ها به نام آرگومان‌های صوری (یا پارامتر) شناخته می‌شوند.

آموزش کاتلین

آرگومان‌ها در زبان کاتلین با استفاده از کاما از هم جدا می‌شوند. همچنین نوع آرگومان صوری باید به صورت صریح نوع‌بندی شده باشد. توجه کنید که نوع داده آرگومان‌های واقعی و صوری باید با هم مطابقت داشته باشند، یعنی نوع داده آرگومان واقعی اول باید با نوع آرگومان صوری نخست یکسان باشد. به طور مشابه نوع آرگومان واقعی دوم نیز باید با نوع آرگومان صوری دوم مطابق بوده و باقی موارد نیز به همین ترتیب با هم منطبق باشند.

گزاره بازگشتی این تابع به صورت return sumInteger است. این کد موجب خاتمه یافتن تابع ()addNumbers می‌شود و بدین ترتیب کنترل برنامه به تابع ()main بازمی‌گردد. در این برنامه sumInteger از تابع ()addNumbers بازگشت می‌یابد. این مقدار به متغیر result انتساب می‌یابد.

آموزش کاتلین

توجه کنید که هر دو متغیر sumInteger و result از نوع Int هستند. همچنین نوع بازگشتی تابع در تعریف تابع تعریف می‌شود:

اگر تابع هیچ مقداری بازگشت ندهد، نوع بازگشتی آن Unit خواهد بود. در صوتی که نوع بازگشتی به صورت Unit باشد، تعیین نوع بازگشتی در تعریف تابع اختیاری خواهد بود.

مثالی از نمایش نام با استفاده از تابع

خروجی کد فوق به صورت زیر است:
در کد فوق، تابع ()getName دو آرگومان String می‌گیرد و یک مقدار از نوع String بازگشت می‌دهد. در صورتی که تابع همانند مثال فوق، یک عبارت منفرد را بازگشت می‌دهد، الزامی برای استفاده از آکولاد {} برای بدنه تابع پس از علامت = وجود ندارد.

اعلان صریح نوع بازگشتی در چنین کدی اختیاری است، زیرا کامپایلر می‌تواند مقدار بازگشتی را استنباط کند. در مثال فوق، می‌توان روش اعلان تابع را که به صورت زیر است:

با شیوه زیر جایگزین کرد:

در این بخش از مقاله آموزش کاتلین توضیح مختصری در خصوص تابع‌های کاتلین و ماهیت و طرز کار آن‌ها ارائه کردیم. در بخش‌های بعدی در این خصوص بیشتر صحبت خواهیم کرد.

فراخوانی تابع به شیوه میانوندی

در این بخش از مقاله آموزش کاتلین به بررسی شیوه استفاده از نمادگذاری میانوندی برای فراخوانی تابع‌ها خواهیم پرداخت و مثال‌هایی را در این خصوص مورد بررسی قرار می‌دهیم. پیش از آن که در مورد شیوه ایجاد یک تابع با نمادگذاری میانوندی توضیح دهیم، به بررسی دو تابع رایج با این طرز نشانه‌گذاری می‌پردازیم.

زمانی که از عملگرهای || و && استفاده می‌کنیم، کامپایلر به ترتیب به دنبال تابع‌های or و and می‌گردد و آن‌ها را در پس‌زمینه فراخوانی می‌کند. این دو تابع از نمادگذاری میانوندی پشتیبانی می‌کنند.

مثالی از تابع or و and در کاتلین

خروجی برنامه فوق به صورت زیر است:
در برنامه فوق، از عبارت a or b به جای a.or(b) و از عبارت a and b به جای a.and(b) استفاده شده است. دلیل این که امکان چنین کاری وجود دارد، این است که این دو تابع از نمادگذاری میانوندی پشتیبانی می‌کنند.

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

در صورتی که تابعی همه شرایط زیر را داشته باشد، می‌توانیم آن را با استفاده از نمادگذاری میانوندی فراخوانی کنیم:

  • ابن تابع یک تابع عضو (یا تابع بسط) باشد.
  • این تابع تنها یک پارامتر داشته باشد.
  • این تابع با کلیدواژه infix نشانه‌گذاری شده باشد.

مثالی از تابع تعریف ‌شده‌ کاربر با نمادگذاری میانوندی

خروجی برنامه فوق به صورت زیر است:
در برنامه فوق، ()createPyramid یک تابع میانوندی است که یک ساختار هرمی ایجاد می‌کند. این تابع یک تابع عضو کلاس Structure است که تنها یک پارامتر از نوع Int می‌گیرد و با کلیدواژه infix آغاز می‌شود.

تعداد ردیف‌های هرم به آرگومان‌های ارسالی به تابع بستگی دارد.

آرگومان‌های پیش‌فرض و نام‌دار در کاتلین

در این بخش از مقاله آموزش کاتلین به بررسی آرگومان‌های پیش‌فرض و نام‌دار در این زبان برنامه‌نویسی می‌پردازیم و مثال‌هایی را در این خصوص بررسی خواهیم کرد.

آرگومان پیش‌فرض در کاتلین

در زبان کاتلین، می‌توان در تعریف تابع، مقادیر پیش‌فرضی برای پارامترها ارائه کرد. اگر تابع با آرگومان‌های ارسالی فراخوانی شود، این آرگومان‌ها به عنوان پارامتر استفاده می‌شوند. با این حال، اگر تابع بدون ارسال پارامتر (ها) فراخوانی شود، آرگومان‌های پیش‌فرض مورد استفاده قرار می‌گیرند.

طرز کار آرگومان پیش‌فرض در کاتلین چگونه است؟

در این بخش با طرز کار آرگومان‌های پیش‌فرض در حالت‌های مختلف آشنا می‌شویم.

حالت اول: همه آرگومان‌ها ارسال شوند

آموزش کاتلین

تابع ()foo دو آرگومان می‌گیرد. این آرگومان‌ها دارای مقادیر پیش‌فرض هستند. با این حال در برنامه فوق، تابع ()foo با ارسال هر دو آرگومان فراخوانی شده است. از این رو آرگومان‌های پیش‌فرض مورد استفاده قرار نگرفته‌اند. درون تابع ()foo مقادیر letter و number به ترتیب برابر با ‘x’ و 2 هستند.

حالت دوم: بعضی آرگومان‌ها به تابع ارسال نشوند

آموزش کاتلین

در این حالت فرض می‌کنیم تنها آرگومان اول به تابع ()foo ارسال شده باشد. در این صورت آرگومان اول از مقدار ارسالی به تابع استفاده می‌کند. با این حال آرگومان دوم، یعنی number مقدار پیش‌فرض را می‌گیرد، زیرا آرگومان دوم در طی فراخوانی تابع ارسال نشده است. درون تابع ()foo مقادیر letter و number به ترتیب برابر با ‘y’ و 15 هستند.

حالت سوم: هیچ آرگومانی ارسال نشود

آموزش کاتلین

در این حالت تابع ()foo بدون ارسال هیچ آرگومانی فراخوانی می‌شود. از این رو در هر دو مورد از مقادیر پیش‌فرض استفاده می‌شود. بدین ترتیب درون تابع ()foo مقادیر letter و number به ترتیب برابر با ‘a’ و 15 هستند.

مثالی از آرگومان پیش‌فرض در کاتلین

خروجی برنامه فوق به صورت زیر است:

آرگومان نام‌دار در کاتلین

پیش از آن که در مورد آرگومان نام‌دار در کاتلین صحبت کنیم، یک تغییر کوچک را در کد فوق مورد بررسی قرار می‌دهیم.

در برنامه فوق تلاش می‌کنیم تا آرگومان دوم را به تابع ()displayBorder ارسال کنیم و از آرگومان پیش‌فرض برای آرگومان اول استفاده می‌کنیم. با این حال، این کد تولید خطا خواهد کرد. دلیل این امر آن است که کامپایلر فکر می‌کند که ما تلاش می‌کنیم مقدار 5 (با نوع Int) را به یک کاراکتر (از نوع Char) ارسال کنیم. برای حل این مشکل باید از آرگومان‌های نام‌دار استفاده کنیم:

مثالی از آرگومان نام‌دار در کاتلین

خروجی برنامه فوق به صورت زیر است:
در برنامه فوق، از یک آرگومان نام‌دار به صورت length = 5 برای مشخص ساختن این نکته استفاده کرده‌ایم که پارامتر length در تعریف تابع باید این مقدار را بگیرد. توجه کنید که در این حالت، ترتیب آرگومان اهمیتی ندارد.

آموزش کاتلین

بدین ترتیب آرگومان نخست به نام character از مقدار پیش‌فرض ‘=’ در برنامه استفاده می‌کند.

تابع‌های بازگشتی در کاتلین

در این بخش از مقاله آموزش کاتلین به بررسی روش ایجاد تابع‌های بازگشتی در این زبان برنامه‌نویسی می‌پردازیم. «تابع بازگشتی» (Recursive Function) به تابعی گفته می‌شود که خودش را فراخوانی کند. همچنین با مفهوم تابع «بازگشتی انتهایی» (Tail Recursion)‌ در کاتلین آشنا خواهیم شد.

چنان که اشاره کردیم تابعی که خودش را فراخوانی کند، تابع بازگشتی نامیده می‌شود و این تکنیک به طور کلی به نام «بازگشت» (recursion) خوانده می‌شود. یک مثال فیزیکی از این پدیده را می‌توان در زمان قرار دادن دو آینه در روبروی هم مشاهده کرد. هر شیئی که در میان این دو آینه قرار داشته باشد به صورت بازگشتی در آن‌ها بازتاب می‌یابد.

طرز کار بازگشت در برنامه‌نویسی چگونه است؟

در کد فوق تابع ()recurse از داخل خود بدنه تابع ()recurse فراخوانی می‌شود. طرز کار آن به صورت زیر است:

آموزش کاتلین

در تصویر فوق می‌بینیم که فراخوانی بازگشتی تا ابد ادامه می‌یابد و موجب بروز بازگشت نامتناهی می‌شود. برای جلوگیری از بازگشت نامتناهی از گزاره if…else (یا رویکردهای مشابه) استفاده می‌شود که در یک شاخه از آن فراخوانی بازگشتی انجام می‌یابد و در شاخه دیگر (حصول شرایط مطلوب) ‌متوقف می‌شود.

مثالی از یافتن فاکتوریل عدد با استفاده از بازگشت در کاتلین

خروجی برنامه فوق به صورت زیر است:

طرز کار برنامه فوق چگونه است؟

فراخوانی بازگشتی تابع ()factorial را می‌توان با استفاده از تصویر زیر توضیح داد:

آموزش کاتلین

مراحل اجرای برنامه فوق به صورت زیر است:

بازگشت انتهایی در کاتلین

«بازگشت انتهایی» (Tail Recursion) یک مفهوم عمومی است و یک ویژگی زبان کاتلین محسوب نمی‌شود. برخی زبان‌های برنامه‌نویسی شامل کاتلین از آن برای بهینه‌سازی فراخوانی‌های بازگشتی استفاده می‌کنند، در حالی که برخی زبان‌های دیگر (مانند پایتون) از آن‌ها پشتیبانی نمی‌کنند.

بازگشت انتهایی در کاتلین چیست؟

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

اما در فراخوانی بازگشتی انتهایی، محاسبات ابتدا اجرا می‌شوند و سپس فراخوانی‌های بازگشتی اجرا می‌شوند. به این ترتیب فراخوانی بازگشتی، نتیجه اجرای گام قبلی را به فراخوانی بازگشتی بعدی ارائه می‌کند. این امر موجب می‌شود که فراخوانی بازگشتی معادل اجرای حلقه باشد و از خطر بروز «سرریز پشته» (stack overflow) جلوگیری می‌کند.

شرط بازگشت انتهایی

یک تابع بازگشتی در صورتی برای اجرا به صورت بازگشت انتهایی مناسب است که فراخوانی تابع به خودش، آخرین عملیاتی باید که اجرا می‌کند. به مثال زیر توجه کنید.

  • مثال اول

تابع زیر برای اجرا به صورت «بازگشت انتهایی» مناسب نیست، زیرا فراخوانی تابع به خودش یعنی خط (n*factorial(n-1، آخرین عملیات آن محسوب نمی‌شود.

  • مثال دوم

تابع زیر برای اجرا به صورت بازگشت انتهایی مناسب است، زیرا فراخوانی تابع به خودش یعنی fibonacci(n-1, a+b, a) آخرین عملیات آن است.

برای این که به کامپایلر اعلام کنیم که یک تابع بازگشتی را در کاتلین به صورت بازگشت انتهایی اجرا کند، باید تابع را با مادیفایر tailrec مشخص سازیم.

مثالی از بازگشت انتهایی

خروجی کد فوق به صورت زیر است:
این برنامه صدمین جمله سری فیبوناچی را محاسبه می‌کند. از آنجا که خروجی ممکن است عدد صحیح بسیار بزرگی باشد، باید از کلاس BigInteger در کتابخانه استاندارد جاوا کمک بگیریم. در مثال فوق، تابع ()fibonacci با مادیفایری به نام tailrec مشخص شده است و از این رو امکان اجرای بازگشت انتهایی را دارد. به این ترتیب کامپایلر فرایند بازگشتی را در این حالت بهینه‌سازی می‌کند.

اگر تلاش کنید جمله 20،000 (یا هر عدد صحیح بزرگ دیگر) سری فیبوناچی را بدون بازگشت انتهایی محاسبه کنید، کامپایلر یک استثنا به صورت java.lang.StackOverflowError ایجاد می‌کند. با این حال، برنامه ما بدون هیچ مشکلی کار می‌کند. دلیل این امر آن است که ما از بازگشت انتهایی استفاده کرده‌ایم که از یک حلقه بهینه بر مبنای نسخه‌ای از بازگشت سنتی استفاده می‌کند.

مثالی از فاکتوریل با استفاده از بازگشت انتهایی

مثال فوق برای محاسبه فاکتوریل یک عدد (مثال اول) را نمی‌توان برای اجرا به صورت بازگشت انتهایی بهینه‌سازی کرد. اما برنامه زیر همین وظیفه را به روش متفاوتی اجرا می‌کند.

خروجی برنامه فوق به صورت زیر است:

کامپایلر می‌تواند در این برنامه فرایند بازگشتی را به صورت یک تابع بازگشتی که امکان اجرای بازگشت انتهایی دارد، بهینه‌سازی کند و ما از مادیفایر tailrec استفاده کرده‌ایم که موجب بهینه‌سازی بازگشت از سوی کامپایلر می‌شود.

کلاس و شیء در کاتلین

از این بخش از مقاله آموزش کاتلین به بعد، به بررسی مفاهیم مرتبط با برنامه‌نویسی شیءگرا در کاتلین می‌پردازیم. در ابتدا با مفهوم کلاس، شیوه ایجاد شیء و استفاده از آن در این زبان برنامه‌نویسی آشنا می‌شویم.

کاتلین از هر دو پارادایم برنامه‌نویسی تابعی و شیء‌گرا پشتیبانی می‌کند. قابلیت‌های کاتلین امکان نوشتن تابع‌های مرتبه بالا، انواع مختلف تابع‌ها و لامبدا را فراهم می‌سازد و به این ترتیب به گزینه‌ای عالی برای سبک برنامه‌نویسی تابعی تبدیل می‌شود. اما در این بخش بر روی بررسی مفاهیم سبک برنامه‌نویسی شیءگرا متمرکز خواهیم شد.

برنامه‌نویسی شی‌ءگرا

در سبک برنامه‌نویسی شیء‌گرا (OOP) یک مسئله پیچیده با ایجاد شیء‌هایی به مجموعه‌های کوچک‌تر تقسیم می‌شود. این اشیا دو خصوصیت دارند:

  • حالت
  • رفتار

در ادامه برخی مثال‌هایی از اشیا را بررسی می‌کنیم.

  1. لامپ (Lamp) یک شیء است:
    1. این شیء می‌تواند حالت‌های روشن (On) و خاموش (Off) داشته باشد.
    2. این شیء می‌تواند رفتار روشن کردن (turn on) و خاموش کردن (turn off) را بگیرد.
  2. دوچرخه (Bicycle) یک شیء است.
    1. این شیء می‌تواند حالت‌های «دنده کنونی» (current gear)، «دو چرخ» (two wheels)‌، «تعداد دنده» (number of gear) ‌و بسیاری حالت‌های دیگر را داشته باشد.
    2. این شیء می‌تواند رفتار «ترمز کردن» (braking)، «پدال زدن» (changing gears)، «تغییر دادن دنده» (changing gears) و بسیاری رفتارهای دیگر را داشته باشد.

در بخش‌های بعدی این مقاله آموزش کاتلین در خصوص ویژگی‌های مختلف برنامه‌نویسی شیءگرا از قبیل کپسوله‌سازی داده‌ها، وراثت، چندریختی و غیره صحبت خواهیم کرد. در این بخش صرفاً روی مبانی مقدماتی شیءگرایی در کاتلین تمرکز می‌کنیم.

کلاس کاتلین

پیش از آن که بتوان اشیایی در کاتلین ساخت، باید یک کلاس در این زبان تعریف کرد. کلاس، یک نقشه اولیه برای ساخت شیء محسوب می‌شود. کلاس را می‌توان مانند یک رسم اولیه (پروتوتایپ) از یک خانه تصور کرد. این کلاس شامل جزییاتی در مورد طبقات، درها، پنجره‌های و اجزای دیگر خانه دارد. بر اساس این توصیف‌ها می‌توان خانه را ساخت. به این ترتیب خانه ساخته شده یک شیء خواهد بود. همان طور که خانه‌های زیادی را می‌توان از روی یک نقشه اولیه واحد ساخت، از روی یک کلاس نیز می‌توان اشیای زیادی ایجاد کرد.

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

برای تعریف یک کلاس در کاتلین باید از کلیدواژه class استفاده کنیم: