**کاتلین** (به انگلیسی: Kotlin)، یک زبان برنامه‌نویسی عمومی، مستقل از سکو از نوع ایستا است که بر روی ماشین مجازی جاوا اجرا می‌شود. همچنین می‌تواند به سورس کد جاوا اسکریپت یا کد ماشین (توسط ال‌ال‌وی‌ام) نیز کامپایل شود. اولین توسعهٔ آن توسط تیم برنامه‌نویسان JetBrains واقع در سن پترزبورگ روسیه انجام شد. (این نام از روی جزیره کاتلین در نزدیکی سن پترزبورگ می‌آید) کاتلین در ژانویهٔ سال ۲۰۱۲ به عنوان زبان ماه انتخاب شد. با وجود آنکه کاتلین از نظر syntax با جاوا سازگار نیست، این زبان طراحی شده تا با کد جاوا همکاری داشته باشد و قابلیت تبدیل به کدهای **جاوا** یا برعکس در آن وجود دارد کتابخانه‌های استاندارد نسخه جاوای آن، متکی بر کتابخانه‌های کلاس جاوا است.به عنوان مثال روبیکا مارکت توسط این زبان برنامه نویسی طراحی شده است.

تاریخچه
-------

تصویری دوبعدی از شانس‌بیار کاتلین
تصویری سه‌بعدی از شانس‌بیار کاتلین
در ژوئیه ۲۰۱۱، JetBrains از پروژهٔ کاتلین پرده برداری کرد. زبانی جدید برای ماشین مجازی جاوا که برای یک سال تحت توسعه و پیشرفت قرار داشت. سرپرست Dmitry Jemerov, JetBrains، اظهار داشت بیشتر زبان‌های برنامه‌نویسی، آن ویژگی‌هایی که دنبالش هستند را ندارند. به استثناء اسکالا. او به زمان کند کامپایل اسکالا به عنوان کمبودی واضح اشاره کرد. یکی از اهداف اصلی کاتلین این است که به همان سرعت زیاد جاوا کامپایل شود. در فوریهٔ سال ۲۰۱۲، JetBrains منبع باز این پروژه را تحت مجوز Apache 2 ارائه کرد. Jetbrains امیدوار است که این زبان جدید IntelliJ IDEA را به پیش ببرد.

فلسفه
-----

سرپرست توسعه، Andrey Breslav، بیان کرده کاتلین طراحی شده تا زبانی صنعتی-قدرتی و شی گرا بوده و زبانی بهتر از جاوا باشد. اما هنوز پر از سازگاری‌هایی با کد جاوا است که اجازه داده کمپانی‌ها مهاجرتی تدریجی از جاوا به کاتلین داشته باشند.

نحوه
----

مشابه با Pascal, Haxe, PL/SQL, F#, Go و اسکالا (بی شباهت به نحو C و زبان‌های مشتق از ان مانند نیست C++, Java, C# و زبان D)، اعلامات متغیر کاتلین و پارامتر لیست‌ها دارای نوع هستند که بعد از نام متغیر می‌آید (با جدا کنندهٔ کالن). مانند دیگر زبان‌های مدرن مانند اسکالا و Groovy، سمی کالن‌ها به عنوان عبارت خاتمه دهنده اختیاری هستند. در بیشتر اوقات یک خط جدید برای کامپایلر کافی است تا بتواند استنباط کند که عبارت به پایان رسیده‌است.

معنی (Semantics)
----------------

کاتلین علاوه بر پشتیبانی کلاس‌ها و متدهای (که در کاتلین به آن‌ها توابع عضو (member functions) می‌گوییم) برنامه‌نویسی شی گرا، برنامه‌نویسی رویه‌ای (procedural programming) را نیز با استفاده از توابع پشتیبانی می‌کند. همانند C و ++C، نقطهٔ شروع به برنامهٔ کاتلین تابعی به نام main است که آرایه‌ای شامل خطوط دستور را منتقل می‌کند. پوستهٔ script-style و الحاق رشته‌ای Perl و Unix/Linux نیز پشتیبانی می‌شود. همچنین استنتاج نوع هم پشتیبانی شده‌است.

