Kotlin(4)方法

4413 ワード

Kotlin(四)方法の使用
一.方法の基本的な使い方
1.宣言
ここでonCreateメソッドを例にjavaとkotlinのメソッド宣言時の違いを比較する
java:
@override
public void onCreate(Bundle savedInstanceState) {
    ...
}

kotlin:
override fun onCreate(savedInstanceState: Bundle?) {
    ...
}

このような書き換え方法から、
  • kotlinは、メソッド名の行の先頭にoverrideキーワードを配置し、親
  • から書き換えられたことを示す.
  • kotlinのデフォルトメソッドはpublicであり、メソッドが公開権限である場合、public
  • を指定する必要はありません.
  • javaではvoidでメソッドに戻り値がないことを示し、kotlinにはvoidキーワードがなく、そのメソッドのデフォルトは戻り値のない
  • である.
  • kotlinメソッドの入力パラメータフォーマットは、「変数名:変数タイプ」
  • です.
    2.入力と出力パラメータ
    入力パラメータは何も言うことはありませんが、その使用方法は上記の宣言と同じで、変数タイプの後に付けることができますか?メソッドを呼び出すときに入力パラメータがnullであることを示します.出力パラメータの場合、メソッドに戻り値がある場合は、fun fun 1(x:Int)の後ろに「:戻り値タイプ」としてメソッドの戻り値タイプを指定します.
    fun main():Int {
        ...
        return 1
    }
    
    //                ,     ":Int"             ,                
    fun main():Unit {//        :Unit
        ...
    }
    
    

    二.入力パラメータの変化
    kotlinはメソッドの入力パラメータに対してjavaの基礎の上でもっと多くの機能を提供しました
    1.デフォルトの入力パラメータ
    kotlinでは、メソッドが宣言時にパラメータのデフォルト値を入力できます.
    private fun funDemo1(first:Boolean, second:String = "str", third:Int = 0):String {
       if (first && third == 1) {
           return "$second"
       } else {
           return "error"
       }
    }
    
      :
    funDemo1(true)

    では、デフォルトのパラメータ値を変更したい場合はfunDemo 1(true,“123”,1)と書くことができます.もし私が3番目のパラメータを変更したいだけで、2番目は変わらないとしたら、funDemo 1(true,1)という書き方は必ずコンパイルできません.1このパラメータ値は2番目のパラメータの値をデフォルトで変更しますが、2番目のパラメータsecondはStringタイプです.では、どのように処理しますか.kotlinでは、メソッドを呼び出すときに変更するパラメータ、すなわちfunDemo 1(true,third=1)を明示的に指定できます.
    2.可変パラメータ
    Javaでは、メソッドパラメータが同じタイプであることがよくありますが、パラメータの個数はランダムであり、public void method(String...args){...}であり、このメソッドを呼び出すときに入力したパラメータの個数はランダムであり、パラメータが未知の長さのあるタイプの配列に相当します.kotlinではキーワードvarargでこの機能を完了します.
    private fun funDemo1(first:String, second:String, vararg array:Int?):String {
        var str = "$first, $second"
        for (item in array) {
            str = "$str, ${item.toString()}"
        }
        return str
    }
      :
            funDemo1("123", "123", 1, 2, 3)

    三.特殊な方法
    1.汎用方法
    kotlinでの汎用メソッドの定義はjavaと何の違いもありません.命名方法:fun method(first:String,vararg array:T?){...}は、呼び出し時に表示する必要のないTがどのタイプなのかを示すもので、入力された実パラメータに基づいて判断することができます.もちろん、method("123"、1,2)またはmethod("123"、1,2)
    2.連結方法
    パラメータのタイプがいずれかのタイプから継承されている場合、メソッドを定義する際にこの指定されたベースクラスから汎化することができ、このクラスから継承されたサブクラスは入力パラメータとしてメソッド呼び出しを行うことができます.例えば、Int、Float、DoubleはNumberクラスから継承されています.Int、Float、Doubleのタイプを受信できないmethod(array:Array)メソッドがあります.Doubleの配列をパラメータとすると、ベースクラスNumberを汎化するために汎型Tが必要になり、funの前にキーワードinlineを付けてインラインメソッドを表すと、インラインメソッドのみが具体化されます.
    private inline fun  funDemo2(array:Array):String {
        var str:String = "     :"
        for (item in array) {
            str = "$str$item,"
        }
        return str
    }
                   :
    funDemo2(      )

    3.簡略化方法
    メソッド内の論理が簡単でコードが短いメソッドでは、kotlinはメソッドに直接等号で値を割り当てることができます.
    tailrec fun funDemo3(n:Int):Int {
        if (n <= 1) {
            return n
        } else 
            return n * funDemo3(n-1)
    }
       :
    fun funDemo3(n:Int):Int = if (n <= 1) n else n*funDemo3(n-1)

    上記の例の方法は再帰的な方法であり、funの前にtailrecキーワードがあることにも気づくかもしれません.このキーワードは、この方法がテール再帰的な方法であることを示しています.テール再帰は、戻り値で自分の方法を繰り返し呼び出し、tailrecは、コンパイラにテール再帰的な方法であることを示し、コンパイラはこの方法を最適化します.スタックオーバーフローを回避するために再帰の代わりにループが使用されます
    4.高次メソッド
    kotlinではメソッドAをメソッドBの入力パラメータとして許可し,メソッドBのパラメータにメソッドAが埋め込まれ,メソッドBを高次メソッドと呼ぶ.はっきり言えないならデモを書きましょう.
    private fun  funDemo3(array:Array, compare10:(T) -> Boolean):String {
       var maxStr:String = "  10   :"
       for (item in array) {
           if (compare10(item)) {
               maxStr += item
           }
       }
       return maxStr
    }
    //compare10           funDemo3     
    var array:Array = arrayOf(1, 13, 45, 41, 6)
    funDemo3(array, {i -> print("    ");i>10})//i>10   if(i>10) true else false

    このメソッドパラメータ名はcompare 10,すなわちcompare 10メソッド内にfunDemo 3をパラメータとして埋め込み,compare 10メソッド自体に汎用パラメータがあり,戻り値はBooleanタイプである.次にfunDemo 3メソッドを呼び出すと{...->...}というlambda式の形でcompare 10メソッドの論理を書きます.iはcompare 10メソッドのパラメータで、iが10より大きいとtrueを返します.
    OK、一般的には私たちが使う方法の知識の差は多くありません.これだけで、自分がkotlinを使う時間も長くありません.どこが間違っているのか、皆さん、次の編では類と対象を指摘してください.https://blog.csdn.net/qq_37159335/article/details/91039114