Kotlin学習の開始編—基礎文法

12358 ワード

Kotlin学習の開始編—基礎文法
KotlinはAndroidに公式言語として受け入れられてもう一年以上経ちました。今勉強を始めました。本当に恥ずかしいです。少しずつ進歩して、最後までKotlinでアプリを開発したいです。余計なことは言わない。Let’s get started!
1.定義パッケージ
package my.demo
import java.util.*
// ...
パッケージ名はソースファイルの先頭に置きますが、Javaとは別に区別がないようです。終端番号を除いて終わります。これはKotlinJavaの大きな違いであり、語句の最後は加算番号を用いない。
2.定義関数
2.1有参、戻り値関数があります。
fun sum(a: Int, b: Int): Int {
    return a + b
}
二つのIntタイプのパラメータが入ってきて、Int値を返します。関数名の前にキーワードを追加します。パラメータタイプと戻り値タイプの定義はJavaとは大きく異なります。
このような関数は1つの表現しかないです。戻り値の種類は自動的に推測できる関数です。以下のように簡単に書くことができます。
fun sum(a: Int, b: Int) = a + b
2.2有参、戻り値関数なし
fun printSum(a: Int, b: Int): Unit {
    println("sum of $a and $b is ${a + b}")
}
キーワードfunは、Java内のUnitキーワードと同様である。無意味な値を返す、または無リターン値を返すということが理解される。戻り値のない関数は以下のように簡単に書くことができます。
fun printSum(a: Int, b: Int) {
    println("sum of $a and $b is ${a + b}")
}
3.変数の定義
3.1宣言変数
var a: Int = 1
var b = 2
変数を宣言するときはvoidキーワードを使用して、タイプを定義しなくてもいいです。定義しないとシステムは自動的にそのタイプを推論します。これはJava変数宣言と最も異なるところです。Javaの変数はタイプを宣言しなければなりません。
3.2リードオンリー変数(定数)
val c: Int = 2
キーワードvarで読み取り専用変数を定義します。変数は初期化された後、再び値を割り当てられません。Javaにおいてvalキーワードを使用して1つの定数を定義するのと同様である。
4.コードコメント
Javaと同じです
//     

/*     
         */
5.文字列テンプレートを使う
var a = 1
//     :
val s1 = "a is $a" 

a = 2
//      :
val s2 = "${s1.replace("is", "was")}, but now is $a"
ドル記号final+変数名を使うと、その変数の値を参照できます。外部にダブルクォーテーションをかけることを忘れないでください。参照時にも値を動作させることができますが、このような動作は元の変数(上のコードの$)の値を変更しないことに注意が必要です。
6.条件式を使う
if文:
fun maxOf(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}
一番大きな値を得る方法はJavaの書き方と同じですね。ハハハ。実は簡単に書くことができます。
fun maxOf(a: Int, b: Int) = if (a > b) a else b
一行のコードを書いてください。これは伝説のs1です。上手になりました。書いたら確かに楽です。
7.空き値を使って、null検査を行います。
  var a: String = "323"
  var b: String? = "dfd"
