برنامه‌نویسی اندروید, جذاب‌تر از قبل

اگر تابحال برنامه‌نویسی اندروید کرده باشین جدیدن خیلی اسم کاتلین رو باید شنیده باشین. توی این پست قصد دارم در مورد این زبان برنامه‌نویسی یکم بیشتر حرف بزنیم.این مطلب به خاطر داشتن نمونه کد در محیط ویرگول خوب نمایش داده نمیشود. برای مشاهده کامل نوشته به آدرس نوشته در بلاگم مراجعه کنین.http://ashkanam.ir/blog/introduction_to_kotlin/کاتلین (Kotlin) یک زبان برنامه‌نویسی اپن سورس هستش که کمپانی محبوب Jetbrains و خالق IntelliJ اونو ساختش، همون کمپانی که IDE های محبوبی مثل phpstorm, data grip, pycharm ,… و البته خود اندرویداستودیو رو ساخته، این‌بار با ساخت زبانی جدید و سطح بالا از سال ۲۰۱۱ قدم بزرگ و تحول تازه‌ای تو حوزه برنامه‌نویسی ایجاد کرد. این زبان به اصطلاح Statically Typed هست که به واسطه همین ویژگی، میشه با این زبان برای ماشین مجازی جاوا(JVM)، مرورگرها و البته اندروید برنامه‌نویسی کرد.اهمیت این زبان از وقتی شروع شد که امسال در کنفرانس گوگل۲۰۱۷ I/O که هر سال ۲۷ام اردیبهشت‌ماه برگزار میشه، این زبان رو به عنوان یکی از زبان‌های رسمی اندروید در کنار جاوا و سی‌پلاس‌پلاس معرفی کرد و نظر تمام توسعه‌دهنده‌های سراسر دنیا رو به خودش جلب کرد.در حال حاضر تا قبل از انتشار رسمی نسخه۳ اندروید‌استودیو میتونین از پلاگین کاتلین(+) توی اندروید‌استودیو استفاده کنین و یا کامپایلر این زبان رو به صورت مستقل نصب کنین و از طریق ترمینال برنامه‌هاتونو کامپایل و اجرا کنین. البته میتونین نسخه Preview اندرویداستودیو۳ رو هم دانلود(+) کنین و قابلیت‌‌های بسیار ویژه اضافه شده بهش رو تست کنین.یکی از جالب‌ترین ویژگی‌های کاتلین، تبدیل مستقیم کدهای جاوا به این زبان، اونم فقط با یک کلیک بدون تغییر سورس کد اصلی هستش که واقعن هیجان‌انگیزه و کاملن با java سازگاری داره و میتونین در کنارهمدیگه توی توسعه برنامه‌های اندرویدیتون ازش استفاده کنین. برای مقایسه کامل‌تر بین Java و Kotlin به اینجا (+) یک سر بزنین.دیگه خبری از خطای Null Reference Exception نیست! هر خط کدی که شامل این خطا باشه کلن کاتلین کامپایل نمیکنش.خبر دیگه اینکه گذاشتن سمی‌کولون در آخر هر خط کد اختیاریه. ?در ادامه میخوایم به صورت عملی چند نمونه از سینتکس کد کاتلین رو ببینیم تا به شیرینی و سادگی ولی در عین‌حال کاربردی و حرفه‌ای بودنش پی ببریم.JavaString firstName = "Ashkan"; String lastName = "Rahmani"; String message = "My name is: " + firstName + " " + lastName;Kotlinval firstName = "Ashkan" val lastName = "Rahmani" val message = "My name is: $firstName $lastName"Javaint getScore(int value) { // logic here return 2 * value; }Kotlinfun getScore(value: Int): Int = 2 * valueدر ادامه یکی از جذاب‌ترین و کاربردی‌ترین ویژگی‌های کاتلین رو میبینیم که در زبان ساده‌ای مثل پایتون هم دیده نمیشه!Javaint score = // some score; String grade; switch (score) { case 10: case 9: grade = "Excellent"; break; case 8: case 7: case 6: grade = "Good"; break; case 5: case 4: grade = "Ok"; break; case 3: case 2: case 1: grade = "Fail"; break; default: grade = "Fail"; }و حالا در !Kotlin :var score = // some score var grade = when (score) { ۹, ۱۰ -> "Excellent" in 6..8 -> "Good" ۴, ۵ -> "Ok" in 1..3 -> "Fail" else -> "Fail"}یک مثال جذاب دیگه از کاربرد when در Kotlin :fun main(args: Array<String>) { cases("Hello") cases(1) cases(0L) cases(MyClass()) cases("hello")} fun cases(obj: Any) { when (obj) { ۱ -> println("One") "Hello" -> println("Greeting") is Long -> println("Long") !is String -> println("Not a string") else -> println("Unknown") } } class MyClass() {}همونطور که در کد بالا میبینید به ورودی when هر مقداری مثل انواع مختلف داده‌ها، شی از کلاس‌ها میشه داد!!!توی قطعه کد پایین هم میبینیم که حتا when مثله یک تابع عمل میکنه و مقداری رو return میکنه:fun main(args: Array<String>) { val language = if (args.size == 0) "EN" else args[0] println(when (language) { "EN" -> "Hello!" "FR" -> "Salut!" "IT" -> "Ciao!" else -> "Sorry, I can't greet you in $language yet" })}یک نگاهی هم به ساختار کنترلی حلقه‌ها در کاتلین بندازیم:Javafor (int i = 1; i <= 10 ; i++) { } for (int i = 1; i < 10 ; i++) { } for (int i = 10; i >= 0 ; i--) { } for (int i = 1; i <= 10 ; i+=2) { } for (int i = 10; i >= 0 ; i-=2) { } for (String item : collection) { } for (Map.Entry<String, String> entry: map.entrySet()) { }Kotlinfor (i in 1..10) { } for (i in 1 until 10) { } for (i in 10 downTo 0) { } for (i in 1..10 step 2) {} for (i in 10 downTo 1 step 2) {} for (item in collection) {} for ((key, value) in map) {}به نظرم واسه نشون دادن سادگی و روانی این زبان همین چند مثال کافی باشه اما اگر بازم میخواین ادامه تفاوت‌های بین Java و Kotlin رو ببینین به اینجا (+) یک سر بزنین.قطعن مطالعه و مسلط شدن به این زبان برای توسعه‌دهنده‌های اندروید شاید بشه گفت واجب باشه چون هر لحظه ممکنه گوگل به طور کامل Kotlin رو جایگزین Java بکنه و این مطلب رو از علاقه کمپانی‌های بزرگی مثل Uber, Trello, Pinterest, Evernote, Coursera, … و جذبشون به سمت این زبان و پیشرفت سریع و حمایت رسمی گوگل از این زبان میشه فهمید.برای تست و کامپایل آنلاین و خوندن مثال‌های کاتلین حتمن به اینجا (+) یک سر بزنین. اگرم میخواین کامپایلر مستقل کاتلین رو داشته باشین و با هر ادیتور دلخواه کدتون رو بزنین و از طریق ترمینال کامپایل و اجرا کنین، دستور زیر رو توی ترمینال وارد کنین:curl -s https://get.sdkman.io | bashو بعد هم دستور زیر رو وارد کنین:sdk install kotlinحالا کامپایلر Kotlin به طور کامل نصب شد و اولین برنامه خودتون رو به صورت زیر بنویسین و کامپایل کنین:fun main(args: Array<String>) { println("Hello, World!")}این قطعه کد رو با نام hello.kt ذخیره کنین و با استفاده از دستور زیر کامپایل کنین:kotlinc hello.kt -include-runtime -d hello.jarآپشن -include-runtime در واقع کتابخانه‌های اجرایی کاتلین رو وارد فایل کرده و کد قابل اجرا, به صورت مستقل میشه. آپشن -d هم برای تعیین نام یا کلاس کامپایل شده.jar هستش.در نهایت با وارد کردن دستور زیر کد کامپایل شده خودتون رو اجرا کنین: java -jar hello.jarتبریک میگم! اولین برنامه Kotlin خودتون رو اجرا کردین. امیدوارم این پست برای شروع مفید باشه و در ادامه برای مطالعه بیشتر و تخصصی حتمن به داکیومنت‌های خود Kotlin از اینجا (+) سر بزنین.