【wenyan-lang / 文言】Error Handling 口語解 try catchの仕方
文言でerror handling を行う方法
当然乍ら、文言ではtry...catch...と記述することはなく、何となれば、文言は漢字を用いるからであります。
そこで文言では、これを漢語で以て実装し、
姑妄行此。
嗚呼。「「滅頂」」之禍。
如事不諧。豈「「虛指」」之禍歟。
吾有一言。曰「「本無此物。奈何用之」」。書之。
豈「「文法」」之禍歟。
吾有一言。曰「「不合文法。不通之甚」」。書之。
豈「「異類」」之禍歟。
吾有一言。曰「「物各其類。豈可混同」」。書之。
豈「「滅頂」」之禍歟。
吾有一言。曰「「嗚呼哀哉。伏维尚飨」」。書之。
不知何禍歟。名之曰「奇禍」。
吾有一言。曰「「人坐家中。禍從天降」」。書之。
乃作罷。
姑妄行此。
嗚呼。「「無足輕重」」之禍。
如事不諧乃作罷。
姑妄行此。
嗚呼。「「事不關心」」之禍。曰「「事不關心。關心者亂」」
如事不諧。不知何禍歟。名之曰「禍」。夫「禍」之「「名」」。書之。乃作罷。
嗚呼哀哉。伏维尚飨
事不關心
単に
先に
簡単な用例
今目標とする機序を、
try {
throw new Error();
} catch (error) {
console.log("ERROR");
}
これを実行すると次のように表示されます。
ERROR
ERRORと文字で通告するような
姑妄行此
嗚呼「「誤謬」」之禍
如事不諧不知何禍歟
吾有一言曰「「ERROR」」書之
乃作罷
ERROR
上の通り、句点「。」はなくとも問題ありません。
定型
要点を抜粋すれば次の通りです。
姑妄行此
嗚呼「「発出するerror名(文字列)」」之禍
如事不諧不知何禍歟
吾有一言曰「「通告文(文字列)」」書之
乃作罷
始めはこれを定型として覚えておくことと致します。
特定のerror に対する処置を定める(if else )
先ほど示した例は、不明な
姑妄行此
嗚呼「「誤謬」」之禍曰「「ERROR」」
如事不諧
不知何禍歟
名之曰「Error」
夫「Error」之「「名」」書之
夫「Error」之「「文」」書之
乃作罷
誤謬
ERROR
この内、姑妄行此がtry、如事不諧がcatch、不知何禍歟がelseに当ります。併し乍ら、ifに当るものは未だ存在しませんので、増訂致しましょう。
姑妄行此
嗚呼「「誤謬」」之禍曰「「ERROR」」
如事不諧
豈「「誤謬」」之禍歟
名之曰「Error」
夫「Error」之「「名」」書之
夫「Error」之「「文」」書之
不知何禍歟
名之曰「不知之」
夫「不知之」之「「名」」書之
吾有一言曰「「UNKNOWN ERROR」」書之
乃作罷
豈「「誤謬」」之禍歟がifに当ります。
誤謬
ERROR
確認
茲で一度、文言で書いたものを
try {
let e = new Error("ERROR");
e.name = "誤謬";
throw e;
} catch (error) {
if (error.name == "誤謬") {
let Error = error;
console.log(Error.name);
console.log(Error.message);
} else {
let 不知之 = error;
console.log(不知之.name);
console.log("UNKNOWN ERROR");
}
}
二者は次の通り対応します。
| 文言 | |
|---|---|
| 姑妄行此 不知何禍歟 乃作罷 |
try { } catch (error) { } |
| 嗚呼「「誤謬」」之禍曰「「ERROR」」 | let e = new Error("ERROR"); e.name = "誤謬"; throw e; |
| 豈「「誤謬」」之禍歟 | if (error.name == "誤謬") |
| 名之曰「Error」 夫「Error」之「「名」」書之 夫「Error」之「「文」」書之 |
let Error = error; console.log(Error.name); console.log(Error.message); |
| 不知何禍歟 | else |
| 名之曰「不知之」 夫「不知之」之「「名」」書之 吾有一言曰「「UNKNOWN ERROR」」書之 |
let 不知之 = error; console.log(不知之.name); console.log("UNKNOWN ERROR"); |
確認問題:冗を探す
以上を受けて、始めに挙げた例から使用されない変数を検出しましょう。
姑妄行此。
嗚呼。「「滅頂」」之禍。
如事不諧。豈「「虛指」」之禍歟。
吾有一言。曰「「本無此物。奈何用之」」。書之。
豈「「文法」」之禍歟。
吾有一言。曰「「不合文法。不通之甚」」。書之。
豈「「異類」」之禍歟。
吾有一言。曰「「物各其類。豈可混同」」。書之。
豈「「滅頂」」之禍歟。
吾有一言。曰「「嗚呼哀哉。伏维尚飨」」。書之。
不知何禍歟。名之曰「奇禍」。
吾有一言。曰「「人坐家中。禍從天降」」。書之。
乃作罷。
解答
名之曰「奇禍」。の部で定められている変数奇禍は使用されません。
主要のerror
文言は、元より幾つか
| 漢語 | 英語 |
|---|---|
| 文法 | SyntaxError |
| 逾界 | RangeError |
| 異類 | TypeError |
| 虛指 | ReferenceError |
俚言解
以降は、機序ではなく語意に着目して読み解いて参ります。
基本文法の意味
姑妄行此
・・・
如事不諧
豈「「~~」」之禍歟
・・・
不知何禍歟
・・・
乃作罷
姑妄行此
姑は姑息と言うように「しばらく」の意、妄は「みだり」の意でありますから、「姑妄行此」とは「姑く妄りに此を行う」の意味であろうと考察されます。tryは失敗し得る処理を行う際のものですから、失敗するまでは行うという意味で解釈できます。
如事不諧
如は「もし」の意、諧は諧和、諧調と言うように「かなう」、「ととのう」の意でありますから、「如事不諧」は「如し事の諧はざれば」の意味であろうと考察されます。tryでの処理が失敗したことを「事不諧」と表現したのでしょう。
豈「「~~」」之禍歟
豈は疑問の副詞「あに」の意、禍は
不知何禍歟
禍は豈「「~~」」之禍歟で定めない全ての
乃作罷
乃は「すなわち」、「ただちに」の意、罷は「やめる」の意でありますから、「乃作罷」は「乃ち罷と作す」、「乃ち罷む」の意味であろうと考察されます。try...catch...の終端を示すための言葉であります。
error
逾界
逾は「こえる」の意ですから、「界を逾ゆ」の意味となります。
例中の語
文字列や変数名として現れる語を紹介致します。
「「滅頂」」之禍。
滅頂は「溺れる」こと。即ち滅頂の禍とは、「溺死」、「破滅」の意にして、茲では「破滅」の意味を用いているものと考察されます。
曰「「嗚呼哀哉。伏维尚飨」」。
全唐文卷二百六より祭韋府君文が出典でありましょう。嗚呼哀哉は「あゝ哀しきかな」の意。伏維は本来「伏惟」と書き、「伏して惟ふ」、「謹んで考える」の意。尚は「こいねがわくは」、饗は「うける」の意より、「尚くは(祭礼のもてなしを)饗けんことを」の意にして祭文の終辞であろうと推察されます。亡き人に思いを馳せる文章です。
曰「「人坐家中。禍從天降」」。
「人、家の中に坐りて、禍、天より降る」の意味で、中国では「人在家中坐,鍋從天上来」という言葉が流行しました。「人は思いもよらない災難を避けられない」ことの比喩であることから、「思いがけない
無足輕重
無足輕重は「取るに足らない」意の言葉です。
姑妄行此。
嗚呼。「「無足輕重」」之禍。
如事不諧乃作罷。
この機序から得られる結果は何もありません。「取るに足らない」からこそ、何も処理を行っていないのです。
曰「「事不關心。關心者亂」」
「何事も気にしない方がよい。一度気になれば心が乱れる。」という意味の諺です。
Discussion