برنامه نویسی اندروید با کاتلین — راهنمای شروع به کار

۵۱ بازدید
آخرین به‌روزرسانی: ۶ مهر ۱۳۹۸
زمان مطالعه: ۷ دقیقه

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

  • کاتلین چیست؟
  • چرا باید از کاتلین در اندروید استفاده کرد؟
  • ساختار درونی کاتلین چگونه است؟
  • جاوا چه تفاوتی با کاتلین دارد؟
  • قابلیت‌های موجود کاتلین کدام هستند؟

کاتلین چیست؟

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

«کاتلین» (Kotlin) یک زبان برنامه‌نویسی چندمنظوره، متن-باز و با نوع‌بندی استاتیک برای JVM، مرورگر، نیتیو و اندروید است که قابلیت‌های برنامه‌نویسی شیءگرا و برنامه‌نویسی تابعی را با هم ترکیب می‌کند.

در جولای سال 2011 میلادی JetBrains از پروژه کاتلین که زبانی برای HVM بود رونمایی کرد و پس از آن نیز یک سال تحت توسعه بود.

یکی از اهداف بیان شده برای کاتلین این بود که به اندازه جاوا سریع کامپایل شود. در فوریه سال 2012 میلادی، جت‌برینز پروژه را تحت لایسنس آپاچی 2 اوپن‌سورس کرد.

چرا برنامه نویسی اندروید با کاتلین توصیه می‌شود؟

نام زبان برنامه‌نویسی کاتلین از جزیره‌ای به همین نام در نزدیکی سنت پترزبورگ می‌آید. «آندری بریسلاو» (Andrey Breslav) اعلام کرده است که تیم تصمیم گفته است نام این زبان را همانند جاوا که نام خود را از جزیره‌ای در اندونزی گرفته است، از روی این جزیره اخذ کند.

کاتلین به طور رسمی از سوی گوگل برای توسعه موبایل روی اندروید پشتیبانی می‌شود. از زمان انتشار اندروید استودیو 3.0 در اکتبر 2017، کاتلین به عنوان جایگزین برای کامپایلر استاندارد جاوا در آن گنجانده شده است. کامپایلر کاتلین اندروید به کاربر امکان می‌دهد که بین بایت‌کد سازگار با جاوا 6 یا 8 انتخاب کند.

از 7 می 2019، کاتلین به زبان ترجیحی گوگل برای توسعه اپلیکیشن‌های اندروید تبدیل شده است. یا به زبان ساده‌تر گوگل به توسعه دهندگان می‌گوید بهتر است برنامه نویسی اندروید با کاتلین انجام شود.

  • سازگاری: کاتلین با JDK6 سازگار است، از این رو دستگاه‌های قدیمی از گردونه عقب نمی‌مانند.
  • عملکرد: کاتلین از نظر عملکردی با جاوا برابری می‌کند.
  • هم‌کنش‌پذیری: کاتلین 100% با جاوا از جمله با «حاشیه‌نویسی‌ها» (annotations) همکنش پذیر است.
  • زمان کامپایل: در بیلد‌های تمیز مقداری سربار وجود دارد، اما در بیلدهای افزایشی کمی سریع‌تر است.
  • منحنی یادگیری: یادگیری کاتلین به خصوص برای کسانی که به زبان‌های مدرن عادت دارند، آسان است. مبدل جاوا به کاتلین در IntelliJ یا اندروید استودیو این یادگیری را هر چه بیشتر تسهیل می‌کند. می‌توان از ترکیبی از کاتلین و جاوا نیز در یک پروژه استفاده کرد، بنابراین می‌توانید زمان خود را صرف یادگیری کاتلین بکنید و زمانی که کاملاً مطمئن بودید از آن استفاده عملی بکنید.

ساختار داخلی کاتلین چگونه است؟

کاتلین نیز دقیقاً مانند جاوا یک زبان کامپایل شونده است. این بدان معنی است که پیش از آن که بتوانید کد کاتلین را اجرا کنید، باید آن را کامپایل کنید. در ادامه به توضیح چگونگی فرایند کامپایل شدن و ابزارهای مختلفی که این فرایند را تسهیل می‌کنند می‌پردازیم.

