[1]第1の基本構文詳細Kotlinを

1、パッケージが定義されています

宣言パッケージは、ソースファイルの先頭にする必要があります

package com.kotlin.flong.base
import java.util.*

カタログ構造パケットを一致させる必要があります:ソースコードは、ファイルシステムのどこにでも使用することができます。

2.定義関数

  • 図1は、2つのつとIntパラメータ、関数はintを返し。
//计算a+b
fun sum(a: Int,b :Int) : Int{
    return a+b;
}
  • 図2に示すように、その機能、自動的に推論型の値を返す関数として式:
//无return关键字的加法
fun sum1(a: Int,b : Int) = a + b;
  • 図3は、関数は、値の無意味を返す$処理のためのプレースホルダであります
//函数返回无意义的值,`Unit`相当于void,$是占位符进行处理
fun printSum(a: Int, b: Int): Unit {
    println("sum of $a and $b is ${a + b}")
}
  • 4単位の戻り値の型を省略することができます:$は、処理のためのプレースホルダです
//无Unit
fun printSum1(a: Int, b: Int) {
    println("sum of $a and $b is ${a + b}")
}

3、変数の定義

  • 読み取り専用のキーワード定義されたローカル変数valの定義を。以下のためにのみ赋值一次
//一次赋值(只读)的局部变量:
fun test1(){
    val a: Int = 1 // 初始化值
    val b = 2 // 类型推断出 `Int` 类型
    val c: Int // 如果没有初始值类型不能省略
    c = 3 // 明确赋值
    println(c)
}

図4に示すように、プレースホルダテンプレート

  • $を交換して使用します
//replace和$使用
fun replace(){
    var a = "中国人"
    val s1 = "我是 $a" //占位符模板
    println(s1);
    
    //将是改变成is
    val s2 = "${s1.replace("是", "is")}, but now is $a"
    println(s2);
}

図5に示すように、最大​​値MAXを選択し、条件式を使用して

  • 1、最大需要を返すようにノーリターン、
//找最大值
fun maxOf(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}
  • 2、リターンを使用しないでください
fun max1(a : Int ,b : Int) = if(a>b) a else b;

図6に示すように、検出及び自動変換のタイプを使用して

注意:これは、isJavaのと同等のinstanceofキーワード

//is的使用,?允许返回null,Any表示任何类型
//当某个变量的值可以为 null 的时候,必须在声明处的类型后添加 ? 来标识该引⽤可为空
fun isStr(obj : Any) : Int ?{   
    // `obj` 在 `&&` 右边⾃动转换成 `String` 类型
    if (obj is String && obj.length > 0) {
        return obj.length
    }
    return null
}
  • 若しくは
fun getStringLength(obj: Any): Int? {
    if (obj !is String) return null

    // `obj` 在这一分支自动转换为 `String`
    return obj.length
}

7、文字列の文字列比較

、メモリアドレスの文字列を比較するにはSTR1の同等== str2を、偽のJavaの出力注:

//字符串对比
fun biaojiaoStr1(){
    
    var str1 = "abc"
    var str2 = String(charArrayOf('a','b','c'))
    
    //比较字符串的值,输出true
    println(str1.equals(str2))
    
    //比较字符串的值,输出true
    println(str1==str2)
    
    //比较字符串的内存地址,相当于Java的str1==str2,输出false
    println(str1===str2)
}

8、およびヌルヌル検出器を使用して

  • 参照を識別するために型宣言における変数の値が空であることができるときにコンテンツがSTRデジタル戻りnullでない場合、ヌル時間を、追加しなければならないとすることができます:?
fun parseInt(str: String): Int? {
    // ……
}

*使用関数はNULL値を返します。

fun printProduct(arg1: String, arg2: String) {
    val x = parseInt(arg1)
    val y = parseInt(arg2)

    // 直接使用 `x * y` 会导致编译错误,因为他们可能为 null
    if (x != null && y != null) {
        // 在空检测后,x 与 y 会自动转换为非空值(non-nullable)
        println(x * y)
    }
    else {
        println("either '$arg1' or '$arg2' is not a number")
    }    
}
  • 若しくは
// ……
if (x == null) {
    println("Wrong number format in arg1: '$arg1'")
    return
}
if (y == null) {
    println("Wrong number format in arg2: '$arg2'")
    return
}

// 在空检测后,x 与 y 会自动转换为非空值
println(x * y)

図9に示すように、ループに使用

  • forループを使用します
val items = listOf("苹果", "香蕉", "橙子")
for (item in items) {
    println(item)
}

//或者
val items = listOf("苹果", "香蕉", "橙子")
for (index in items.indices) {
    println("item at $index is ${items[index]}")
}

図10は、whileループを使用します

val items = listOf("apple", "banana", "kiwifruit")
var index = 0
while (index < items.size) {
    println("item at $index is ${items[index]}")
    index++
}

11、表現の使用

fun describe(obj: Any): String =
    when (obj) {
        1          -> "One"
        "Hello"    -> "Greeting"
        is Long    -> "Long"
        !is String -> "Not a string"
        else       -> "Unknown"
    }

図12に示すように、間隔(範囲)

  • 指定された間隔内に一定数を検出するためのオペレータで使用
