کاتلین چست؟ دلیل توصیه گوگل بر این زبان چیست؟
ویدئو:
مدتی است که کاتلین به نقل محفل برنامه نویسان اندروید و Trend روز برنامه نویسان ایرانی و جهانی تبدیل شده است. در حال حاضر کمتر وب سایتی را مشاهده خواهید کرد که آموزش کاتلین و یا معرفی آن را به گونه ای پوشش نداده باشد . در این فرصت به معرفی جامعی از کاتلین و ویژگی های آن می پردازیم همچنین شرکت های معروفی که از این زبان بهره برده اند را معرفی خواهیم کرد.
زبان کاتلین یک زبان ایستا که توسط برنامه نویسان مستقر در روسیه توسعه داده شده است. کاتلین این قابلیت را دارد تا بر روی ماشین مجازی جاوا اجرا شود. و همینطور می توان به زبان جاوا اسکریپت نیز آن را کامپایل نمود.
جامعه توسعهدهندگان نرمافزارهای کاربردی موبایل که از زبان کاتلین استفاده میکنند، به سرعت در حال افزایش است. در سال ۲۰۱۷، گوگل، کاتلین را به عنوان دومین زبان رسمی خود برای توسعه اندروید معرفی کرد. از آن زمان تاکنون، رشد بسیار بزرگ و مهمی در تقاضا برای این زبان برنامهنویسی در میان توسعهدهندگان و جوامع کسب و کار به وقوع پیوسته است. گوگل در حال حاضر زبان برنامه نویسی کاتلین را به عنوان یکی از بهترین زبانهای برنامهنویسی برای توسعه اپلیکیشنهای اندرویدی اعلام کرده است. این نشان میدهد که آینده خوبی در انتظار این زبان برنامهنویسی است.
تاریخچه:
کاتلین در سال ۲۰۱۱ توسط کمپانی Jetbrains معرفی شد و اولین ورژن پایدار((Stable آن در سال ۲۰۱۶ به نام ورژن 1.0 ارائه شد.
سرپرست تیم توسعه دهندگان کاتلینAndrey Breslav بیان داشته که کاتلین یک زبان قدرتمند و شیءگرا است که قصد دارد از جاوا بهتر عمل کند و به برنامه نویسان جاوا اجازه مهاجرت تدریجی به این زبان را بدهد.
در سال ۲۰۱۷ گوگل رسما این زبان را به عنوان زبان دوم برنامه نویسی برای اندروید معرفی کرد.
کنفرانس IO17 گوگل رسما از کاتلین پشتیبانی کرد و آن را زبانی جدید برای توسعه اپلیکیشن های اندروید قرار داد، کاتلین بیشتر برای توسعه اپلیکیشن های اندروید شناخته شد. در حقیقت از این تاریخ به بعد بود کهKotlin توجه بیشتری از برنامه نویسان به خود جلب کرد. البته این جلب توجه غیرمنتظره نبود زیرا کاتلین زبانی ذاتا کامپایل شده است و سریع تر از زبان های دیگر عمل میکند و در نتیجه اپلیکیشن هایی بهتر و قوی تری میتوان با آن تولید کرد. از همه مهم تر اینکه این زبان با زبان های پر استفاده دیگر اندروید مانند جاوا کاملا سازگار است.
کاتلین یک زبان منبع باز محسوب میشود که ویژگی های برنامه نویسی شی گرا و ماژولار را با هم ترکیب کرده است . نام کاتلین از جزیره ای به همین نام در اطراف سن پترزبورگ روسیه گرفته شده است . به این دلیل که بیشتر کارهای توسعه Kotlin در شعبه سن پترزبورگ JetBrains انجام شد.
ویژگیهای کلیدی:
· تایپ استاتیک: تایپ استاتیک یک مشخصه برنامهنویسی کامپیوتری است؛ بدین معنا که نوع هر متغیر و عبارت در زمان کامپایل شناخته میشود. با وجود اینکه کاتلین یک زبان تایپ استاتیک است، نیاز به این ندارد که نوع هر متغیر صراحتا اعلان شود.
· کلاسهای داده: در این زبان، کلاسهای دادهای وجود دارد که منجر به تولید خودکار تساویهای قابل استفاده مجدد و بسیاری از گزینههای دیگر میشود.
برای بررسی دقیق تر دو نمونه کد از زبان جاوا و کاتلین را مشاهده میکنیم که هر دو یک وظیفه را عملی میکنند.
/* Kotlin Code */
data class Book(var title:String, var author:Author)
/* 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;
}
** به سادگی تفاوت این دو زبان به چشم می خورد.
· اختصار: این زبان، به طور چشمگیری میزان کدی که نیاز به نوشتن آن برای یک منظور خاص است را نسبت به کدهای مورد نیاز برای همان کار در دیگر زبانهای برنامهنویسی شیگرا، کاهش میدهد.
· امنیت: زبان برنامه نویسی کاتلین امنیت را در مواجهه با NullPointerExceptions با پشتیبانی ازNullability به عنوان بخشی از سیستم خود، استفاده میکند. هر متغیری در این زبان، به طور پیشفرض غیر نال است.
· قابل تفسیر با جاوا: کاتلین روی ماشین مجازی جاوا نیز اجرا میشود؛ بنابراین به طور کلی با جاوا قابل تفسیر است. میتوان به سادگی به کد جاوا از کاتلین و از جاوا به کد کاتلین دسترسی داشت.
· قابلیتهای تابعی و شیگرا: کاتلین دارای غنیترین مجموعه از ابزارهای کارآمد بسیاری است که شامل توابع سطح بالاتر، عبارات لامدا یا Lambda Expression، سربارگذاری عملگرها، ارزیابی کندرو یا فراخوانی به هنگام نیاز و بسیاری از دیگر موارد میشود. تابع مرتبه بالاتر، تابعی است که تابع را به عنوان پارامتر دریافت میکند و یا تابع را باز میگرداند و یا هر دو کار را انجام میدهد. مثالی از تابع مرتبه بالاتر در ادامه ارائه شده است.
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
· اسمارت کَست: زبان کاتلین به طور صریح به تبدیل کردن نوع مقادیر غیر قابل تغییر میپردازد و مقادیر را به طور خودکار در اسمارت کَست قرار میدهد.
· تلاش برای دسترسی داشتن به یک نوع قابل نال کردن از رشته بدون استفاده از اسمارت کَست، منجر به ایجاد خطای کامپایل میشود.
· زمان کامپایل: کاتلین، نسبت به برخی از دیگر زبانها، دارای کارایی بالاتر و زمان اجرای سریعتری است.
· ابزارپسندی یاTool- Friendly : زبان کاتلین دارای پشتیبانی فوقالعادهای از ابزارها است. همه IDE های جاوا برای کاتلین قابل استفاده هستند. همچنین، میتوان برنامه کاتلین را از خط فرمان اجرا کرد.
· کاتلین بر روی پلتفرم های مختلفی اجرا و پیاده سازی می شود. از جمله سرور یا اندروید یا به صورت محلی یا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)
می باشد.
مزایا:
اولین دلیلی که میتوان برای استفاده از کاتلین نام برد سازگاری کامل کاتلین با جاواست . شما در هر جای پروژه ای که با جاوا نوشته اید میتوانید از کدهای کاتلین هم استفاده کنید و نگران هیچ مشکلی مانند افت سرعت اجرای پروژه خود نباشید . از طرف دیگر شما میتوانید کدهای جاوا را به کاتلین و بالعکس تبدیل کنید. هر مقدار از پروژه ای که به زبان جاوا نوشته اید میتوانید به راحتی به زبان کاتلین تبدیل کنید و از ویژگی های زبان کاتلین به طور کامل استفاده کنید.
· یادگیری آسان: مبانی آن مشابه زبان برنامهنویسی جاوا است. در واقع میتوان گفت، هر کس که بتواند با جاوا کار کند، میتواند کاتلین را به سادگی درک کند.
· کاتلین چندسکویی است: کاتلین توسط IDEهای گوناگون جاوا پشتیبانی میشود، بنابراین میتوان برنامهها را به زبان کاتلین نوشتن و آن را روی هر ماشینی که JVM را پشتیبانی میکند اجرا کرد.
· از جاوا امنتر است.
· امکان استفاده از چارچوب جاوا و کتابخانههای آن را در پروژههای کاتلین با استفاده از چارچوبهای پیشرفته و بدون نیاز به تغییر کل پروژه در جاوا، فراهم میکند.
· زبان برنامهنویسی کاتلین دارای کامپایلر و کتابخانههای گوناگونی است؛ همچنین، همه ابزارهای آن کاملا رایگان و متنباز است و روی گیتهاب قرار دارد.
کاربردها:
از کوتلین می توانید برای هر نوع برنامه نویسی چه در سمت سرور و client و چه اندروید استفاده کنید. با کمکKotlin/Native شما می توانید از پشتیبانی مک و IOS نیز بزودی بهره مند شوید. بیشتر افراد از کوتلین برای موبایل و تحت وب استفاده می کنند و برای برنامه نویسی سمت Client از جاوا اسکریپت و جاوا Fx استفاده می شود. Data science نیز جزو گزینه های موجود است.
استفاده از کاتلین برای توسعه سمت سرور:
کاتلین برای توسعه سمت سرور مناسب است. زیرا با کد مختصر و حفظ سازگاری و قدرت بیان با استفاده از کتابخانه های مبتنی بر جاوا به امکانات زیر دست پیدا می کنید:
- وضوح
- مقیاس پذیری
- هماهنگی و سازگاری با کتابخانه های جاوا
- ابزار های زیاد مثل پشتیبانی 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:
- 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)
ساختار کد:
مشابه با 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 }
}
}
}
برنامههای معتبر:
تعدادی از برنامه هایی که با کاتلین نوشته شده اند:
سرویس اجتماعی معروف اشتراک عکس تصمیم گرفت از Kotlin استفاده کند و در برنامه Android خود از جاوا بهره ببرد. آنها مزایا و معایب استفاده از Kotlin را در تولید در Droidcon NYC 2016 ارائه دادند. چیزی که ممکن است کمی عجیب باشد، این است کهKotlin در چنین برنامه محبوب با پایگاه کاربری گسترده اش حتی قبل از اینکه گوگل اولین پشتیبانی از این زبان را اعلام کند، استفاده کرد.
· کورسرا
Coursera یک شرکت آموزشی است که دوره های آموزشی آنلاین را که توسط دانشگاه ها و موسسات برجسته مانند استنفورد و ییل برگزار می شود، ارائه می دهد. Coursera سازمان هایAndroid و iOS جداگانه ندارد. آنها فقط مفهوم تلفن همراه را دارند و به همین دلیل تصمیم گرفتند ازKotlin استفاده کنند. Kotlin شبیهSwift است، یک زبان برنامه نویسی نسبتا جدید برای توسعهiOS است که این موضوع باعث ساده تر به اشتراک گذاری دانش بین مهندسان، ارتباطات بهتر و توسعه کلی کارآمدتر می شود.
· Trello
Trello یک برنامه مدیریت شناخته شده پروژه است که در حال حاضر متعلق به Atlassian است. ترلو برای برنامه ی Android خود، کد های جدید ش را درKotlin نوشته است.همکاری با Java وKotlin ممکن است به لطف قابلیت همکاری عالی بین دو زبان باشد.
· Evernote
Evernote یک برنامه طراحی شده برای ضبط، سازماندهی، لیست کارها و بایگانی است. Evernote برای مشتریان اندروید خود از زبان کاتلین بهره برده است.
· Basecamp 3
برنامه ای که به مدیریت کسب و کارهای کوچک در حال رشد کمک می کند. این به طور کامل در Kotlin نوشته شده است و توسعه دهندگانBasecamp ادعا می کنند که انتخاب Kotlin منجر به تفاوت های بزرگی در آسایش، کیفیت و سرعت کار آنها شد.
· Twidere برای توییتر
منبع باز، ۱۰۰ درصد طراحی مرورگر توییتر با material design، افزایش تجربه کاربر توییتر. همهی این ها در کوتلین نوشته شده است، اگر چه برخی از کدهای جاوا هنوز در آن وجود دارد.
· سایه ها
یکcross-platform با عملکرد و امنیت بالا است که ازProxy Socks5 پشتیبانی کرده و کمک می کند تا در هنگام مرور اینترنت افزایش امنیت و حریم خصوصی داشته باشید. Shadowsocks از زبان کاتلین برای مشتریان اندرویدی خود بهره برده است. Shadowsocks هر دو توسط کاربران در Google Play و سایر توسعه دهندگان قدردانی می شود.
· Simple Calendar
یک تقویم ساده و Open source بدون نیاز به مجوز های خاص. این برنامه، جزئی از پک کامل موبایلی Simple Mobile Tools می باشد. همهی این برنامه هاOpen Source بوده و در کوتلین نوشته شدند.
· برنامه KotlinConf
KotlinConf یک کنفرانس توسعه دهندگان است که توسط سازندگان کوتلین JetBrains میزبانی شده است. هیچ راهی وجود ندارد که برنامه کنفرانس رسمی در یک زبان دیگر نوشته شود. واقعا جالب است این است که نه تنها برای مشتریان Android این برنامه درKotlin نوشته شده بلکه برنامه وب، سرور و IOS نیز دارد. این فقط نشان دهنده پتانسیل عالی این زبان است.
· برنامه رسمی کنفرانس Driodkaigi 2018
DroidKaigi 2018 یک کنفرانس برای برنامه نویسان اندرویدی است که در توکیو سازمان دهی می شود. این یکی دیگر از برنامه هایی است که توسط کوتلین نوشته شده ولی این بار کنفرانس توسط خلاقان این برنامه برگزار نمی شود. این موضوع نشان دهنده ی محبوبیت بالای کوتلین در بین اندرویدی هاست.
تجربه شخصی:
بنابر تجربه شخصی بنده کاتلین از جاوا در برنامه نویسی اندروید کارامدی و آسودگی را به همراه دارد اما تنها نکته ای که توسط همکاران بنده نیز اشاره میشود، اختیاری بودن کنترل exeption هاست که در زبان جاوا اجباری بود. بدین معنی که در زبان کاتلین برنامه نویس مجبور به کنترل exeption یا همان exeption handling نیست و زمان compile از او ایراد گرفته نمی شود.
سوالات متداول:
· کوتلین یا همان کاتلین چه چیزی را تشکیل می دهد؟
هنگامی کهJVM را هدف قرار می دهد، کوتلین بایت کد های سازگار با جاوا را تولید می کند. هنگامی که جاوا اسکریپت را هدف قرار می دهد، کوتلین بهES5.1 رجوع می کند و کد را تولید می کند که سازگار با سیستم های ماژول از جمله AMD و CommonJS است. وقتی کوتلین بومی (Kotlin / Native) را هدف قرار میدهد، کد مخصوص پلتفرم را تولید می کند.
· آیا کوتلین فقط جاوا ۶ را هدف قرار می دهد؟
Kotlin به شما اجازه می دهد بین تولید کننده های Java 6 و Java 8 کدهای سازگار با نسخه موردنظر را انتخاب کنید. اکثر کد های بهینه ممکن است برای نسخه های بالاتر پلتفرم تولید شود.
· کدام شرکت ها از KOTLIN استفاده می کنند؟
شرکت های زیادی وجود دارند که از Kotlin استفاده می کنند، اما برخی از شرکت های مشهور دیگری که به طور عمومی استفاده از Kotlin اعلام کرده اند، از طریق پست های وبلاگ، مخازن GitHub یا مذاکرات شاملSquare، Pinterest یاBasecamp است.
· آیا کوتلین یک جامعه دارد؟
بله کوتلین جامعه بسیار پر جنب و جوش دارد. توسعه دهندگان Kotlin در انجمن هایKotlin، StackOverflow و Kotlin Slack فعال هستند.
· آیا کوتلین در رسانه های اجتماعی است؟
بله فعال ترین حساب Kotlin در توییتر است. همچنین یک گروه + Google وجود دارد.
منابع:
· https://www.geeksforgeeks.org/introduction-to-kotlin
https://www.geeksforgeeks.org/kotlin-programming-language
· https://blog.faradars.org/kotlin-programming-language
· https://kotlinlang.org
· https://fa.wikipedia.org/wiki/کوتلین
مطلبی دیگر از این انتشارات
آشنایی با انواع نگارش واژگان در برنامه نویسی (تعریف متغیر و ...)
مطلبی دیگر از این انتشارات
تطبیق پذیری رشته های عصبی و یادگیری برنامه نویسی
مطلبی دیگر از این انتشارات
وبینار آشنایی با شنوایی ماشین؛ آیا ماشینها میشنوند؟