کد منبع کاتلین به طور معمول در فایل‌هایی با پسوند kt. نگهداری می‌شود. کامپایلر کاتلین کد منبع را آنالیز می‌کند و فایل‌های class. را تولید می‌کند که دقیقاً همانند کاری است که کامپایلر جاوا انجام می‌دهد. در ادامه فایل‌های ‎.class تولید شده، بسته‌بندی‌شده و با استفاده از رویه استاندارد برای نوع اپلیکیشنی که روی آن کار می‌کنید، اجرا می‌شوند.

تفاوت‌های جاوا با کاتلین کدام هستند؟

در این بخش برخی از تفاوت‌های جاوا با کاتلین را به صورت عملی نمایش می‌دهیم.

پرینت کردن در کنسول

Java
System.out.print("Amit Shekhar");
System.out.println("Amit Shekhar");

Kotlin
print("Amit Shekhar")
println("Amit Shekhar")

ثابت‌ها و متغیرها

*var (Mutable variable)

*val (Immutable variable)

Java
String name = "Amit Shekhar";
final String name = "Amit Shekhar";

Kotlin
var name = "Amit Shekhar"
val name = "Amit Shekhar"

انواع داده

منظور از نوع داده، نوع و اندازه داده‌هایی مرتبط با متغیرها و تابع‌ها است. نوع داده برای اعلان موقعیت حافظه‌ی متغیر که قابلیت‌های داده را تعیین می‌کند استفاده می‌شود. در کاتلین همه چیز یک شیء است. معنی این حرف آن است که می‌توانیم تابع عضو و مشخصه‌های روی هر متغیر را فراخوانی کنیم.

  • Number
  • Character
  • Boolean
  • Array
  • String

انتساب مقدار تهی

Java
String otherName;
otherName = null;

Kotlin
var otherName: String?
otherName = null

بررسی تهی بودن یک مقدار

Java 
 if (text != null) { 
   int length = text.length(); 
 } 
 
Kotlin 
 text?.let { 
     val length = text.length 
 } 
 // or simply 
 val length = text?.length

الحاق رشته‌ها

Java 
 String firstName = "Amit"; 
 String lastName = "Shekhar"; 
 String message = "My name is: " + firstName + " " + lastName; 
Kotlin 
 var firstName = "Amit" 
 var lastName = "Shekhar" 
 var message = "My name is: $firstName $lastName"

ایجاد خط جدید در یک رشته

Java 
 String text = "First Line\n" + 
               "Second Line\n" + 
               "Third Line"; 
Kotlin 
 val text = """ 
         |First Line 
         |Second Line 
         |Third Line 
         """.trimMargin()

عملگر سه‌تایی

Java 
 
 String text = x > 5 ? "x > 5" : "x <= 5"; 
 
 String message = null; 
 log(message != null ? Message : ""); 
 
Kotlin 
 val text = if (x > 5) "x > 5" else "x <= 5" 
 
 val message: String? = null 
 log(message ?: "")

عملگرهای بیتی

Java 
 final int andResult  = a & b; 
 final int orResult   = a | b; 
 final int xorResult  = a ^ b; 
 final int rightShift = a >> 2; 
 final int leftShift  = a << 2; 
 final int unsignedRightShift = a >>> 2; 
 
Kotlin 
 val andResult  = a and b 
 val orResult   = a or b 
 val xorResult  = a xor b 
 val rightShift = a shr 2 
 val leftShift  = a shl 2 
 val unsignedRightShift = a ushr 2

بررسی نوع و تبدیل نوع

Java 
 if (object instanceof Car) { 
 } 
 Car car = (Car) object; 
 
Kotlin 
 if (object is Car) { 
 } 
 var car = object as Car 
 // if object is null 
 var car = object as? Car  
 // var car = object as Car?

شرایط چندگانه (Switch Case)

Java 
 int 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) { 
 9, 10 -> "Excellent" 
 in 6..8 -> "Good" 
 4, 5 -> "OK" 
 in 1..3 -> "Fail" 
 else -> "Fail" 
 }

حلقه for

Java 
 
 for (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()) { } 

Kotlin 
 for (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 0 step 2) { } 
 
 for (item in collection) { } 
 
 for ((key, value) in map) { }

کلکسیون‌ها

Java 
 final List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4); 
 final Map<Integer, String> keyValue = new HashMap<Integer, String>(); 
 map.put(1, "Amit"); 
 map.put(2, "Ali"); 
 map.put(3, "Mindorks"); 
 // Java 9 
 final List<Integer> listOfNumber = List.of(1, 2, 3, 4); 
 final Map<Integer, String> keyValue = Map.of(1, "Amit", 
                                              2, "Ali", 
                                              3, "Mindorks"); 
 
