TOPシステム開発> 【新・言語進化論】プロの言語仕様の読み方> 第2回:nullは何型? 型、値、変数を読み解く! (1/3)

【新・言語進化論】プロの言語仕様の読み方

【新・言語進化論】プロの言語仕様の読み方

第2回:nullは何型? 型、値、変数を読み解く!

著者:オープンストリーム 松下 雅和

監修者:オープンストリーム 高安 厚思

公開日:2007/11/13(火)

監修から一言

観衆^h^h監修の高安です。本記事はオープンストリームのアーキテクトのメンバー3人に第2回〜第4回までを書いてもらいました。3人が3人ともJavaのスペシャリストですが、それぞれ特徴があるので私としても記事が楽しみです。

第2回は検証が非常にうまい松下さんの担当です。ミドルウェアの検証のときは某ミドルウェアベンダーの人がうれしい悲鳴をあげただろうなと思った技術者です。Java技術の網羅性やバランス感覚の高い彼がどのように言語仕様を語ってくれるか楽しみです。

第3回はLinuxなどのプラットフォーム技術が好きで、プラットフォームの詳細までよく知っている鍋倉さんです。細かい仕組みまで理解しないと満足しない彼がOSと密接にかかわりあうスレッドに関して、言語仕様を基に語ってくれるのが楽しみです。

第4回は難しい技術をわかりやすい図・表現で説明してくれる技術者上野さんです。彼のテーマは例外処理ということで、初心者が一番つまずきやすい例外に関して、仕様を基にどう料理してくれるかが楽しみです。それではさっそくJavaの言語仕様についてみていきましょう。

型、値、変数に関する言語仕様

どのようなプログラミング言語であっても、値を保持するためには変数の存在が欠かせません。変数を理解することでプログラミング言語の特徴がみえてくるため、入門書でもまず変数について詳しく説明していることが多いのではないでしょうか。

Javaの場合、変数に関する言語仕様には、



のような特徴があります。

これらの特徴はJavaの言語仕様の「4 Types, Values, and Variables(型、値、変数)」と「5 Conversions and Promotions(変換と格上げ)」にまとめられています。多くの入門書は仕様についてわかりやすく説明しているため、わざわざ英語の言語仕様を読む必要はないと感じる読者の方も多いかもしれません。

では、ここで1つ問題です。

どのオブジェクトも参照していないことをあらわすnullという値があります。皆さんはnullがどの型に分類されるかご存知でしょうか?

参照型に決まっていると思った読者の方は落とし穴にはまっています。筆者も言語仕様を読むまでは参照型だと思い込んでいました。

言語仕様の「4.1 The Kinds of Types and Values(型と値の種類)」には、「There is also a special null type, the type of the expression null, which has no name. Because the null type has no name, it is impossible to declare a variable of the null type or to cast to the null type. The null reference is the only possible value of an expression of null type. The null reference can always be cast to any reference type. In practice, the programmer can ignore the null type and just pretend that null is merely a special literal that can be of any reference type.(訳:式nullの型である、名前を持たない特殊なnull型という型が用意されている。null型には名前がないため、null型の変数を宣言したり、null型へとキャストすることはできない。null型の式の値として許されているのはnull参照のみである。またnull参照は、常に任意の参照型にキャストすることができる。このためプログラマは、null型を事実上無視し、nullを単に任意の参照型として扱うことのできる特別なリテラルとして考えることができる)」とあります。

nullは、参照型としても扱えるため参照型と思っている方も多いかもしれませんが、言語仕様ではnullはnull型という特殊な型として定義されているのです。

参照型じゃなくてnull型と知っていたから何だと思うかもしれません。しかし、これはあくまでも一例なのです。入門書には仕様の説明と利用方法が書かれていますが、言語仕様にはさらに内部の仕組みまでも詳細に説明されています。

本記事では、実装時に直面しやすいいくつかの問題や疑問に答えながら、型、値、変数に関する言語仕様を読み解いていきましょう。まずは「プリミティブ型の値の計算でなぜキャストが必要か?」について言語仕様をみながら解説していきます。 次のページ




株式会社オープンストリーム 松下 雅和
著者プロフィール
株式会社オープンストリーム 松下 雅和
ソフトウェアエンジニアリングラボラトリ システムズアーキテクト SOA担当
早稲田大学社会科学部卒。中堅SIerの研究開発部門に4年間所属し、JavaやXMLを用いたオープン系のシステム開発に携わった。現在は株式会社オープンストリームにてSOAを適用したプロジェクトに従事している。「なんでも楽しむ!」がモットー。
http://www.opst.co.jp/


株式会社オープンストリーム 高安 厚思
監修者プロフィール
株式会社オープンストリーム 高安 厚思
テクニカルコンピテンシーユニット 主管システムズアーキテクト
横浜国立大学経営学部卒。銀行系シンクタンクでオブジェクト指向技術の研究に携わった後、大手SIerにてアーキテクチャ構築、プロセス研究に携わった。現在株式会社オープンストリームにてSOAを中心とする研究開発およびアーキテクチャ構築に従事。最近はXMLのダイナミックさに魅了されている。
http://www.opst.co.jp/


INDEX
第2回:nullは何型? 型、値、変数を読み解く!
監修から一言
  プリミティブ型の値の計算でなぜキャストが必要か?
  言語仕様をさらに深堀り!