Part32: アノテーション

ことり「ぷかぷかと特番、見た?」
凛「見た見た!んーっ、すわわかわいいにゃーっ!」
ことり「すわわ推しなんだ・・・」
凛「明らかにバラエティ苦手そうなのに芸人8人に混じってよく頑張ってるにゃ」
ことり「まあこの時期だと、キャラクターより声優のイメージが強いよね」
凛「すわわは~いつ~も~胃が痛い~♪」
ことり(※すわわ→松浦果南役:諏訪ななかさんです)


ことり「今日はアノテーションのお話しです。コードにマークを付ける機能、かな」
凛「コードにマーク?コメント?」
ことり「ううん、コメントは、人が読むだけだったよね。アノテーションは、コンパイラも理解できます」
凛「// この行を消すとなぜか動かないみたいのをコンパイラに教えてあげるの?」
ことり「最低のコメントだよねそれ・・・」
凛「// 今月の時間外労働は200時間を超えたが会社から残業代の支払いがない。俺は会社を去るがみんなも早く逃げろ
ことり「遺言!?」
凛「// 2016/06/27 rin.h 配列の要素数を50に変更 -start
ことり「コメントでバージョン管理はだめっ!」

ことり「たとえばね、最初に実装した関数が、後になって使われなくなりました。けど、すでにその関数を使っているコードのために残しておく必要があります」
凛「後方互換性だね」
ことり「そんなときに使う@Deprecatedっていうアノテーションがあります。これはJavaで標準で用意されているんだけど、Kotlinでも使えるの」

ことり「sing関数を非推奨としてマークしました。これを実行すると、普通に動くんだけど、Problems Viewを見ると」

Warning:(2, 4) 'sing(): Unit' is deprecated. この関数は非推奨です

ことり「こんなふうに出力されます。使わないでね、って開発者には伝わるようになってるの」
凛「マークって、こういうことなんだ」
ことり「@Deprecated以外にも、標準で用意されているアノテーションはいろいろあるから、調べてみてね」

ことり「アノテーションは、自分で作ることもできます。アノテーションクラスっていうクラスを作る形だよ」

ことり「アノテーションがいろいろついてるけど、これはオプション。最低限public annotation class Fancyだけで大丈夫」
凛「こうすると、@Fancyみたいに書けるようになるの?」
ことり「うん。あとは、上に書いてあるのはアノテーションに対するアノテーション、メタアノテーション。@Targetはどこに付けられるか、@Retentionはアノテーションの情報をコンパイルされたファイルに残すかどうか、@MustBeDocumentedは公開APIとしてドキュメント化すべきか」

ことり「アノテーションをつけられる場所はいろいろあります」

ことり「こんなふうに、クラスにつけたり関数につけたり、引数や関数内の式にもつけられるんです」
凛「むー、覚えることたくさんだにゃ」
ことり「アノテーションは、最初は自分で作るよりもフレームワークとかライブラリで提供されてるのを使うことがほとんどだと思うから、作り方より使い方だね」

ことり「使い方といえば、コンストラクタにつける場合はちょっとだけ注意です」

ことり「class SchoolIdol(name: String)って書き方を主に使ってきたけど、アノテーションをつける場合はconstructorキーワードを使って宣言する必要があります」
凛「クラスにつけるのと区別できなくなっちゃうからだね」


ことり「実はリファレンスからだいぶ割愛しちゃってるんだけど・・・あっちは、それなりの、特にJavaの知識が前提になってるから」
凛「とりあえず使う分にはこれでいいと思うにゃ」
ことり「次回はリフレクション。メタな話が多くなってきて、ちょっと大変かな?」
凛「ちょっとじゃないにゃ・・・」


LINEで送る
Pocket


コメントを残す

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