Kotlin 
 val listOfNumber = listOf(1, 2, 3, 4) 
 val keyValue = mapOf(1 to "Amit", 
                      2 to "Ali", 
                      3 to "Mindorks")

تعریف متدها

Java 
 void doSomething() { 
    // logic here 
 } 
 
Kotlin 
 fun doSomething() { 
    // logic here 
 }

تعداد آرگومان‌های متغیر

Java 
 void doSomething(int... numbers) { 
    // logic here 
 } 
 
Kotlin 
 fun doSomething(vararg numbers: Int) { 
    // logic here 
 }

تعریف متدها با return

Java 
 int getScore() { 
    // logic here 
    return score; 
 } 
Kotlin 
 fun getScore(): Int { 
    // logic here 
    return score 
 } 
 // as a single-expression function 
 fun getScore(): Int = score 
 // even simpler (type will be determined automatically) 
 fun getScore() = score // return-type is Int

قابلیت‌های موجود در کاتلین کدام هستند؟

در این بخش برخی از قابلیت‌هایی که صرفاً در کاتلین وجود دارند را معرفی می‌کنیم.

مقداردهی اولیه با تأخیر (lazy Initialization)

مقداردهی با تأخیر (by lazy) در مواردی که مشغول پیاده‌سازی مشخصه‌های فقط-خواندنی هستیم که به صورت با تأخیر در کاتلین اجرا می‌شوند مفید خواهد بود. by lazy { … } مقداردهی اولیه خود را جایی انجام می‌دهد که مشخصه اولین بار استفاده می‌شود و نه در زمان اعلان کردن آن.

class Demo { val myName: String by lazy { "John" } }

مقداردهی کند

مقداردهی کند متغیرها به این معنی است که توسعه‌دهندگان قبل از دسترسی به متغیر آن را جایی در کد مقداردهی اولیه می‌کنند.

class Demo { val myName: String by lazy { "John" } }

کلاس داده

ما به طور مکرر کلاس‌هایی می‌سازیم که کاری به جز نگهداری داده‌ها ندارند. در چنین کلاس‌هایی برخی کارکردهای استاندارد غالباً به صورت مکانیکی از داده‌ها مشتق می‌شوند. در کاتلین، این کار در کلاس داده اجرا می‌شود و به صورت داده‌ای علامت‌گذاری می‌شود.

data class Developer(val name: String, val age: Int)

زمانی که یک کلاس به صورت کلاس داده علامت‌گذاری شود، نیاز نیست که تابع‌های زیر را مانند جاوا در آن پیاده‌سازی یا ایجاد کنیم:

  • ()hashCode
  • ()equals
  • ()toString
  • ()copy

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

کلاس‌های مهر و موم شده

کلاس‌های مهر و موم شده برای نمایش سلسله مراتب کلاس محدودشده استفاده می‌شوند که در آن‌ها شیء یا مقدار تنها یک نوع می‌تواند داشته باشد و از این رو با نوع ثابتی در سلسله مراتب مواجه هستیم. کلاس‌های مهر و موم شده به طور مکرر در موارد مختلفی که می‌دانیم مقدار مفروضی دارای صرفاً گزینه‌های محدودی است، استفاده می‌شوند.

sealed class Operation { 
     class Add(val value: Int) : Operation() 
     class Substract(val value: Int) : Operation() 
     class Multiply(val value: Int) : Operation() 
     class Divide(val value: Int) : Operation() 
 }

تابع‌های اکستنشن

تابع‌های اکستنشن در کاتلین به ما امکان می‌دهند که کارکرد یک کلاس را با افزودن قابلیت‌های جدید بسط دهیم. این کلاس لزوماً نباید به ما تعلق داشته باشد، بلکه می‌تواند کتابخانه شخص ثالث باشد و همچنین الزامی به ارث‌بری از کلاس وجود ندارد.

fun Int.triple(): Int { 
   return this * 3 
 }

به این ترتیب به انتهای این مقاله می‌رسیم و امیدواریم از آن بهره کافی را برده باشید.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱۴ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
swlh
One thought on “برنامه نویسی اندروید با کاتلین — راهنمای شروع به کار

سلام،
لطفا کمکم کنید هر کاری میکنم در اندروید استودیو با زبان کاتلین موفق نمیشم اجرای کد اشیاء رو به طور خودکار داشته باشم.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *