Part28: 等価性

ことり「あいせ~~~~~~~~い♪」
凛「Hey! Hey! Hey! START:DASH!!」
ことり「TVアニメ、いよいよって感じだね」
凛「ことりちゃんPVに写っててうらやましいにゃ~」
ことり「えへへ、ちょっとだけどね」
凛「凛だって、きっと梨子ちゃんとの絡みで本編中に出番あるにゃ!」
ことり(う~ん、それはどうかなぁ・・・)
凛「ところでニコ生公録の当選通知まだ来ないんだけど・・・」
ことり「凛ちゃん、それはあきらめよう?ね?」


ことり「今回は等価性のお話です。2つの変数の値が等しいかどうか。これ、実は2種類あります」
凛「まーた話がややこしくなる予感がするにゃ」
ことり「まず、KotlinというかJavaの変数というのは、変数という箱に値が入ってるんじゃなくて、オブジェクトへの参照を持っている感じなんです」
凛「参照?」
ことり「うん。あるオブジェクトがどこにあるかを覚えているのが変数で、だから2つ以上の変数が同じオブジェクトを参照することもできるの」
凛「変数が2つあったからといってオブジェクトも2つとは限らないんだ」
ことり「そうそう。で、変数を別の変数に代入すると、オブジェクトが複製されるんじゃなくて参照だけが複製されます。同じオブジェクトを参照する2つの変数のできあがり」
凛「それって、==で比較すると真になるやつだよね?」
ことり「うん。だけど、等しいっていうのには別のオブジェクトだけど値が全く同じ、っていうパターンもあるよね。それは、==で比較しても真にならないの」
凛「にゃ?」
ことり「このコードを見てください」

true
true
true
false

ことり「Kotlinの比較演算子には=====があって、比較の仕方が違います」
凛「えーっと、==はオブジェクトが違ってもよくて、===は同じオブジェクトでないと駄目なんだね」
ことり「var honoka2 = honoka1は参照を複製してるだけだから、同じオブジェクトを参照しています。だから、==でも===でも真になるの」
凛「わかるにゃ」
ことり「var honoka3 = honoka1.copy()は、あ、copy関数はデータクラスが自動生成してくれるんだけど、オブジェクトを複製して新しいオブジェクトを作っています。そうすると・・・」
凛「値は同じままだから==は真で、オブジェクトが別だから===は偽になるにゃ!」
ことり「よくできました♪」


ことり「Javaに明るい人だとすんなり理解できるところかな」
凛「めんどくさい言語だにゃ」
ことり「JavaScriptとかも似たようなものだけどね・・・」


凛「進捗どうですか」
ことり「4倍曲配信されたらやっぱり順位落ちちゃった・・・みんな貯めてたんだね」
凛「4倍は心臓に悪いんだけどにゃ・・・」
ことり「でも、もう千歌ちゃん覚醒してSmileの主戦力として頑張ってくれてるよ」
凛「そういえば声優陣も続々と千歌ちゃん覚醒させてるにゃ」
ことり「わりとみんなガチで走ってるよね・・・たぶん、ことりはりきゃこと近い順位にいると思います」
凛「現状何の報告もないすわわが果たしてどれだけのイベントpt稼ぎ出してるのか、凛、気になります」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です