Part29: 演算子オーバーロード

ことり「やりとげたよ、最後まで」
凛「おおっ、それはもしかして!」
ことり「夜空は何でも知ってるみたい最終成績、61800pt/7244位」
凛「ということは!」
ことり「うん。千歌ちゃんも梨子ちゃんも3枚取れたよ♪」
凛「すごいにゃー!」
ことり「ちょっとボーダー上がりすぎだよ・・・前日夜からイベント終了までで14000pt稼ぎました。つらかったよ~」
凛「それはお疲れさまだったにゃ」


ことり「演算子、いろいろ出てきたよね。四則演算、比較演算、inとか」
凛「頑張って覚えようとしてるにゃ」
ことり「あれはね、自分で定義することもできるの。SchoolIdolクラスに*演算子を定義して、kotori * umiみたいな演算が」
凛「ちょ、ちょっと待つにゃ。人同士の掛け算は、なんというかその、凛たちにはまだちょっと早いというか・・・」
ことり「kotori * umiはAnemone heartだよ?」
凛「・・・あぅ」
ことり「えっちだと思った凛ちゃんがえっちなんだよ♪」

ことり「演算子の記号、+とか<とか、それぞれに対して対応する関数名が決まっています。その関数を実装してあげると、演算子を使えるようになります」

ことり「UnitクラスにplusAssign関数があります。これは、演算子+=に対応した関数名で、operatorっていうキーワードを付けると+=演算子の処理として認識されます」
凛「+=を使うとplusAssign関数が呼び出されるようになるの?」
ことり「muse += SchoolIdol("Kotori Minami")だったら、muse.plusAssign(SchoolIdol("Kotori Minami"))っていう呼び出しに変換される感じかな」
凛「+=の方が直感的な気がするにゃ」

ことり「演算子と対応する関数名を表にしておきますね。必要なときに参照してください」

+a a.unaryPlus()
-a a.unaryMinus()
!a a.not()
a++ a.inc()
a-- a.dec()
a + b a.plus(b)
a - b a.minus(b)
a * b a.times(b)
a / b a.div(b)
a % b a.mod(b)
a..b a.rangeTo(b)
a + b a.plus(b)
a - b a.minus(b)
a * b a.times(b)
a / b a.div(b)
a % b a.mod(b)
a..b a.rangeTo(b)
a in b b.contains(a)
a !in b !b.contains(a)
a[i] a.get(i)
a[i, j] a.get(i, j)
a[i_1, ..., i_n] a.get(i_1, ..., i_n)
a[i] = b a.set(i, b)
a[i, j] = b a.set(i, j, b)
a[i_1, ...,i_n] = b a.set(i_1, ..., i_n, b)
a() a.invoke()
a(i) a.invoke(i)
a(i, j) a.invoke(i, j)
a(i_1, ..., i_n) a.invoke(i_1, ..., i_n)
a += b a.plusAssign(b)
a -= b a.minusAssign(b)
a *= b a.timesAssign(b)
a /= b a.divAssign(b)
a %= b a.modAssign(b)
a == b a?.equals(b) ?: b === null
a != b !(a?.equals(b) ?: b === null)
a > b a.compareTo(b) > 0
a < b a.compareTo(b) < 0
a >= b a.compareTo(b) >= 0
a <= b a.compareTo(b) <= 0

凛「いっぱいあるにゃ~」
ことり「まあ、覚えるようなものじゃないから・・・」

ことり「ここにない演算子、===とか!==とかはオーバーロードできないから気を付けてくださいね」


ことり「そろそろ、終わりが見えてきたね」
凛「あと6回くらい?」
ことり「この講義はラブライブ!サンシャイン!!のTV放送が始まる前に完結させることを目標にしています」
凛「いよいよ本格的にバトンタッチの準備にゃ!」


LINEで送る
Pocket


コメントを残す

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