
プログラムエラーで得をする人は誰もいません。
プログラムエラーは、世の中の粗大ゴミです。
でも、プログラムにエラーは付きもの。
牛丼の紅生姜、たい焼きにアンコ、雨の日に傘をさすぐらい、
プログラムコードには、バグやら不具合が含まれています。
そんな不具合に対して真っ向から向き合う、エンジニアの姿勢をブログにしたためておきたいと思います。
PHPでTry~Catch
index.php
<pre>
<?php
echo "<h1>Try ~ catch</h1>";
require_once("func_1.php");
try{
new Func1();
}
catch(Exception $e){
echo "<h2>エラーが発生しました</h2>";
echo "エラー内容: ".$e->getMessage()."<br>";
}
echo "<p>でも、正常に終了</p>".PHP_EOL;
func_1.php
<?php
class Func1{
function __construct(){
echo "<h2>Func-1</h2>";
throw new Exception('わざとエラー');
}
}
オブジェクト指向でのclassに、new Exception()などでワザとエラーを作って、
それを、親関数で受け取って、エラー処理が書けます。
エラー処理を作るのではナック、通常は、「ココでエラーが起きるかも」てきな場所に、埋め込んだり、classに対してwrapする感じで、Try~Catchをセットしておきます。
こうすることで、エラーが起きても、、プログラムが停止することはありません。
JavascriptでTry~Catch
main.js
import { Func1 } from "./func_1.js"
class Main{
constructor(){
try{
new Func1()
}
catch(e){
console.log(e)
}
console.log("でも、正常に終了")
}
}
new Main()
func1.js
export class Func1{
constructor(){
throw new Error('ほげ')
}
}
JavasciptもPHPと似たように書く事ができます。
エラーを検知するという視点で考えて、バグ臭い匂うところに、Try-Catchするというのをお作法として設置できるようになると、
ワンランク高いシステムが作れるというモノです。
例外についての知識
ところで、例外って、どういう風に考えるのがいいか少しふかぼってみます。
例外(Exception)とは何か?
通常の処理フローとは異なる“特別な状況”を表現するための手段。
想定外だけど、発生し得るイベント。
堅苦しく考えずに、とにかくプログラムの流れを妨げるものは全て例外と考えてもいいかもです。
エラーと例外の違い
エラーは致命的で修復不能な問題(例:メモリ不足)、
例外はプログラム内で扱える可能性のある問題(例:ファイルが見つからない)。
でも、エラーも例外の一部と考えてもいいかも。
Try-Catchは“保険”のようなもの
事故は避けたいけれど、起きたときの備えがあるだけで安心感が違う。
未然に落ちない設計は理想。でも、Try-Catchは現実世界での“譲れない優しさ”。
とにかく、システムが止まってしまう事を阻止するという、冗長でも、安定的なシステムを作れた方が良いに決まっています。
エラーを握りつぶさないことが大切
Catchしたエラーをconsole.log(e)やログ出力などで記録しておく事で、みる人がみたら、何かしらトラブっている事がわかればよし。
「なぜ起きたか?」を後で知るための伏線を残すのがプロの姿勢なので、ログに残す事は忘れてはいけない。
あとがき
エラーが出るのはイヤなこと。
だけど、エラーを無視するのは
もっとイヤなこと。
Try-Catchを書くというのは、未来の自分や他の開発者への思いやり。
画面にエラー文字が出る事は、裸を見られるよりも恥ずかしいのは、プログラマーの特性なのだろうか?
今回書いたのは、ごくシンプルなサンプルだけど、「どこでエラーが起きるかも」が想像できるようになると、一段深いレベルに入れる。
「プログラムは止まらずに走り続ける」──その裏には、地味で堅実なTry-Catchの支えがある。
バグと付き合うことは、エンジニアの宿命。でも、仲良くする方法はちゃんとあるという事を理解する事が大事。
そんな気持ちを込めて、今日も静かにTry-Catchを一行、そっと添えておきたい。
0 件のコメント:
コメントを投稿