がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

あっちへいっちまえ!!

PHP 5.3で登場、goto命令
http://journal.mycom.co.jp/news/2009/01/08/037/index.html
経由
Goto your Christmas presents with PHP 5.3
http://schlueters.de/blog/archives/94-Goto-your-Christmas-presents-with-PHP-5.3.html


んと…

ZEND DEVELOPER ZONE, PHP: GOTO 5.3でJohannes Schluter氏の公開したブログが紹介されている。氏は自身のブログにおいてPHP5.3で導入される新機能のいくつかを紹介しており、特にGoto your Christmas presents with PHP 5.3が興味深い。PHP 5.3で導入されるgoto構文をわかりやすいコードとともに紹介している。

はぁ「わかりやすいコード」ですかなるほどふぅんへぇはぁほぉあほ。


一応、サンプルコードを書いてみる。

    <?php
    function process_file($filename) {
        $fp = fopen($filename, "r");
        if (!$fp) {
            goto cleanup;
        }

        $row = fread($fp, 1024);
        // do something with the row
        if ($error_while_processing) {
            goto cleanup;
        }

        $a_few_bytes = fread($fp, 4);
        // do something again ...
            if ($error_while_processing) {
            goto cleanup;
        }

        /* ... */cleanup:
        fclose($fp);
    }

    ?>

……………orz
どう考えても

<?php
function process_file($filename) {

  $ret = false;

  $fp = fopen($filename, "r");
  if (false === $fp) {
    return $ret;
  }
  
  $row = fread($fp, 1024);
  // do something with the row
  if (false === $error_while_processing) {
    $a_few_bytes = fread($fp, 4);
    // do something again ...
      if (false === $error_while_processing) {
        $ret = true;
    }
  }

  /* ... */
  fclose($fp);

  //
  return $ret;
}

?>

せめてこうだべさっていうかどこにgotoが介在する余地あるねん?
或いはちゃんと例外でぶん投げるかね。

goto命令の多用はメンテナンスできないソースコードを生むため懸念されることも多いが、Goto your Christmas presents with PHP 5.3で紹介されているようにエラー発生時に飛ばしてまとめて終端処理をするというのはgoto命令がよく使われるケースだ。

えと…何のために「例外」がある思うてるねん?
っていうか筆者さん、例外って概念ご存じないのかしらんもしかして*1
さらにっていうかなんていうか。マイコミジャーナルってろくな記事が無いような気がするのは気のせいかしらん?


ついでに。元のやつだと「open出来てないハンドルをcloseしてる」し。
なんていうか…「だめだこりゃ」。

*1:Javaやってるはずだからgotoよりよっぽど例外のほうが馴染んでるはずなんだけどなぁ…普通に考えると