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

در این مطلب، به بررسی زبان برنامه‌نویسی کاتلین (Kotlin Programming Language) پرداخته شده است. جامعه توسعه‌دهندگان نرم‌افزارهای کاربردی موبایل که از زبان کاتلین استفاده می‌کنند، به سرعت در حال افزایش است. در سال ۲۰۱۷، گوگل، کاتلین را به عنوان دومین زبان رسمی خود برای توسعه اندروید معرفی کرد. از آن زمان تاکنون، رشد بسیار بزرگ و مهمی در تقاضا برای این زبان برنامه‌نویسی در میان توسعه‌دهندگان و جوامع کسب و کار به وقوع پیوسته است. گوگل در حال حاضر زبان برنامه نویسی کاتلین را به عنوان یکی از بهترین زبان‌های برنامه‌نویسی برای توسعه اپلیکیشن‌های اندرویدی اعلام کرده است. این نشان می‌دهد که آینده خوبی در انتظار این زبان برنامه‌نویسی است.زبان برنامه نویسی کاتلین«کاتلین» (Kotlin) یک زبان برنامه‌نویسی «تایپ استاتیک» (Statically Typed) و «همه‌منظوره» (General-Purpose) است که توسط «جت‌برینز» (JetBrains) توسعه داده شده و دارای «محیط‌های توسعه یکپارچه» (Integrated Development Environment) کلاس جهانی مانند «اینتلیج آیدیا» (IntelliJ IDEA)، «پی‌اچ‌پی‌استورم» (PhpStorm)، «اپ‌کد» (Appcode) و دیگر موارد است.«کاتلین» (Kotlin) ابتدا و در سال ۲۰۱۱ میلادی توسط جت‌برینز به عنوان زبان جدیدی برای JVM معرفی شد. این زبان، یک زبان برنامه‌نویسی «شی‌گرا» (Object Oriented) است و به زعم بسیاری از افراد، بهتر از «جاوا» (Java) محسوب می‌شود.گوگل اسپانسر کاتلین است. این زبان در سال ۲۰۱۷، توسط گوگل، به عنوان دومین زبان رسمی برای توسعه اندروید معرفی شد. مثالی از کد نوشته شده به این زبان، در ادامه ارائه شده است.1234fun main(){println("Hello Geeks");}ویژگی‌های کلیدی کاتلیندر ادامه، برخی از ویژگی‌های کلیدی زبان برنامه نویسی کاتلین مورد بررسی قرار می‌گیرد.تایپ استاتیک: تایپ استاتیک یک مشخصه برنامه‌نویسی کامپیوتری است؛ بدین معنا که نوع هر متغیر و عبارت در زمان کامپایل شناخته می‌شود. با وجود اینکه کاتلین یک زبان تایپ استاتیک است، نیاز به این ندارد که نوع هر متغیر صراحتا «اعلان» (Declare) شود.کلاس‌های داده: در این زبان، «کلاس‌های داده‌ای» (Data Classes) وجود دارد که منجر به تولید خودکار تساوی‌های قابل استفاده مجدد (Boilerplate Like Equals)، «هش کد» (HashCode) و toString و بسیاری از گزینه‌های دیگر می‌شود.کد جاوای زیر، در این راستا مثال زیر قابل توجه است./* Java Code */class Book {private String title;private Author author;public String getTitle(){return title;}public void setTitle(String title){this.title = title;}public Author getAuthor(){return author;}public void setAuthor(Author author){this.author = author;}اما در کاتلین، تنها از یک خط برای تعریف کلاس بالا استفاده می‌شود.12/* Kotlin Code */data class Book(var title:String, var author:Author)اختصار: این زبان، به طور چشم‌گیری میزان کدی که نیاز به نوشتن آن برای یک منظور خاص است را نسبت به کدهای مورد نیاز برای همان کار در دیگر زبان‌های برنامه‌نویسی شی‌گرا، کاهش می‌دهد.امنیت: زبان برنامه نویسی کاتلین امنیت را در مواجهه با NullPointerExceptions با پشتیبانی از Nullability به عنوان بخشی از سیستم خود، استفاده می‌کند. هر متغیری در این زبان، به طور پیش‌فرض غیر نال است.1String s = "Hello Geeks" // Non-nullاگر تلاش شود تا به s یک مقدار نال تخصیص داده شود، خطای زمان کامپایل نمایش داده می‌شود.1s = null // compile time errorبرای تخصیص مقدار Null به هر رشته، آن را باید به عنوان رشته قابل نال شدن (Nullable) معرفی کرد.1String nullableStr? = null // compiles succesfullyتابع length‎()‎ در رشته قابل نال شدن غیر فعال شده است.قابل تفسیر با جاوا: کاتلین روی «ماشین مجازی جاوا» (Java Virtual Machine | JVM) نیز اجرا می‌شود؛ بنابراین به طور کلی با جاوا قابل تفسیر است. می‌توان به سادگی به کد جاوا از کاتلین و از جاوا به کد کاتلین دسترسی داشت.قابلیت‌های تابعی و شی‌گرا: کاتلین دارای غنی‌ترین مجموعه از ابزارهای کارآمد بسیاری است که شامل توابع سطح بالاتر، عبارات لاندا (Lambda Expression)، «سربارگذاری عمل‌گرها» (Operator Overloading)، «ارزیابی کندرو» یا «فراخوانی به هنگام نیاز» (Lazy Evaluation) و بسیاری از دیگر موارد می‌شود. تابع مرتبه بالاتر، تابعی است که تابع را به عنوان پارامتر دریافت می‌کند و یا تابع را باز می‌گرداند و یا هر دو کار را انجام می‌دهد. مثالی از «تابع مرتبه بالاتر» (Higher-Order Function) در ادامه ارائه شده است.fun myFun(company: String,product: String, fn: (String,String) -> String): Unit {val result = fn(company,product)println(result)}fun main(args: Array){val fn:(String,String)->String={org,portal->"$org develops $portal"}myFun("JetBrains","Kotlin",fn)}خروجی قطعه کد بالا به صورت زیر است.JetBrains develops Kotlinاسمارت کَست (Smart Cast): زبان کاتلین به طور صریح به «تبدیل کردن نوع» (تایپ کَست یا Typecast) مقادیر غیر قابل تغییر (Immutable) می‌پردازد و مقادیر را به طور خودکار در اسمارت کَست قرار می‌دهد.تلاش برای دسترسی داشتن به یک نوع قابل نال کردن از رشته (”String? = “BYE) بدون استفاده از اسمارت کَست، منجر به ایجاد خطای کامپایل می‌شود.12345fun main(args: Array){var string: String? = "BYE"print(string.length) // compile time error}fun main(args: Array){var string: String? = "BYE"if(string != null) { // smart castprint(string.length)}}زمان کامپایل: کاتلین، نسبت به برخی از دیگر زبان‌ها، دارای کارایی بالاتر و زمان اجرای سریع‌تری است.ابزارپسندی (Tool- Friendly): زبان کاتلین دارای پشتیبانی فوق‌العاده‌ای از ابزارها است. همه IDEهای جاوا (IntelliJ IDEA، «ایکیلیپس» (Eclipse) و اندروید استودیو)، برای کاتلین قابل استفاده هستند. همچنین، می‌توان برنامه کاتلین را از خط فرمان اجرا کرد.مزایای زبان کاتلیندر ادامه، برخی از مزایای زبان برنامه‌نویسی کاتلین مورد بررسی قرار می‌گیرد.یادگیری آسان: مبانی آن مشابه زبان برنامه‌نویسی جاوا است. در واقع می‌توان گفت، هر کس که بتواند با جاوا کار کند، می‌تواند کاتلین را به سادگی درک کند.کاتلین چندسکویی است: کاتلین توسط IDE‌های گوناگون جاوا پشتیبانی می‌شود، بنابراین می‌توان برنامه‌ها را به زبان کاتلین نوشتن و آن را روی هر ماشینی که JVM را پشتیبانی می‌کند اجرا کرد.از جاوا امن‌تر است.امکان استفاده از چارچوب جاوا و کتابخانه‌های آن را در پروژه‌های کاتلین با استفاده از چارچوب‌های پیشرفته و بدون نیاز به تغییر کل پروژه در جاوا، فراهم می‌کند.زبان برنامه‌نویسی کاتلین دارای کامپایلر و کتابخانه‌های گوناگونی است؛ همچنین، همه ابزارهای آن کاملا رایگان و متن‌باز است و روی گیت‌هاب قرار دارد. گیت‌هاب کاتلین از این مسیر [+] در دسترس است.کاربردهای زبان کاتلینمی‌توان از کاتلین برای ساخت برنامه‌های کاربردی اندرویدی استفاده کرد.کاتلین را می‌توان به جاوا اسکریپت کامپایل کرد و بدین شکل، از این زبان برای «فرانت‌اند» (Frontend) نیز استفاده کرد.زبان کاتلین برای توسعه وب و توسعه سمت سرور نیز به خوبی قابل استفاده است