ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

goto文の有用な使い方を考えてみる

MugeSoさんのトコで話題にされていた件ですが。
対した事ない頭を使って自分も考えてみた。同じくDB周りで。

<?php

  while( true )
  {
     $Connect = mysql_connect( "server", "username", "password" );

     if( $Connect == true ){ break; }
  }

?>

これが、

<?php

  Retry:
  $Connect = mysql_connect( "server", "username", "password" );

  if( $Connect != true ){ goto Retry; }

?>

このようになる、とか。例外時の継続処理や反復系の実装が(若干)楽に書けるのでは、と想像してみる。
ただ、これは(あからさまに)分かりやすくしている(手を抜いている)例なので、ラベルの定義位置とgotoしている場所が凄く離れていた場合は、ここまでの見通しの良さは期待できないかもしれません。
後は何だろうなぁ。。。やっぱり、ネストしまくった実装で一気に処理を飛ばす時とか?
例外処理が無い言語やLoop処理がネストしまくった状態で一気に抜ける事が出来ないような言語ではgoto文の意義は(それなりに)あったようにも思えますが、最近の言語的にはどうなんでしょうか。
使い方次第で良くも悪くもなるような気がするので、一概には言い切れないかなぁ。。。という感じです。例外処理を投げるのも、ぶっちゃけgoto文みたいなモンなので。
例外処理については、このような意見もあるようです。非常に興味深い。
goto文は、あれば便利かもしれない機能であって、個人的にはmustな機能ではない為、積極的に使う事は無いとは思いますが、この機能は利用者よりはフレームワーク(もしくはライブラリ)開発者の方が使う機会が多いんじゃないのかな、という気がしてます。
ただ、この機能に関しては良い話を聞く事が少ないので、発想を逆転させて(PHPer的に)こういう使い方すると便利(面白い)カモ、とか考えてみると面白いかもしれませんね。何か新しい発見があるかもしれません。
自分に関しては(まずは)このような提案、という事で。他にも思いついたら書くかもしれません。
コメントにあったマクロや#ifdefの機能は。。。どちらも乱用してしまうと見通しが悪くなるので、PHP的にはmustな機能ではないかな、と思いますが、あると便利な局面があるかもしれません。