疑問符 を使用して、変数bが空であることを示していますが、変数aは必ず空ではなく、使用中に変数aに?値を付与すると、自動的にエラーが発生するので、nullのように安心して動作できます。a.lengthを呼び出すと、変数bが空である可能性があるので、エラーが発生します。もし呼び出しが必要であれば、NullPointExceptionの代わりにセキュリティ呼子b.lengthを使用することができ、例えば?.の場合、bが.の場合、この方法はb?.lengthの代わりにnullに戻る。
セキュリティコールnullについては、例えば、オブジェクトNullPointExceptionがあります。オブジェクトパラメータ?.があります。対象のSchoolに文字列変数Personがあります。この人の学校の名前を教えてください。一般に、schoolを使用するが、オブジェクトschoolNamePerson.school.schoolNameまたはpersonnullである場合、このような呼び出しはschoolが発生し、もしセキュリティコールを使用すると、オブジェクトが空である限り、結果は直接エラーではなくnullに戻る。
fun printProduct(arg1: String, arg2: String) {
    //        ,         null
    val x = arg1.toIntOrNull()
    val y = arg2.toIntOrNull()
    if (x != null && y != null) {
        //  x y   
        println(x * y)
    } else {
        //    ,          
        println("either '$arg1' or '$arg2' is not a number")
    }
}
上のようなnull検査はJavaの書き方と同じです。操作する前にnullかどうか確認してください。
文字列の長さを取得します。空の場合は-1を返します。
val l: Int = if (b != null) b.length() else -1
もう一つの簡単な書き方:Javaの中の3つの目の演算に似ています。空でなければ、bの長さに戻ります。そうでなければ、-1に戻ります。
val l = b.length()?: -1
8.タイプチェックと自動変換
  fun getStringLength(obj: Any): Int?{
      return if(obj is String) obj.length else null
  }
NullPointExceptionオペレータを使用してパラメータの種類を判断し、Java内のPerson?.school?.schoolNameオペレータと同様に、判断後、その対応するクラスの方法を直接呼び出すことができ、タイプ変換を行ったに相当する。上のnullタイプはJavaのisタイプと似ています。すべての種類の親タイプです。
9.forサイクルを使う
val items = listOf("apple", "banana", "kiwifruit")
for (item in items) {
    println(item)
}
Javaでは、コロンinstanceofを巡回オペレータとして使用し、KotlinはAnyを使用している。もう一つのKotlinの書き方は以下の通りです。
val items = listOf("apple", "banana", "kiwifruit")
for (index in items.indices) {
    println("item at $index is ${items[index]}")
}
Object:によって循環される。
10.whileサイクルを使う
val items = listOf("apple", "banana", "kiwifruit")
var index = 0
while (index < items.size) {
    println("item at $index is ${items[index]}")
    index++
}
Javaと同じです
11.when表現を使う
fun describe(obj: Any): String =
    when (obj) {
        1 -> "One"
        "Hello" -> "Greeting"
        is Long -> "Long"
        !is String -> "Not a string"
        else -> "Unknown"
}
Javaにおけるin式と同様であるが、listはより強力な機能を有し、分岐条件として式を用いることができる。indexは、Switch式の代わりに使用されてもよい。
12.レンゲを使う
val x = 10
val y = 9
if (x in 1..y+1) {
    println("fits in range")
}
キーワードwhenを使用して、数値がある範囲内にあるかどうかを確認する。
val list = listOf("a", "b", "c")
if (-1 !in 0..list.lastIndex) {
    println("-1 is out of range")
}
if (list.size !in list.indices) {
    println("list size is out of valid list indices range too")
}
数値がある範囲外にあるかどうかをチェックします。
レンゲの繰り返しは、1から5まで印刷されます。
for (x in 1..5) {
    print(x)
}
13.Collectionを使う
集合の遍歴上で紹介しましたので、ここでは言いません。
lamda表現を使用して、セットをフィルタやマッピングなどの操作を行います。
 fun printSpecificFruit(){
     var fruits = listOf("apple", "orange", "pearl", "pineapple")
     fruits.filter { it.contains("ap") }
             .sortedBy { it }
             .map { it.toUpperCase() }
             .forEach { println(it) }
 }
キーワードwhenは、セット内の単一のエントリを指すために使用される。if - else if方法でコンテンツをフィルタリングし、in方法でセット順序付け、it方法をマッピングし、最後に印刷された内容は以下の通りである。
APPLE PINEAPPLE
14.クラスの作成例
var rectangle = Rectangle(5.0, 2.0) 
var triangle = Triangle(3.0, 4.0, 5.0)
Javaと比べて、キーワードfilterさえ使わなくなりました。
初めてKotlinに接触しましたので、間違いがありますので、ご指導をお願いします。