مثال: Hello , world!

```
fun main(args : Array<String>) {
 val scope = "world"
 println("Hello, $scope!")
}

```
کاتلین بین نوع‌هایی که مقدار null می‌پذیرند و آنهایی که نمی‌پذیرند تفاوت قائل می‌شود. تمام شی‌هایی که null پذیر هستند باید به با یک پسوند " ? "بعد از اسم نوع تعریف شوند. عملیات روی شی‌های null پذیر نیاز به توجه خاص توسعه دهندگان دارد. عمل چک کردن null باید قبل از استفاده از مقدار انجام شده باشد. کاتلین عملگرهای null-safe را برای کمک به توسعه دهندگان فراهم آورده ست.

* . ? (عملگر ناوبری امن) برای دسترسی امن به یک متد یا ویژگی یک شی که ممکن است null باشد، می‌تواند مورد استفاده قرار گیرد. اگر شی null باشد، متد فراخوانی نمی‌شود و عبارت برابر null قرار می‌گیرد.
* :? (عملگر یگانی null) اغلب ارجاع می‌دهد مانند عملگر Elvis:

```
fun sayHello(maybe : String?, neverNull : Int) {
 // use of elvis operator
 val name : String = maybe ?: "stranger"
 println("Hello $name")
}

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

```
 // returns null if foo is null, or bar() returns null, or baz() returns null
 foo ?. bar() ?. baz()

