JavaFXをマスターしよう:基本的な構文--関数、メソッド、例外処理 - (page 2)

沖林正紀

2007-07-23 18:34

例外処理

 operationではなく、どうしても例外処理を行いたい場合もあるだろう。その時はtry〜catch〜finallyを記述できる。ただ、お馴染みのJavaの構文とは少し異なる。リスト2-3の後半がその例だ。リスト2-4のようにoperation内で記述することもできる。

 リスト2-1の関数sumは引数が数値でなければ実行できない。そこで例外がスローされた場合はメッセージを表示するようにしている。catch節に記述されたexはThrowableやExceptionおよびそのサブクラスではなく、getMessage()やprintStackTrace()などのメソッドは実行できないので注意が必要だ。

リスト2-3 例外処理

function sum( n )  {
  // ..... リスト2-1参照 .....
}

try  {
  println( sum( '1からnまでの総和' ) );   ← 実行されない(例外がスローされる)
}  catch( ex )  {
  println( '引数は数値にしてください' );  ← 実行される
}  finally  {
  println( sum( 10 ) );  ← 実行される
}

リスト2-4 operation内でtry〜catchを記述した例

operation sum(n)  {
  try  {
    var ans = n * ( n + 1 ) / 2;
    return ans;
  }  catch( ex )  {
    return '引数は数値にしてください';
  }
}

 printStackTrace()などのメソッドが実行できないと、デバッグには不便だと感じるかもしれない。もしスローされる例外のクラスがわかる場合は、リスト2-5のようにcatch節でクラス名を指定できる。こうすればprintStackTrace()などでデバッグもできるようになる。

 このとき、指定する例外のクラスは、たとえjava.langパッケージのものであっても、必ずインポートしておかなくてはならないので注意しよう。また、このリストのcharAt関数では、引数と戻り値のデータ型も同じように指定しているので、こちらにも注目していただきたい。

ちなみに"{ex.message}"はex.getMessage()の値を表す。JavaFXでは、'〜'で囲まれた文字列はそのままの内容で定数とみなされるが、"〜"で囲まれた文字列は、{〜}で囲まれた部分の値を確定したあとの文字列が実際の値となる。

リスト2-5 スローされる例外のクラスがわかる場合

import java.lang.IndexOutOfBoundsException;

// 関数の定義(引数や戻り値のデータ型を指定)
function charAt( s:String, n:Number ) :char  {
  return  s.charAt( n );
}

try  {
  println( charAt( '文字列の長さ', 1 ) );    ← 「字」
  println( charAt( '文字列の長さ', 100 ) );  ← IndexOutOfBoundsExceptionがスローされる
}  catch( ex:IndexOutOfBoundsException )  {  ← exのクラス名を指定
  println( '文字列はもっと短いです' );
  println( "{ex.message}" );  ← ex.getMessage()の値を表示
  // ex.printStackTrace();
}

 次回はクラスと配列について取り上げたい。JavaFXでは宣言型の構文が採用されており、同じのクラスの属性(プロパティ)とメソッドとを別のブロックで定義する、JavaScriptに似たプログラミングが可能だ。配列に関しては、Javaとのあまりの違いに戸惑うかもしれないが、スクリプト言語では一般的な要素が多く取り入れられている。これを機会に新しい世界に繰り出そうではないか。

ZDNET Japan 記事を毎朝メールでまとめ読み(登録無料)

ホワイトペーパー

新着

ランキング

  1. セキュリティ

    「デジタル・フォレンジック」から始まるセキュリティ災禍論--活用したいIT業界の防災マニュアル

  2. 運用管理

    「無線LANがつながらない」という問い合わせにAIで対応、トラブル解決の切り札とは

  3. 運用管理

    Oracle DatabaseのAzure移行時におけるポイント、移行前に確認しておきたい障害対策

  4. 運用管理

    Google Chrome ブラウザ がセキュリティを強化、ゼロトラスト移行で高まるブラウザの重要性

  5. ビジネスアプリケーション

    技術進化でさらに発展するデータサイエンス/アナリティクス、最新の6大トレンドを解説

ZDNET Japan クイックポール

注目している大規模言語モデル(LLM)を教えてください

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]