Kotlin(4)方法
4413 ワード
Kotlin(四)方法の使用
一.方法の基本的な使い方
1.宣言
ここでonCreateメソッドを例にjavaとkotlinのメソッド宣言時の違いを比較する
このような書き換え方法から、 kotlinは、メソッド名の行の先頭にoverrideキーワードを配置し、親 から書き換えられたことを示す. kotlinのデフォルトメソッドはpublicであり、メソッドが公開権限である場合、public を指定する必要はありません. javaではvoidでメソッドに戻り値がないことを示し、kotlinにはvoidキーワードがなく、そのメソッドのデフォルトは戻り値のない である. kotlinメソッドの入力パラメータフォーマットは、「変数名:変数タイプ」 です.
2.入力と出力パラメータ
入力パラメータは何も言うことはありませんが、その使用方法は上記の宣言と同じで、変数タイプの後に付けることができますか?メソッドを呼び出すときに入力パラメータがnullであることを示します.出力パラメータの場合、メソッドに戻り値がある場合は、fun fun 1(x:Int)の後ろに「:戻り値タイプ」としてメソッドの戻り値タイプを指定します.
二.入力パラメータの変化
kotlinはメソッドの入力パラメータに対してjavaの基礎の上でもっと多くの機能を提供しました
1.デフォルトの入力パラメータ
kotlinでは、メソッドが宣言時にパラメータのデフォルト値を入力できます.
では、デフォルトのパラメータ値を変更したい場合は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でこの機能を完了します.
三.特殊な方法
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を付けてインラインメソッドを表すと、インラインメソッドのみが具体化されます.
3.簡略化方法
メソッド内の論理が簡単でコードが短いメソッドでは、kotlinはメソッドに直接等号で値を割り当てることができます.
上記の例の方法は再帰的な方法であり、funの前にtailrecキーワードがあることにも気づくかもしれません.このキーワードは、この方法がテール再帰的な方法であることを示しています.テール再帰は、戻り値で自分の方法を繰り返し呼び出し、tailrecは、コンパイラにテール再帰的な方法であることを示し、コンパイラはこの方法を最適化します.スタックオーバーフローを回避するために再帰の代わりにループが使用されます
4.高次メソッド
kotlinではメソッドAをメソッドBの入力パラメータとして許可し,メソッドBのパラメータにメソッドAが埋め込まれ,メソッドBを高次メソッドと呼ぶ.はっきり言えないならデモを書きましょう.
このメソッドパラメータ名は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
一.方法の基本的な使い方
1.宣言
ここでonCreateメソッドを例にjavaとkotlinのメソッド宣言時の違いを比較する
java:
@override
public void onCreate(Bundle savedInstanceState) {
...
}
kotlin:
override fun onCreate(savedInstanceState: Bundle?) {
...
}
このような書き換え方法から、
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