Replies: 8 comments
-
@scivola 記事の企画のご提案、ありがとうございます! |
Beta Was this translation helpful? Give feedback.
-
いえー,私には書けない(というか,私もよく分かってない)ので,ぜひどなたかにお願いしたく。 |
Beta Was this translation helpful? Give feedback.
-
例外の実装デザインは、るびま40号・41号でも咳さん須藤さんが熱く語られていましたね。 |
Beta Was this translation helpful? Give feedback.
-
@sekaiya 例外に限らずプログラムの「流れ」をコントロールすること全般のデザインはものすごく難しいですよね。 例外や条件分岐、繰り返しなどの制御構造系の話や、大域脱出に使われる Kernel.#catch と Kernel.#throw とか、Thread や Fiber や Continuation なんかの話と絡めて「プログラムの流れのデザイン」に関してエッセイにするとすごく面白そうになりそうな気がします(が、書いてくれる人がなかなかいないのが実情ではあります‥‥誰か書いてくれないかなあ)。 @scivola そういえばend 抜けの箇所を探すコツの件ですが、ruby の -w オプションを使うとインデントのずれた end があるとチェックしてくれたりします。簡単な例だと
というスクリプト hello.rb を
と実行すると
という感じで教えてくれます。ご参考までに。 |
Beta Was this translation helpful? Give feedback.
-
うっ,知りませんでした。 -w オプション。 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
1.9 からなのですね。リリース時にそういう情報を見落としてた(もしくは知ってすぐに忘れた)のが悔しい。 |
Beta Was this translation helpful? Give feedback.
-
magic comment の warn-indent については 1.9.3 の NEWS に書いてあるみたいですが、 |
Beta Was this translation helpful? Give feedback.
-
エラーメッセージおよび例外について分かりやすく解説したものが少ないと感じています。初心者がもう一歩踏み込むときの障壁になっているのではないでしょうか。
以下のような内容の記事があるといいと思います。
◎エラーメッセージの読み方(初心者向け)
以下のようなエラーメッセージで,$end や keywords_end や tSTART が何を指しているのか分からないんですよね。
[1] syntax error, unexpected $end, expecting keyword_end
[2] syntax error, unexpected keyword_end, expecting $end
[3] syntax error, unexpected tSTAR
そして,意味が分かったとしても,[1] は,エラーメッセージに書かれている行番号と,end が抜けている箇所は遥かに離れていることが多いので,該当箇所を探すのが大変です。
end 抜けの箇所を探すコツや,end 抜けに気づきやすいスクリプトの書き方のコツが知りたいです。
また,超初心者向けとして,以下のようなエラーメッセージの「0 for 1」の意味。
wrong number of arguments (0 for 1)
まあ 1 行で説明できるようなものではありますが,引数にデフォルト値があったり,* 付き,& 付きがあったときの数え方に言及するといいかと思います。
◎スタックトレースの読み方(初心者向け)
スタックトレースとは何か。
自分の書いたスクリプトにバグがあって,例外がライブラリーの中で発生しているような場合に,スタックトレースからバグの位置を探るコツ。
◎例外クラスの概説(初心者向け)
昔,以下のようなスクリプトを書いて悩んだことがあります。
begin
require 'cgi-alt'
rescue
require 'cgi'
end
rescue で,エラータイプを省略したときは StandardError クラスのサブクラスがすべて捕捉されるわけですが,LoadError が StandardError ではないことに,初心者は気づきにくいです。
リファレンスマニュアルの class StandardError を見ると,「通常のプログラムで発生する可能性の高い例外クラスを束ねるためのクラス」とあるので,require の失敗も当然捕捉してくれると思っちゃうんですよね。
◎raise に与える引数(中級者向け)
自分でライブラリーなどを書いて,そのスクリプト中で例外を発生させるとき,raise の引数に何を渡せばよいのかの指針。
まず,例外クラスは何にすべきか。
TypeError と ArgumentError とを使いわけよう,とか,自前の例外クラスを作るべきなのはどんなときか,など。
次に,エラーメッセージの書き方。
たとえば,第 2 引数が Symbol か String でなければならないのに nil が来ちゃったら,どんなメッセージがいいのか。
問題の起こった引数が第 2 引数であるという情報(あるいはどういう役割の引数という情報)は込めなくていいのか,とか。
英語が苦手な人のための例文集みたいなものもあるといいですね。
Beta Was this translation helpful? Give feedback.
All reactions