خانه » Kotlin » اندروید با kotlin » Android با kotlin قسمت اول Hello World

Android با kotlin قسمت اول Hello World

زبان جدید رسمی اندروید kotlin معرفی شده، و از این پس روی این زبان بیشتر کار میشه.

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

حالا اینکه حتما باید این زبان رو یاد بگیریم یا نه، آیا دیگه از جاوا پشتیبانی نمیشه و این حرف هارو نمیدونم، اما خود من ترجیح میدم یه نیم نگاهی بهش داشته باشم، تا در صورتی که جاوا کمتر پشتیبانی شد، به مشکل نخورم، حقیقتا در پروژه جدید هم که شروع به استفاده ازش کردم تا الان از کار کردن باهاش لذت بردم و زبان شیرینی بوده، حتی خیلی از کار هارو راحت تر می کنه.

 

بریم سراغ شروع آموزش

(برای کار با kotlin باید از اندروید استدیو ۳ استفاده کنید)

 

پروژه جدیدی رو درست کنید (File -> New -> New Project) اما توجه کنید که در تصویر زیر گزینه kotlin support را تیک بزنید

 

بقیه مراحل مثل قبل هست

و تمام ، پروژه kotlin ما ساخته شد.

 

نگاهی به چند تا از فایل های برنامه بندازیم :

در فایل build.gradle کد های زیر را می بینیم

buildscript {
    ext.kotlin_version = '1.1.51'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

...

که در اون نسخه kotlin استفاده شده و پلاگین kotlin اضافه شده

همچنین در build.gradle موجود در پوشه app کد های زیر رو می بینیم

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

...

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    ...
}

در این فایل نیز پلاگین های مربوطه اضافه شده

حالا نگاهی به MainActivity می اندازیم

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

خیلی شبیه به همون java هست، اما تفاوت هایی هست:

در kotlin

به جای استفاده از extendes از : استفاده میشه

