کاتلین

**کاتلین** (به انگلیسی: 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!

```kotlin
fun main(args : Array<String>) {
  val scope = "world"
  println("Hello, $scope!")
}
```
کاتلین بین نوع‌هایی که مقدار null می‌پذیرند و آنهایی که نمی‌پذیرند تفاوت قائل می‌شود. تمام شی‌هایی که null پذیر هستند باید به با یک پسوند " ? " بعد از اسم نوع تعریف شوند. عملیات روی شی‌های null پذیر نیاز به توجه خاص توسعه دهندگان دارد. عمل چک کردن null باید قبل از استفاده از مقدار انجام شده باشد. کاتلین عملگرهای null-safe را برای کمک به توسعه دهندگان فراهم آورده ست.
* . ? (عملگر ناوبری امن) برای دسترسی امن به یک متد یا ویژگی یک شی که ممکن است null باشد، می‌تواند مورد استفاده قرار گیرد. اگر شی null باشد، متد فراخوانی نمی‌شود و عبارت برابر null قرار می‌گیرد.
* 


```kotlin
fun sayHello(maybe : String?, neverNull : Int) {
   // use of elvis operator
   val name : String = maybe ?: "stranger"
   println("Hello $name")
}
```
مثالی از استفادهٔ عملگر ناوبری امن

```kotlin
// 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) را می‌دهد که در جاوا باید به صورت دستی پیاده‌سازی شود.

## زبان‌های مشابه
زبان‌های دیگری نیز در نظر گرفته شده‌اند تا زبانی بهتر از جاوا برای ماشین مجازی جاوا باشند.
* سیلان (برنامه‌نویسی)
* کلوژر
* فانتوم (زبان برنامه‌نویسی)
* گوسو (زبان برنامه‌نویسی)
* اسکالا
موضوعات مرتبط
سربارگزاری عملگرها

## منابع

## پیوند به بیرون
* 
* نسخه‌نمایشی وب و مثال‌ها

رده:پلت‌فرم جاوا
رده:خانواده زبان برنامه‌نویسی جاوا
رده:زبان‌های برنامه‌نویسی ایستا
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۲۰۱۱ (میلادی)
رده:زبان‌های برنامه‌نویسی سطح بالا
رده:زبان‌های برنامه‌نویسی شیءگرا
رده:زبان‌های برنامه‌نویسی ماشین مجازی جاوا
رده:زبان‌های برنامه‌نویسی
رده:زبان‌های توسعه برنامه‌های موبایل
رده:نرم‌افزارهایی که از پروانه آپاچی استفاده می‌کنند
رده:پروژه‌های نرم‌افزار آزاد