Kotlin文法学習-変数定義、関数拡張、Parceble序列化などの簡単なまとめ


Kotlin文法学習-変数定義、関数拡張、Parceble序列化などの簡単なまとめ
Googleは今年のGoogle I/O 2017開発者大会で、KotlinをAndroidプログラムに組み込んだ公式の開発言語(First-class laguage)をAndroid開発者として発表しました。もちろん、この言語を少しずつ熟知していくためには、まず文法から学ぶ必要があります。
その前に、どのようにKtlinを使ってAndroidアプリケーションを作成するかを知る必要があります。Android Studio 3.0バージョンについては、プロジェクトを作成する時に直接にInclude Kotlin supportオプションをチェックすればいいです。3.0以前のバージョンについては、Ktlinプラグインをインストールする必要があります。同時に手動でgradleを設定する必要があります。方法は以下の通りです。
アプリのgradleに下記のコードを入れます。

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
プロジェクトのgradleに下記のコードを入れます。

ext.kotlin_version = '1.1.2-3'

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

Kotlin定義変数
  • kotlinにおける変数定義は、2つの種類があり、valとvar、そのうちvalはJavaにおけるfinal修飾の変数(読み取り専用)に相当し、通常は定数であり、varは一般に変数である。
  • Ktlinの変数定義は、割り当てをサポートするときのタイプ推定を定義し、すべての変数のデフォルトは「nullとしてはいけない」に変更され、タイプの後に明示的に追加しなければなりませんか?修繕符はnullとして価値があります。
  • 私達はコードを書く時、できるだけ習慣的に変数を空に設計します。このように後の変数の演算で多くの問題を減らすことができます。
  • Ktlin関数拡張
    具体的な文法はfun+タイプ.関数(パラメータ)です。
    
     fun Context.toast(message: String, length: Int = Toast.LENGTH_SHORT) {
        Toast.makeText(this, message, length).show()
      }
    
    Kotlin Pacerbaleプログレッシブ
    
    package com.john.kotlinstudy
    
    import android.os.Parcel
    import android.os.Parcelable
    
    /**
     * Java Bean      
     * Created by john on 17-5-24.
     */
    
    data class UserBean(var name: String, var id: String) : Parcelable {
    
      constructor(source: Parcel) : this(source.readString(), source.readString())
    
      override fun describeContents(): Int {
        return 0
      }
    
      override fun writeToParcel(dest: Parcel, flags: Int) {
        dest.writeString(this.name)
        dest.writeString(this.id)
      }
    
      companion object {
    
        @JvmField val CREATOR: Parcelable.Creator<UserBean> = object : Parcelable.Creator<UserBean> {
          override fun createFromParcel(source: Parcel): UserBean {
            return UserBean(source)
          }
    
          override fun newArray(size: Int): Array<UserBean?> {
            return arrayOfNulls(size)
          }
        }
      }
    }
    
    
    companionキーワードの解読
  • はJavaやC33858;と違って、Kotlinでは、Classは静的な方法がないので、ほとんどの場合、静的な方法の代わりにpackage-levelの関数を使用することを推奨します。
  • の場合、Classを必要としないと、Class内部の関数(例えば工場関数)にアクセスできます。Class内の実名Objectとして宣言してもいいです。
  • また、Class内でcompone objectを宣言したら、その対象内のすべてのメンバーはJava/C菗文法中のstatic修繕符を使ったことに相当します。外部では類名だけでこれらの属性または関数を訪問することができます。
  • @Jvm Field注解作用
  • は、Kotlinコンパイラがこの属性のためにgetter/setterを生成しないことを示し、フィールドとして露出する。
  • は、JavaでKtlin属性をフィールドとして公開する必要がある場合、@JvmField注釈を使用して注釈を行う必要があり、このフィールドは下の属性と同じ視認性を持つ。
  • Kotlin作成ツール類
    Javaでは、私たちはいくつかのよく使われている機能を一つの工具類にパッケージします。ツール類は実はString、Collection、IOなどの常用類の機能の拡張です。私たちが書いた工具類の方法と変数は静的に書きます。これらの方法は私達が呼び起こしたいだけなので、ツール類の中のいかなる属性と変数もいりません。だから、実用化する必要はありません。
    
    package com.john.kotlinstudy
    
    import android.content.Context
    import android.widget.Toast
    
    /**
     * Toast   
     * Created by john on 17-5-24.
     */
    object ToastUtils {
    
      fun toast(context: Context, message: String) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
      }
    }
    
    
    Kotlin Activityジャンプ
    私たちはMainActivityでクリックイベントを設定し、別のActivityに移動しながら、データを転送します。
    
    package com.john.kotlinstudy
    
    import android.content.Context
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.widget.Toast
    import kotlinx.android.synthetic.main.activity_main.*
    
    class MainActivity : AppCompatActivity() {
    
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        test_tv.text = "hello kotlin"
        test_tv.setOnClickListener {
          ToastUtils.toast(this, "hello kotlin")
          val user = UserBean("zhang", "001")
          user.id = "100"
          SecondActivity.navigateTo(this, user)
        }
      }
    
      fun Context.toast(message: String, length: Int = Toast.LENGTH_SHORT) {
        Toast.makeText(this, message, length).show()
      }
    }
    
    
    次に新しいSecondActivityを作成して、Activityのジャンプのための静的な方法を提供します。皆さんはこのようにするメリットを知っていると思いますが、ソースコードを見なくても、パラメータが必要です。javaによって書いたら、staticというキーワードがないことが分かります。慌てないでください。ここではバックグラウンドオブジェクトを使って実現できます。バックグラウンドオブジェクトはこのような宣言周期を伴うオブジェクトです。
    
    package com.john.kotlinstudy
    
    import android.content.Context
    import android.content.Intent
    import android.os.Bundle
    import android.support.v7.app.AppCompatActivity
    import kotlinx.android.synthetic.main.activity_second.*
    
    /**
     *   Activity   
     * Created by john on 17-5-24.
     */
    class SecondActivity : AppCompatActivity() {
    
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        val user = intent.getParcelableExtra<UserBean>(EXTRA_KEY_USER)
        user_name_tv.text = user.name
        ToastUtils.toast(this, user.id)
      }
    
      //        
      companion object {
        //extra key
        val EXTRA_KEY_USER = "extra.user"
    
        fun navigateTo(context: Context, user: UserBean) {
          val intent = Intent(context, SecondActivity::class.java)
          intent.putExtra(EXTRA_KEY_USER, user)
          context.startActivity(intent)
        }
      }
    }
    
    
    結び目
    以上は簡単なコツリントのいくつかの文法的特性を紹介しました。入門として、この新しい言語に対して、ちょっとなじみのない恐怖を解消します。実は、コツリンは多くの新しい特性があります。これは開発中にゆっくりと消化して理解する必要があります。
    読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。