TOP
>
設計・移行・活用
> その他
Javaコーディング規約
第12回:スレッド・ガベージコレクションに関するコーディング規約
著者:
電通国際情報サービス 高安 厚思、東田 健宏
アイエックス・ナレッジ 河野 弥恵
2006/1/25
前のページ
1
2
3
4
その他
最後に、その他として2つの規約を紹介します。
Cloneableを明示的に実装(C_MISC001)
clone()はオブジェクトのシャローコピーを作成するメソッドですが、Cloneableインターフェースを実装せずに利用しようとするとエラーが発生します。
シャローコピーとは、コピー対象のオブジェクトに参照情報があった場合、そのオブジェクトの参照情報のみを複写する方法です。
シャローコピーとは違うコピー方法としてディープコピーがあります。ディープコピーは、コピー対象のオブジェクトに参照情報があった場合、参照先のオブジェクトも一緒にコピーします。
図6:シャローコピーとディープコピー
ディープコピーを実装する際は、参照先オブジェクトの2重コピーに注意が必要です。
図7:ディープコピーの失敗例
ちなみに、Cloneableのように特に機能を定義している訳ではなく、ある機能の利用可否を判定するためだけに実装されるインターフェースを、「マーカーインターフェース」と呼びます。
キャスト処理はinstanceofで囲む(C_MISC002)
キャスト処理は継承関係にあるもの同士しか行えません。継承関係にないものがキャスト処理の対象になる(なり得る)場合は、instanceofを用いたチェックを必ず行うようにしてください。このチェックを省略すると、様々なエラーの原因になることがあります。
なお、キャスト処理に限らずエラーが発生し得る処理の前には、必ずチェックを行う習慣をつけるべきです。
まとめ
今回紹介したスレッド、ガベージコレクション、その他の2つの規約は、Java特有の概念も多く、理解が難しかったかもしれません。
これらの分野は、経験の浅いプログラマにとってはつまずきやすい箇所ですが、要所々々をコーディング規約によりあらかじめルール付けておくことで、無用なミスを排除することができます。状況によってはあまり意識しなくてよい場合もあるかもしれませんが、Javaプログラマとしては、基本的な概念とルールをしっかりと押さえておきたいところです。
さて、12回に渡りJavaのコーディング規約について説明してきました。コーディング規約を設けることの利点はご理解いただけたかと思います。
説明した規約の中には、言語を問わず不変的なルールもあればJava言語特有のルールなどと、様々なパターンがありました。しかし、全体を通して根底にあるものは第1回に紹介した「コーディングの心得5ヶ条」です。
見やすさを重視せよ
ネーミングはわかりやすく
サンプルを鵜呑みにしない
同じコードを二度書かない
役割は1つに
表2:コーディングの心得5ヶ条
紹介したどの規約も、この5ヶ条を基本にしています。
今までの記事でも述べてきた通り、コーディング規約は絶対ではありません。5ヶ条に反しない限り、どんどん改良してください。そして、プロジェクトの事情に即して、冗長なルールは削り、不足は補いながらより使いやすいコーディング規約を作り上げてください。
そうして作り上げたコーディング規約は、プログラミングの作業効率とプログラムの品質の向上に役立つものになります。
最後になりますが、本連載がその一助になれば幸いです。
前のページ
1
2
3
4
著者プロフィール
株式会社電通国際情報サービス 高安 厚思
株式会社電通国際情報サービス 開発技術センター
Java(J2EE)/オブジェクト指向の研究開発やプロジェクト支援、開発コンサルティングに従事。モデル、アーキテクチャ、プロセスが探求対象。今回は Javaコーディング規約2004の仕掛け人。
著者プロフィール
株式会社電通国際情報サービス 東田 健宏
株式会社電通国際情報サービス 開発技術センター
CTI、Webアプリの開発経験を経て、現在は主にプロジェクトマネジメント支援、プロセスエンジニアリング、ソフトウェア工学研究開発に従事。最近はコーチング、ファシリテーションといったヒューマン系スキルに興味を持ち日々修得に努めている。
著者プロフィール
アイエックス・ナレッジ株式会社 河野 弥恵
アイエックス・ナレッジ株式会社 第1事業部所属
主にCOBOL、PL/1等のシステム開発に従事。コーディングに限らず、誰もが気持ちよく守れる規約を模索中。
INDEX
第12回:スレッド・ガベージコレクションに関するコーディング規約
はじめに
ウェイト中のスレッドを再開するときはnotifyAll()メソッドを利用する(C_TRD002)
wait()メソッドはwhileブロック内から利用する(C_TRD007)
その他