زبان برنامه نویسی کاتلین(Kotlin)

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

کاتلین در سال ۲۰۱۱ توسط کمپانی Jetbrains معرفی شد و اولین ورژن پایدار(Stable) آن در سال ۲۰۱۶ به نام ورژن 1.0 ارائه شد.

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

در سال ۲۰۱۷ گوگل رسما این زبان را به عنوان زبان دوم برنامه نویسی برای اندروید معرفی کرد.

چرا کاتلین ؟

کاتلین بر روی پلتفرم های مختلفی اجرا و پیاده سازی می شود. از جمله سرور یا اندروید یا به صورت محلی(Native) که توسط کامپایلر LLVM کامپایل می شود و قابل پیاده سازی بر روی

  • Windows (x86_64 only at the moment)
  • Linux (x86_64, arm32, MIPS, MIPS little endian)
  • MacOS (x86_64)
  • IOS (arm64 only)
  • Android (arm32 and arm64)
  • WebAssembly (wasm32 only)

می باشد.


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

از سال ۲۰۱۷ گوگل رسما کاتلین را به عنوان زبان دوم توسعه اندروید معرفی کرده است. و برای توسعه اپلیکیشن های اندروید کاتلین یک انتخاب بسیار عالی است.

ویژگی ها :

سازگاری: کاتلین با نسخه JDK6 سازگاری بالا دارد و به طور کامل توسط اندروید استودیو پشتیبانی می شود.

کارایی(Performance): کاتلین با سرعت بیشتری نسبت به جاوا اجرا می شود به خاطر استفاده از بایت کدهای ساده تر از جاوا. کاتلین از Inline function ها و Lambda پیشتیبانی می کند و Lambda اغلب از جاوا خام سرعت بیشتری دارد(البته در خود جاوا همین قضیه صادقه یعنی شما از Lambda که استفاده می کنی سرعت بالاتری داری).

ویژگی Footprint: کاتلین دارای کتابخانه Runtime بسیار کم حجم است که می تواند از طریق استفاده از ProGuard نیز کاهش یابد.

زمان کامپایل: معمولا زمان کاپایل سریعتر از جاواست.

پشتیبانی:

توسط Android Studio پشتیبانی می شود.


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

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

  • وضوح
  • مقیاس پذیری
  • هماهنگی و سازگاری با کتابخانه های جاوا
  • ابزار های زیاد مثل پشتیبانی IDE های مختلف و ..


فریمورک های سمت سرور :

فریمورک Spring: یکی از فریمورک های قدرتمند جاوا که برای توسعه سمت سرور است و ابزارها و کتابخانه های بیشماری در اختیار توسعه دهندگان قرار می دهد.

فریمورک Vert.x: یک فریمورک قدرتمند برای توسعه وب اپلیکیشن ها به صورت واکنش پذیر(reactive) که بر روی JVM اجرا می شود

فریمورک Ktor: یک فریمورک مخصوص خود کاتلین می باشد که توسط کمپانی JetBrains توسعه داده شده است برای وب اپلیکیشن های با مقیاس پذیری بالا

ابزار Kotlinx.html: برای ساختن کد های HTML توسط وب اپلیکیشن مثل JSP

برای کار با پایگاه داده نیز دسترسی های مثل JDBC و JPA فراهم شده است و برای NoSQL هم می توان از کتابخانه های جاوا استفاده نمود.

نکته: وب اپلیکیشن های نوشته شده با کاتلین بر روی تمام وب سرورهایی که جاوا بر روی آن ها اجرا می شود قابل نصب می باشند.


استفاده از کاتلین در جاوا اسکریپت:

کد کاتلین به کدهای جاوا اسکریپت نیز کامپایل می شود.در حال حاضر کدهای کاتلین به خروجی ECMAScript 5.1 تبدیل می شود.

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

خروجی کدهای جاوا اسکریپت دارای ویژگی های زیر می باشد:

  • خروجی کدها بهینه شده می باشد.
  • کدهای خروجی خوانایی بالایی دارند.
  • خروجی کد با کتابخانه های موجود همکاری دارد.
  • خروجی کدها به صورت استاندارد زبان برنامه نویسی می باشد.

چگونه می توان از آن استفاده کرد:

تبدیل به کدهای سمت کاربر:

  • تعامل با DOM Element: کاتلین اینترفیس هایی برای کار با Document Object Element فراهم می کند که می توان این المنت ها را ایجاد و بروزرسانی کند.
  • تعامل با کتابخانه های گرافیکی مثل WebGL

تبدیل به کدهای سمت سرور:

  • با تکنولوژی های سمت سرور مثل Node.js تعامل دارد


کاتلین می تواند همراه با کتابخانه ها و فریمورک های موجود مانند JQuery یا React استفاده شود. برای دسترسی به این چارچوب ها با یک API بسیار قوی، می توان کدهای TypeScript را به Kotlin با استفاده از ابزار ts2kt تبدیل کرد.

کمپانی JetBrains چندین ابزار مخصوص را برای جامعه React توسعه و نگهداری می کند.

همچنین کاتلین با ماژول های CommonJS, AMD and UMD سازگاری کامل دارد.


استفاده از کاتلین به صورت محلیKotlin/Native:

تکنولوژی Kotlin/Native به شما این امکان را می دهد که بدون استفاده از ماشین مجازی خاص کدهای کاتلین را به کدهای باینری تبدیل کنیم و اجرا کنیم.کاتلین را به وسیله کامپایلر

LLVM (Low Level Virtual Machine)

می توان کامپایل کرد.این تکنولوژی برای جاهایی که امکان اجرای هیچ VM امکانپذیر نیست طراحی شده است مثل IOS یا Embedded system یا هر جایی که یک توسعه دهنده نیاز به اجرای یک برنامه مستقل با اندازه مناسب و نیاز به اجرای سریع دارد.

تکنولوژی Kotlin/Native به طور کامل با کد بومی یک سیستم عامل همکاری دارد .

همچنین با کتابخانه های مختلفی همکاری دارد. میتوان کدهای کاتلین را به زبان C خروجی گرفت که با تمام پلتفرم هایی که از این زبان پشتیبانی می کنند اجرا می شود.همچنین قابلیت همکاری با کد Objective-C را نیز دارا می باشد.

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

Kotlin/Native currently supports the following platforms:


ساختار کد:

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

نوشتن آن به صورت تابعی(Functional) :

 package hello
 fun main(args: Array<String>) {
       println("Hello World")
 }

یک نمونه کد به صورت شیءگرا:

class Greeter(val name: String) {
   fun greet() { 
       println("Hello, $name")
      }
   }
fun main(args: Array<String>) {
    Greeter(args[0]).greet()
}  

یک نمونه کد برای اندروید:

import kotlinx.android.synthetic.main.activity_main.fab
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
            fab.setListener {
                    toast("Hello!")
            }     
      }
 }

ساخت کدهای HTML:

val data = mapOf(1 to "one", 2 to "two")
createHTML().table {
    for ((num, string) in data) {
            tr {
                       td { +"$num" } 
                       td { +string }
               }
           }
    }


منابع آموزشی کاتلین:

Tutorials Point
Kotlin Lang
Javatpoint
Kotlin Android

منابع :

سایت کاتلین

ویکی پدیا