LL脳がscalaの勉強を始めたよ その89


Scalaコップ本の25章の続きをやっていきますよー、25章はアノテーション関連のアレやコレで今回は標準アノテーションについてやっていきますよ

標準アノテーション

Scalaではいくつか標準的に定義されているアノテーションがあるみたいですね。Scala認定アノテーションとでも言えばいいのですかね(´・ω・`)

使うべきでない機能の指定

公開してしまったものの内容がヒドイので後々無くしていきたい場合なんかには@deprecatedアノテーションを使うみたいです。@deprecatedが付与されたメソッドやクラスを使うと、コンパイル時に呼び出しているコード側に警告がでるようになるとのこと(´・ω・`)

とりあえず書き方はこんな感じになりますかね

// これは後々なくすコードです
@deprecated def bigMistake() = 

警告が出るようにしてから一定期間が経過したらあっさり削除ってのがオススメだそうです。

揮発性フィールド

とある変数が複数のスレッドから利用されていることをコンパイラに通知する場合は@volatileアノテーションを付与するみたいですね。コンパイラはこのアノテーションを確認するとこの変数を、より予測可能な形で複数のスレッドからアクセスできるように実装されるそうです(´・ω・`)

なお、@volatileアノテーションはプラットフォームによって保証されることが異なるものの、javaプラットフォームではjavaフィールドに対してvolatile修飾子をつけた場合と同じ動作になるみたいです。

ちなみに@volatileアノテーションの詳細は30章で出てきますよ、とのこと。正直スレッドプログラムは殆ど書いたことがないので、30章に期待ですな

バイナリーシリアライゼーション

オブジェクトとバイトストリーム間の相互変換を行うことで、オブジェクトをディづくに保存したり、ネットワーク越しに送信したりといった処理を行う際に役立つものとしてシリアライゼーションフレームワークていうのがあるらしいのですが、Scalaでは独自のシリアライゼーションフレームワークをもっていないのでプラットフォームが提供酢の物を使うしか無いみたいです。

そのため、Scalaが様々なプラットフォーム上のシリアライゼーションフレームワークを使う場合に役立つアノテーションを3つ持っているとのこと。


(´ε`;)ウーン…こちらもシリアライズをあまりやったことがないから使ってみないと実感できないっすね…今後の体験に期待デス

get/setメソッドの自動生成

通常であればScalaコードで定義したフィールドには自動的にget/setメソッドが補完されるのでそれらを明示的に書く必要はないのですが、プラットフォームによっては自動補完されない場合もあるみたいです。そんな時には@scala.reflect.BeanPropertyアノテーションを付ければ良いみたいです。

このアノテーションを発見するとコンパイラが自動的にget/setメソッドを生成してくれるみたいで、例えばhogeというフィールドであればgetHoge, setHogeというget/setメソッドを生成してくれるみたいです。ただし、これら生成されたメソッドはコンパイルパスが通ることで初めて使えるらしいので、同時にコンパイルされるコードから各メソッドにはアクセス出来ないので注意とのこと…まあ、このアノテーションは標準的なget/setメソッドを要求するフレーム枠のためのモノで、通常は該当フレームワークを利用するScalaコードと同時にコンパイルしたりはしないので大丈夫だYOとはコップ本の弁です。

パターンのチェック回避

これまで何度か出てきた@uncheckedです。パターンマッチ時に徹底的なチェックを回避してエラーを出さないようにするアレですネ。詳しくは15章でやったので省略します(´・ω・`)

以上です

25章はこんな感じです。言語仕様ではないけども開発をしっかりサポートするZEなアノテーション群でした。使いこなせると色々便利そうなので、積極的に使っていくよう頑張ります。

次回は26章のXML関連をやっていきますよ、ちょっと楽しみです(´・ω・`)