val x = 10
val y = 9
if (x in 1..y+1) {
    println("fits in range")
}
  • 指定された範囲外のデジタルかどうかを検出します
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")
}
  • 間隔の繰り返し:
for (x in 1..5) {
    print(x)
}
  • または一連の反復:
for (x in 1..10 step 2) {
    print(x)
}
println()
for (x in 9 downTo 0 step 3) {
    print(x)
}

コレクションを使用して13、

  • コレクションを反復処理:
for (item in items) {
    println(item)
}
  • セットインスタンスを含むか否かを決定する際に使用するオペレータ
when {
    "orange" in items -> println("juicy")
    "apple" in items -> println("apple is fine too")
}
  • ラムダ式を使用すると、マップ(地図)コレクションで(フィルター)をフィルタリングします:
val fruits = listOf("banana", "avocado", "apple", "kiwifruit")
fruits
  .filter { it.startsWith("a") }
  .sortedBy { it }
  .map { it.toUpperCase() }
  .forEach { println(it) }

14、基本的なクラスとそのインスタンスを作成します

注:いいえ「新しい」キーワード

val rectangle = Rectangle(5.0, 2.0) // 不需要“new”关键字
val triangle = Triangle(3.0, 4.0, 5.0)

15、分割デリミタ

  • 分割は、分割のjavaの分割よりも強いkotlin、複数の特殊なカットをサポートしています
fun split(){
    var str = "苹果,香蕉-橙子"
    //支持多个特殊进行切割,以,和-进行分割
    var strs = str.split(",","-")
    for(s in strs){
        println(s)
    }
}
  • 結果が出力されます
苹果
香蕉
橙子

16、使用のサブ

//substring的使用

fun subStr(){
    val path = "/Users/ljl/kotlin/chapter.doc";
    
    //获取前6个字符
    println(path.substring(0,6))
    //使用范围获取前6个字符
    println(path.substring(0..5))
    
    //把第一个r之前的字符串截取
    println(path.substringBefore('r'))
    
    //把最后一个r之前的字符串截取
    println(path.substringBeforeLast('r'))
    
    //把第一个r之后的字符串截取
    println(path.substringAfter("r"))
    
    //把最后一个r之后的字符串截取
    println(path.substringAfterLast("r"))
    
}

17、元祖使用

//元祖使用
fun pair(){
    
    //定义一个二元元组
    var pair  = Pair<String,Int>("我是寅务",29)
    var pair1 : Pair<String,Int> = "我是寅务" to 29
    
    println(pair.first + "," +pair.second)
    println(pair1.first + "," + pair1.second)
    
    //定义一个三元元组
    var triple  = Triple<String,Int,String>("我是寅务",29,"岁")
    
    println(triple.first + "," +triple.second + "," + triple.third)
}

18、?使用との違い!

  • ?変数の型は空にすることができます
  • ?彼らは空にできないことをすることなく、表現は、空にすることができます
  • ?演算子を呼び出すために安全な空に、このアプローチは(年齢!= null)の場合と同様に最初の著名なnull以外の値を決定することです
  • 非空の判決!
  • !! kotlinエディタを伝える表現し、この値がチェックされていない、確かにパスワードは空ではない、このプロセスの値がわからない目立つ不安、推奨されていない場合
fun testNull(){

    // ? 可空变量类型
    val age : Int? = null

    // !! 非空判断
    var userName : String  = null !!
    // ? 表示可以为空,不加表示不能为空
    var passWord : String?  = null  

    // ?. 空安全调用符,这种做法先显眼就是为了判断非空值如同 if(age !=null) age.toI
    println(age?.toInt())
    
    //?: elvis操作符(猫王),age?.toInt()表示if(age!=null) age.toInt else 返回 默认就给10
    var ageInt : Int = age?.toInt() ?: 10

    println(ageInt)
    
    //!!表示告诉kotlin编辑器,此值不要检查了,password一定不为空,
      // 这种值处理如果不确定的话显眼不安全 ,不建议使用
    passWord!!.toInt()
}

19件のコメント

  • JavaとJavaScript、Kotlinのサポートラインのコメントとブロックコメント、およびJavaなどの異なる、Kotlinブロックコメントの巣であります
// 这是一个行注释

/* 这是一个多行的 块注释。 */

20、関数のデフォルトパラメータ

//函数的参数默认
fun defVal(age:Int,username:String = "liangjl"){
    println("$username,$age")
}

図21は、可変パラメータを可変引数

vararg これは、変数パラメータであり、Javaの3点の同等:文字列... STRSが、Javaの変数のパラメータはの方法で最後の引数でなければなりません

fun varargs(vararg a : Int ):Int{   
    var result =0
    a.forEach {
        result += it        
    }
    return result;
}
  • 可変引数の使用
println(varargs(10,20,30))
  • Javaの変数パラメータコード
public static void TestArgs(String userName,String ... args){
  // 省略
}

プロジェクトのソースコード

プロジェクトのソースコードの例では
、物品の公式を参照referenceし、個人の学習仕上げ

おすすめ

転載: blog.csdn.net/weixin_33675507/article/details/90861232