• ベストアンサー

try~catch構文は、どういうメリットがあるのですか?

harutovxの回答

  • harutovx
  • ベストアンサー率50% (11/22)
回答No.1

なんかPerlとJavaがごっちゃになっちゃっているようですが、その辺の理解は大丈夫ですか? 上記はJavaのコードで、下記はPerlのコードです。 以下のように書いたほうが分かりやすいと言う前に、Javaでは通常下記のコードは動きません。例外の実装が違うからです。 try~catch構文を使うメリットは数え上げられないですが、わかりやすい例では、 IOExceptionなら○○の処理をする NetworkExceptionなら○○の処理をする と例外の種類によって処理を変えることが出来るし、書き方によっては、エラー処理を一カ所にまとめて記述できるため、視認性が上がる。 などが有ります。 実際にそのようなコードを書いて、体験しないと有用性が解りづらいかと思いますが。

sweepea
質問者

補足

> と例外の種類によって処理を変えることが出来るし } catch (IOException $e) {   処理; } catch (NetworkException $e) {   処理; } のようにできるということでしょうか? > 実際にそのようなコードを書いて、体験しないと有用性が解りづらいかと思いますが。 実際に以下のように使用しております。 } catch (DBException $e) {   $dbh->rollBack();   die($e->getMessage()); } DBを扱ってる際に、何かしらエラーを補足した場合にロールバックするという場合に、このtry~catch構文は非常に嬉しいです。 ですが、エラーを補足した場合に単に、エラーを出力して終わるだけの場合に、try~catch構文を使用するメリットが分からないのです。

関連するQ&A

  • なぜtry{}catch(){}の中?

    DBへの更新を行う際に 私は try{ トランザクションスタート 処理 コミット }catch(Exception e){ ロールバック } の書き方をしていますが トランザクションスタート try{ 処理 コミット }catch(Exception e){ ロールバック } の書き方をしている人がいたので try{}catch(){}の中に トランザクションスタートを入れて下さいと伝えたところ なぜ?try{}catch(){}の中に入れるのか聞かれたのですが 答えられませんでした。 ネットにて色々なソースコードをみても try{}catch(){}の中に書かれているのでそういうモノとして 覚えているのですが、なぜ中なのでしょうか?

    • ベストアンサー
    • PHP
  • try~catch

    php初心者です try~catchをわかりやすく教えてください throw new Exceptionが出現したら、catchまでの処理をしないでとばすとゆうことですか? try~catchを抜けたら、他の処理は普通に実行されるのでしょうか? try~catchのカッコ{で囲む範囲は大きくしたほうがいいでしょうか?(大きく囲むと処理スピードおそくなりますか?) try { throw new Exception('エラーが発生しました');  print "hoge"; } catch (Exception $e) {  echo '例外発生', $e->getMessage(), "\n"; }  print "foo"; よろしくお願いします

    • ベストアンサー
    • PHP
  • 継承クラスで定義したメソッドのtry-catch文

    親クラスで、子クラスで実装されたメソッドのExceptionをキャッチしたいのですが、 うまくいきません。 何か良い方法はないでしょうか? abstract class A { public __construct(){ try{ $this->testA(); }catch(Exception $e){ var_dump(1); } } abstract function testA(); } class B extends A { function testA(){ throw Exception('test',1); } } try{ new B; }catch(Exception $e){ var_dump(2); // こっちが動く } よろしくお願いします。

    • ベストアンサー
    • PHP
  • PDO で try~catch 構文を使う場所は?

    PHP5のPDOはtry~catch構文に対応しているのですが、どのように使えばいいのでしょうか? SQLを発行する度に、もしくはSQLを発行するメソッドの度に、try~catchしなければいけないのでしょうか?とても面倒です。 現時点では、例外が発生した時にする処理といえば、 trigger_error($e->getMessage(), E_USER_ERROR); みたいに、trigger_error するだけです。 であれば、そもそもcatchせずに、uncaught のまま勝手にエラったままに放っておいても問題ないのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • try~catchについて

    プログラム初心者です 繰り返し処理の中でtry~catchにスローしてもいいでしょうか?(正常にfor文は終了しますか?) try { for($a = 0; $a < 5; $a++) { if($a==3){ throw new Exception('3'); } } catch (Exception $e) { $msg = $e->getMessage(); } よろしくお願いします

    • ベストアンサー
    • PHP
  • Try-catch文(FileInputStream)

    下記コードでエラーが出現して困っています。 fis.close();の部分でコンパイルエラー( 変数 fis は初期化されていない可能性があります。)の結果が返ってきます。 必ず通過するfinallyブロックにclose()処理を記述して、この処理もエラーが発生する可能性があるので、try-catchする必要があると教師が言っていました。 エラーが出現する原因はなぜでしょうか? 回答のほどよろしくお願い致します。 FileInputStream fis; try{ fis = new FileInputStream(fi.getAbsolutePath()); while( (b[i++] = fis.read()) != -1); }catch(FileNotFoundException e){ } catch(IOException e){ }finally{ try{ fis.close(); ←コンパイルエラー( 変数 fis は初期化されていない可能性があります。) }catch(IOException e){ } }

    • ベストアンサー
    • Java
  • try catchについて

    try catchの動きで質問があります。 以下が簡略化したソースです。 -------ここから--------------------- ストリーム1; ストリーム2; try{ try{ //ストリーム1を使った処理 }catch(IOException e){ throw e; }finally{ //ストリーム1のクローズ } try{ //ストリーム2を使った処理 }finally{ //ストリーム2のクローズ } } catch(IOException e){ throw new hogeException(); } ------ここまで-------------------------- 内側でスローされた例外は、外側でcatchされるのですか? また、内側でcatchをしなかった場合、外側でcatchされるのですか? この2点を教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • try{}catch(){}とデストラクタの関係を教えてください。

    try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか? 【1】 try{  throw(CError(100, "エラー情報")); }catch(CError& err){  //ここでerrを参照しても問題ないのでしょうか? } 【2】 try{  CError err(100, "エラー情報");  throw(err); // (1) }catch(CError& err){  //ここでerrを参照しても問題ないのでしょうか?  //まだデストラクタはちゃんと動作するのでしょうか?  //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか? } 宜しくお願いします。

  • 例外処理の作法

    基本的なことですみません、 Try~Catch構文で例外をハンドリングする際に「RuntimeException」と 「Exception」のどちらでCatchするのが良いのでしょうか?。 雑誌のサンプルを眺めているのですが、使い分けのやり方が 良くわかりません。 すみませんがアドバイス頂ければ幸いです。

    • ベストアンサー
    • Java
  • 例外処理

    デバッグをしてみました。 すると,try・catch文までしか実行されていないことがわかりました。 public void init() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } 例外処理について調べてはみたものの、なぜこの部分で実行が止まってしまうのか、 解決につながるようなことが,みつかりません。 1.例外処理はどのような処理なのか 2.なぜ、try・catchで実行が終了してしまうのか 教えてください。

    • ベストアンサー
    • Java