به جای نوشتن نوع بازگشتی تابع در ابتدای آن از عبارت fun استفاده می شود و بعد اسم تابع (در خط بالا override نیز به همان خط آمده که در Java به شکل @Override و در بالای متد نوشته می شد.

مقدار ورودی توابع به جای اینکه ابتدا نوع ورودی باشد بعد اسم فیلد ، ابتدا اسم فیلد نوشته می شود و سپس : و بعد نوع

در جاوا می نوشتیم Bundle savedInstanceState اینجا می نویسیم savedInstanceState: Bundle

و حالا ؟ اینجا یعنی چی ؟!

در زبان kotlin شاید شنیده باشید که میگن null safe هست، یعنی تا حد امکان در زمان کامپایل از null بودن ها و ارور های null pointer جلوگیری می شود، خوب این یعنی چی:

در اینجا ورودی ما آخرش ? علامت سوال داره، یعنی میتونه که null باشه، خوب در این حالت ، برای استفاده از این فیلد یا باید به متدی بفرستید که اون هم null قبول می کنه، یا اینکه زمان استفاده ازش ، null  بودنش رو حتما چک کنید، در غیر این صورت compiler همان ابتدای کار اررور می دهد، البته هنوز هم امکان استفاده از موارد null بدون چک کردن هست و اون هم استفاده از علامت !! می باشد:

مثلا ورودی یک EditText باشد و به صورت زیر

message:EditText?

برای اینکه مقدار این ورودی رو بگیریم از message.getText() باید استفاده کنیم، که همینجا IDE ارور می دهد که از علامت ؟ قبل از getText استفاده کنید یعنی به صورت message?.getText() بنویسید در این صورت ، اگر message مقدارش null باشد، به جای بروز خطا ، این خط اجرا نمی شود(یعنی با نوشتن ؟ خود kotlin قبل از اجرا یک بار null بودن را چک و بعدا اجرا می کند)

 

بر می گردیم سر تعریف توابع، اگر دقت کنید نوع خروجی مشخص نشده، چونکه نوع خروجی همان void خودمون در جاوا هست

اما اگر خروجی غیر از String باشد باید در انتهای متد باز هم از : استفاده کرده و نوع بازگشتی رو مشخص کنیم :

fun sampleFunction():String{
   return "Test"
}

مورد متفاوت دیگری که در کد می بینید نبودن ; سمی کالن ها هست، که البته گزاشتنشون هم مشکلی پیش نمیاره اما توی kotlin به سمی کالن نیازی نیست.

 

حالا می خوایم چند تا حرکت جالب انجام بدیم

فایل activity_main.xml رو به شکل زیر بنویسید:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.jcmsalves.kotlinplayground.MainActivity">

    <TextView
        android:id="@+id/welcomeTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/updateTextButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Update welcome message"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="@id/welcomeTextView"
        app:layout_constraintBottom_toBottomOf="parent" />

</android.support.constraint.ConstraintLayout>

خوب حالا برای اینکه بتونیم برای دکمه onClickListener تعریف کنیم باید ابتدا با استفاده از findViewById() اون رو در کد جاوا پیدا کنیم ولی در kotlin نیازی به این کار نیست، چون در اینجا پلاگینی به اسم kotlin-android-extensions وجود داره که کارهارو ساده تر می کنه، فقط کافیه که id اون view رو بنویسید و خودش اون رو import می کنه به مثال زیر توجه کنید:

updateTextButton.setOnClickListener { welcomeTextView.text = "Hello Kotlin World!" }

قبل از اینکه بخوام کلش رو تعریف کنم ، اول به قسمت اولش توجه کنید: updateTextButton ، بدون اینکه این View رو find بکنم فقط این خط رو توی onCreate می نویسم و خودش اون رو تشخیص میده

که البته نیاز به یه import هست که با Alt + Enter حل میشه ، که اگر دقت کنید ، خط زیر به import ها اضافه میشه:

import kotlinx.android.synthetic.main.activity_main.*

خوب حالا بقیه خط رو توضیح بدم:

بخش setOnClickListener که قبلا هم بود، اما در اینجا به جای اینکه داخل پرانتز () یه OnClickListener بگیره، فقط یک کروشه باز و بسته داره !!! {} ، این خیلی جالب هست و کار رو خیلی تمیز و کوتاه می کنه (دیگه نیازی به اون همه کد نیست)

حالا قسمت بعدی رو نگاه کنید: welcomeTextView.text ، باز هم بدون استفاده از findViewById مقدار welcomeTextView تعریف شده ، اما اینجا یک ویژگی جدید برای TextView می بینینم .text که تا الان این نبوده !!!!

خوب درواقع این همون setText() هست، اما توی kotlin به جای getter و setter اینجوری نوشته میشه (حتی اگر از کلاس های جاوای موجود استفاده کنید اون ها رو میتونید به شکل جدید استفاده کنید)

یعنی به جای setText(“Hello Kotlin World”) میتونید بنویسید : text = “Hello Kotlin World”

و همینطور برای welcomeTextView.getText() میتونید بنویسید welcomeTextView.text و مقدار رو فراخوانی کنید.

 

 

خوب برای شروع کافیه ، در آینده این آموزش رو تکمیل می کنم

 

قسمت بعدی آموزش: اندروید با kotlin قسمت دوم – Kotlin Syntax (کلاس Class)

 

این آموزش ها برگرفته از آموزش های موجود در لینک زیر می باشد:

https://medium.com/@jcmsalves/kotlin-playground-aab8be8ac432

برچسب ها:
پست قبلی
پست بعدی

درباره ایلیا عابدینی

برنامه نویس اندروید و کارشناس مهندسی پزشکی، نفر سوم مسابقه برنامه نویسی اندروید http://www.schallenge.ir ، از سال 92 برنامه نویسی اندروید رو شروع کردم و در حال حاضر در شرکت عصر دانش در حال توسعه اپلیکیشن تجارت پی می باشدم ، این وبلاگ رو ساختم تا تجربیات روزانه و مفید خودم رو داخل اون بزارم. رزومه : iact.ir/cv

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نمی شود.علامت دارها لازمند. *

*

رفتن به بالا