```

ابزارها
-------

* IntelliJ IDEA پشتیبانی پلاگین برای کاتلین را دارد. IntelliJ IDEA 15 اولین ورژنی است که بستهٔ نرم‌افزاری پلاگین کاتلین را در IntelliJ Installer آورده‌است و پشتیبانی ان را فراهم آورده‌است.
* همچنین JetBrains دارای یک Eclipse plug-in است.
* پلاگین آپاچی ماون
* Apache Ant task.
* پلاگین Gradle

تفاوت‌های کاتلین و جاوا در برنامه‌نویسی اندروید
-----------------------------------------------

**1. کد کوتاه‌تر و خوانا:** کاتلین کدی کوتاه‌تر، خواناتر و انعطاف‌پذیرتر نسبت به جاوا ارائه می‌دهد که موجب کاهش تعداد خطوط کد و افزایش سرعت توسعه می‌شود.

**2. توالی‌ها و دستورات when:** کاتلین دارای دستورات when برای نوشتن توالی‌هایی از شرایط است که کد را بسیار خواناتر و قابل فهم‌تر می‌کند که در جاوا با if-else پیاده‌سازی می‌شود.

**3. Nullable و Non-nullable:** کاتلین تفاوت مشخصی بین مقادیر nullable (قابل قبول مقدار null) و non-nullable (غیر قابل قبول مقدار null) دارد که از خطاهای ناخواسته ناشی از NullPointer برنامه‌نویسی جلوگیری می‌کند.

**4. کالکولیشن‌ها و Extension Functions:** کاتلین از کالکولیشن‌ها (مانند map و filter) پشتیبانی می‌کند که کار با داده‌ها را ساده‌تر می‌کند. همچنین می‌توانید با استفاده از Extension Functions، عملکرد کلاس‌ها را به‌طور پویا ارتقا دهید.

**5. کمترین نیاز به کد جانبی:** کاتلین برای برخی ویژگی‌ها مانند نال‌بودن یا تبدیل‌ها نیاز به کد جانبی ندارد و به خودی‌خود درست کار می‌کند.

**6. مدیریت نشانگرها (Annotations):** در کاتلین، نشانگرها را به عنوان توابع اضافی نیاز ندارید و می‌توانید آن‌ها را مستقیماً در کد خود استفاده کنید.

**7. کلاس‌های داده‌ای (Data Classes):** کلاس‌های داده‌ای در کاتلین، به شما امکان تعریف کلاس‌هایی با اطلاعات اصلی، اکوئیتی (Equality) و اعتبارسنجی (Validation) را می‌دهد که در جاوا باید به صورت دستی پیاده‌سازی شود.

زبان‌های مشابه
--------------

زبان‌های دیگری نیز در نظر گرفته شده‌اند تا زبانی بهتر از جاوا برای ماشین مجازی جاوا باشند.

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

موضوعات مرتبط
سربارگزاری عملگرها

منابع
-----

1. ↑  "JetBrains/kotlin". *Github*.

پیوند به بیرون
--------------

* وبگاه رسمی
* نسخه‌نمایشی وب و مثال‌ها

| * ن
* ب
* و
زبان‌های برنامه‌نویسی |
| --- |
| 
* گاه‌شمار

 |
| 
* زبان اسمبلی
* اسکالا
* ای‌پی‌ال
* بیسیک
* سی
* سی++
* سی شارپ
* هسکل
* کوبول
* فورترن
* جاوا
* جاوااسکریپت
* لیسپ
* پرولوگ
* پاسکال
* پرل
* پی‌اچ‌پی
* پایتون
* روبی
* ویژوال بیسیک دات‌نت
* اسمال‌تاک
* **بیشتر...**

 |
| 
* **رده:زبان‌های برنامه‌نویسی**
* **مقایسه**
* **فهرست‌ها**
	+ فهرست زبان‌های برنامه‌نویسی
	+ زبان‌ها بر پایه نوع
	+ بر پایه نسل
	+ زبان‌های غیر انگلیسی

 |

| * ن
* ب
* و
اندروید |
| --- |
| توسعهٔ نرم‌افزار | 

|  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- |
| ابزارهای توسعه | 

|  |  |
| --- | --- |
| رسمی | 
* آرت (ART)
* Software development kit (SDK)
	+ Android Debug Bridge (ADB)
	+ Fastboot
	+ Android App Bundle
	+ بسته برنامه اندروید (APK)
* بایونیک (نرم‌افزار)
* دالویک (نرم‌افزار)
* فایربیس
	+ پیام‌رسان ابری گوگل (GCM)
	+ Firebase Cloud Messaging (FCM)
* خدمات همراه گوگل (GMS)
* Native development kit (NDK)
* توسعه نرم‌افزار اندروید (OADK)
* RenderScript
* Skia
* ادموب
* طراحی متریال
* قلم (رایانه)s
	+ Droid
	+ Roboto
	+ فونت‌های نوتو
* توسعه‌دهندگان گوگل

 |
| سایر | 
* OpenBinder
* آپاچی هارمونی
* اوپن‌جی‌دی‌کی
* گریدل

 |

 |
| محیط یکپارچهتوسعه نرم‌افزار (IDE) | 
* اندروید استودیو
	+ اینتلیج آیدیا
* اکلیپس
	+ اکلیپس (ADT)
* App Inventor

 |
| زبان‌ها و پایگاه‌های داده | 
* جاوا (زبان برنامه‌نویسی)
* کاتلین
* اکس‌ام‌ال
* سی (زبان برنامه‌نویسی)
* سی پلاس‌پلاس
* اس‌کیوال لایت

 |
| واقعیت مجازی | 
* مقوای گوگل
* Daydream

 |
| رویدادها و جوامع | 
* گوگل آی/او
* Developer Challenge
* Developer Lab
* اندروید (AOSP)

 |

 | Android logo |
| نسخه‌ها | 
* اندورید ۱
* اندورید ۱.۱
* اندروید کیک فنجانی(۱.۵)
* اندروید دونات (۱.۶)
* اندروید نان خامه‌ای (۲.۰-۲.۱)
* اندروید ماست یخ‌زده (۲.۲)
* اندروید نان زنجبیلی (۲.۳)
* اندروید کندوی عسل(۳.x)
* اندروید بستنی حصیری (۴.۰)
* اندروید آبنبات ژله‌ای (۴.۱-۴.۳)
* اندروید کیت‌کت (۴.۴)
* اندروید آبنبات‌چوبی (۵.x)
* اندروید مارشمالو (۶.۰)
* اندروید نوقا (۷.x)
* اندروید اوریو (۸.x)
* اندروید پای (۹)
* اندروید ۱۰
* اندروید ۱۱
* اندروید ۱۲
* اندروید ۱۳

 |
| مشتقات | 
* اندروید اوتو
* اندروید اشیاء
* اندروید تی‌وی
* اندروید پوشیدنی

 |
| اسمارت‌فونو تبلت‌ها | 

|  |  |
| --- | --- |
| پیکسل | 
* سی
* پیکسل و پیکسل ایکس‌ال
* ۲ و ۲ ایکس‌ال
* ۳ و ۳ ایکس‌ال
	+ ۳ای و ۳ای ایکس‌ال
* ۴ و ۴ ایکس‌ال
	+ ۴ای و ۴ای ۵جی
* ۵
	+ ۵ای
* ۶ و ۶ پرو

 |
| نکسوس | 
* وان
* اس
* گلکسی نکسوس
* ۴
* ۱۰
* کیو
* ۵
	+ ۵ایکس
* ۶
	+ ۶پی
* ۷
	+ ۲۰۱۲
	+ ۲۰۱۳
* ۹
* پلیر

 |
| پلی ادیشن | 
* اچ‌تی‌سی وان (ام۷)
* اچ‌تی‌سی وان (ام۸)
* ال‌جی جی پد ۸٫۳
* موتو جی
* سامسونگ گلکسی اس۴
* سونی اکس‌پریا زد اولترا

 |
| 
* اندروید گو
* اندروید وان
* سایر اسمارت‌فون‌ها

 |

 |
| گونه‌هایشخصی‌شده | 
* Android-x86
	+ ریمیکس اواس
* AOKP
* بایدو یی
* نوک (کتاب الکترونیکی)
* سیستم‌عامل کالر
* CopperheadOS
* فایر اواس
* Funtouch OS
* میزو
* LeWa OS
* لینیج‌اواس
	+ /e/
	+ سیانوژن مد
* می‌یوآی
* Nokia X software platform
* OPhone
* OmniROM
* سیستم عامل اکسیژن
* Replicant
* اوبونتو تاچ
* XobotOS
* علی اواس

 |
| نرم‌افزارها | 
* دستیار گوگل
	+ گوگل نو
* گوگل ارت
	+ گوگل ارت
* جی‌میل
* گوگل کروم
* گوگل گاگلز
* گوگل هنگ‌آوتس
* گوگل مپس
	+ Navigation
	+ ویز (نرم‌افزار)
* Pay
	+ گوگل والت
* گوگل پلی
	+ Books
	+ Games
	+ Movies & TV
	+ Music
	+ Newsstand
* گوگل تاک
* Trips
* گوگل ویس

 |
| خدمات | 
* گوگل مپس
* خدمات گوگل پلی
* جستجوگر گوگل

 |
| رابط‌های کاربریجایگزین | 
* Asus Zen UI
* Hive UI
* اچ‌تی‌سی سنس
* گوگل پیکسل
* ال‌جی یوایکس (آپتیموس یوآی)
* سامسونگ اکسپرینس
* تاچ‌ویز
* وان یوآی
* ئی‌ام‌یوآی
* Vibe UI
* Sony UI
* می‌یوآی

 |
| فهرست‌ها | 
* Custom firmware
* Features
* Free and open-source applications
* Games
* Smartphones
* Google apps
* فهرست راه‌اندازهای اندروید

 |
| جستارهای وابسته | 
* Index of articles
* گوگل
* Androidland
* Lawn statues
* کروم کست
* Java vs. Android API
* Legal issues
	+ Oracle America, Inc. v. Google, Inc.
	+ Smartphone patent wars
* توسعه دهندگان ایکس‌دی‌ای
* ریشه‌یابی اندروید

 |