Kotlin で with キーワードを使用する
- Kotlin プロジェクトを生成する
- Kotlin でオブジェクトを明示的に呼び出す
-
with
キーワードを使用して、Kotlin で戻り値なしでオブジェクトを暗黙的に呼び出す -
with
キーワードを使用して、Kotlin で戻り値を使用してオブジェクトを暗黙的に呼び出す - まとめ
オブジェクト指向プログラミングでは、オブジェクトがプロパティとメソッドで構成されていることを学びました。 これらの詳細にアクセスするには、.
を使用して明示的に呼び出します。 演算子を選択してから、フィールドまたはプロパティ名を指定します。
これは、オブジェクトを操作するときにほとんどのプログラミング言語で一般的に使用されるアプローチですが、唯一の方法ではありません。 ジェネリックとラムダ式を使用して、オブジェクトのメンバー プロパティとメソッドを暗黙的に呼び出すことができます。
このチュートリアルでは、オブジェクトのメンバー プロパティとメソッドを暗黙的に呼び出す方法を説明します。
Kotlin プロジェクトを生成する
IntelliJ 開発環境を開き、File > New > Project
を選択します。 開いたウィンドウで、プロジェクト名をkotlin-with
と入力し、[言語] セクションで [Kotlin] を選択し、[ビルド システム] セクションで [Intellij] を選択します。
src/main/kotlin
フォルダーの下に Main.kt
という名前のファイルを作成し、次のコードをコピーしてファイルに貼り付けます。
data class Music(val id: Int,
val title: String,
val genre: String,
val duration: Int);
fun fetchMusic(): ArrayList<Music>{
return arrayListOf(
Music(1,"Passing me by","Hip hop",5),
Music(2,"Lose yourself","Hip hop",3),
Music(3,"Smoke on the water","Classic songs",6),
Music(4,"Born to the wild","Classic songs",2),
Music(5,"Real love","Rhythm and blues",6)
);
}
このコードは、Music
データ クラスを使用して作成されたオブジェクトの ArrayList を返す fetchMusic()
という名前のメソッドを作成します。 fetchMusic()
music メソッドによって返されるリストを使用して、次のセクションで例を説明します。
Kotlin でオブジェクトを明示的に呼び出す
次のコードをコピーして、Main.kt
ファイルの fetchMusic()
メソッドの後に貼り付けます。
fun callingAnObject(){
val songs = fetchMusic();
songs.forEach(::println);
}
fun main(){
callingAnObject();
}
callingAnObject()
という名前の関数は、上で作成したリストを使用して forEach()
メソッドを明示的に呼び出し、リスト内のすべての項目をコンソールに記録します。 前のセクションで述べたように、明示的にリスト オブジェクト songs.forEach()
を呼び出す方法に注意してください。
次のセクションでは、songs
オブジェクトを暗黙的に呼び出して、任意のメンバー変数またはメソッドにアクセスする方法について説明します。 この例を実行して、出力が次のようになっていることを確認します。
Music(id=1, title=Passing me by, genre=Hip hop, duration=5)
Music(id=2, title=Lose yourself, genre=Hip hop, duration=3)
Music(id=3, title=Smoke on the water, genre=Classic songs, duration=6)
Music(id=4, title=Born to the wild, genre=Classic songs, duration=2)
Music(id=5, title=Real love, genre=Rhythm and blues, duration=6)
with
キーワードを使用して、Kotlin で戻り値なしでオブジェクトを暗黙的に呼び出す
前の例をコメントアウトし、次のコードをコピーして Main.kt
ファイルのコメントの後に貼り付けます。
fun usingWithWithoutReturnValue(){
val songs = fetchMusic();
with(songs){
println(isEmpty());
println(add(Music(6,"Many rivers to cross","reggae",3)))
println(forEach(::println));
}
}
fun main(){
usingWithWithoutReturnValue();
}
この例に示すように、オブジェクトを暗黙的に呼び出したい場合は、通常、Kotlin で with()
関数を使用します。 isEmpty()
、add()
、および forEach()
メソッドを、そのオブジェクトを使用せずにリストを暗黙的に呼び出す方法に注意してください。
with()
関数はこのリストをレシーバーとして使用し、リストの任意のフィールドまたはメソッドをバックグラウンドで呼び出し、要求すると結果が返されます。 この使用例では、with()
関数は値を返さず、コンソールにログを記録します。
次のセクションでは、舞台裏で行われた呼び出しの結果を返す方法を見ていきます。 この例を実行して、出力が次のようになっていることを確認します。
false
true
Music(id=1, title=Passing me by, genre=Hip hop, duration=5)
Music(id=2, title=Lose yourself, genre=Hip hop, duration=3)
Music(id=3, title=Smoke on the water, genre=Classic songs, duration=6)
Music(id=4, title=Born to the wild, genre=Classic songs, duration=2)
Music(id=5, title=Real love, genre=Rhythm and blues, duration=6)
Music(id=6, title=Many rivers to cross, genre=reggae, duration=3)
with
キーワードを使用して、Kotlin で戻り値を使用してオブジェクトを暗黙的に呼び出す
前の例をコメントアウトし、次のコードをコピーして Main.kt
ファイルのコメントの後に貼り付けます。
fun usingWithContainingReturnValue(): Music {
val songs = fetchMusic();
val song = with(songs) {
get(1)
}
return song;
}
fun main(){
println(usingWithContainingReturnValue());
}
前の例で、with()
がこのリストのプロパティまたはメソッドを裏で呼び出し、呼び出しの結果を返すと述べました。 この例は、呼び出しによって返された結果を取得する方法を示しています。
この例では、with()
メソッドを使用して songs
オブジェクトを明示的に呼び出し、get()
メソッドを使用してインデックス 1
のオブジェクトを返します。 オブジェクトを使用せずに with()
関数内で get()
メソッドを呼び出す方法に注意してください。
囲んでいる関数によって返されるオブジェクトは Music
型であることに注意してください。 このコードを実行して、出力が次のようになっていることを確認します。
Music(id=2, title=Lose yourself, genre=Hip hop, duration=3)
まとめ
このチュートリアルでは、オブジェクトを暗黙的に呼び出すのに役立つ with()
メソッドの使用方法を学びました。 カバーした 2つの使用例には、戻り値なしでオブジェクトを暗黙的に呼び出すことと、戻り値を使用してオブジェクトを暗黙的に呼び出すことが含まれます。
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub