[#8168] {literal}#[]= — EGUCHI Osamu <eguchi@...>

えぐち@エスアンドイーです。

16 messages 1999/11/01
[#8172] Re: {literal}#[]= — matz@... (Yukihiro Matsumoto) 1999/11/01

まつもと ゆきひろです

[#8176] Multiple self assignment — Kazuhiro Yoshida <moriq.kazuhiro@...>

もりきゅうです。

35 messages 1999/11/01
[#8178] Re: Multiple self assignment — matz@... (Yukihiro Matsumoto) 1999/11/01

まつもと ゆきひろです

[#8212] Re: Multiple self assignment — Kazuhiro Yoshida <moriq.kazuhiro@...> 1999/11/02

もりきゅうです。

[#8213] Re: Multiple self assignment — matz@... (Yukihiro Matsumoto) 1999/11/03

まつもと ゆきひろです

[#8232] 例外を処理する 2 項演算子 — Kazunori NISHI <kazunori@...> 1999/11/05

西@九大です。

[#8233] Re: 例外を処理する 2 項演算子 — matz@... (Yukihiro Matsumoto) 1999/11/05

まつもと ゆきひろです

[#8236] Re: 例外を処理する 2 項演算子 — Kazuhiro Yoshida <moriq.kazuhiro@...> 1999/11/05

もりきゅうです。

[#8266] Re: 例外を処理する 2 項演算子 — EGUCHI Osamu <eguchi@...> 1999/11/07

えぐち@エスアンドイー です。

[#8269] Re: 例外を処理する 2 項演算子 — gotoken@... (GOTO Kentaro) 1999/11/07

In message "[ruby-dev:8266] Re: 例外を処理する 2 項演算子"

[#8271] Re: 例外を処理する 2 項演算子 — matz@... (Yukihiro Matsumoto) 1999/11/08

まつもと ゆきひろです

[#8274] Re: 例外を処理する 2 項演算子 — keiju@... (石塚圭樹) 1999/11/08

けいじゅ@日本ラショナルソフトウェアです.

[#8204] Re: [ruby-list:18281] Re: アクセス制御について — Shugo Maeda <shugo@...>

前田です。

12 messages 1999/11/02
[#8205] Re: [ruby-list:18281] Re: アクセス制御について — Shin-ichiro Hara <sinara@...> 1999/11/02

原です。

[#8315] Re: [ruby-list:18601] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Kazunori NISHI <kazunori@...>

西@九大です。

37 messages 1999/11/15
[#8316] Re: [ruby-list:18601] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — matz@... (Yukihiro Matsumoto) 1999/11/15

まつもと ゆきひろです

[#8369] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Koji Arai <JCA02266@...> 1999/11/18

新井です。

[#8374] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — matz@... (Yukihiro Matsumoto) 1999/11/18

まつもと ゆきひろです

[#8384] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Koji Arai <JCA02266@...> 1999/11/19

新井です。

[#8405] 1.4.3 (Re: Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{}) — matz@... (Yukihiro Matsumoto) 1999/11/24

[#8319] Re: Exception handling — Jun Adachi <adachi@...>

安達@沖データと申します。

21 messages 1999/11/16
[#8350] Re: Exception handling — Kazunori NISHI <kazunori@...> 1999/11/17

西@九大です。

[#8446] [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...>

西@九大です。

37 messages 1999/11/29
[#8449] Re: [REQ] {enumerable, integer, range}.rand — matz@... (Yukihiro Matsumoto) 1999/11/30

まつもと ゆきひろです

[#8463] Re: [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...> 1999/11/30

西@九大です。

[#8474] Re: [REQ] {enumerable, integer, range}.rand — matz@... (Yukihiro Matsumoto) 1999/12/01

まつもと ゆきひろです

[#8476] Re: [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...> 1999/12/01

西@九大です。

[#8487] Re: [REQ] {enumerable, integer, range}.rand — matz@... (Yukihiro Matsumoto) 1999/12/02

まつもと ゆきひろです

[#8494] Re: [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...> 1999/12/02

西@九大です。

[#8451] new Hash (Re: [ruby-list:19043]) — Wakou Aoyama <wakou@...>

青山です。

18 messages 1999/11/30

[ruby-dev:8232] 例外を処理する 2 項演算子

From: Kazunori NISHI <kazunori@...>
Date: 1999-11-05 03:27:58 UTC
List: ruby-dev #8232
西@九大です。
#サイン本届きました。ありがとうございます!

From: matz@netlab.co.jp (Yukihiro Matsumoto)
> # ごめんね、西さん(なぜあやまる?)

いえ、たまには、逆に進行する議論(先に結論がありき)があっても楽しいかと。
という事で、既に採用が拒否されている、悲しい機能追加の提案です。

「例外を処理(吸収)する 2項演算子」が欲しいです。仮に !!= とすると、

begin
  xxx
rescue
  yyy
end

と等価な処理をする

  xxx !!= yyy

と記述できる演算子です。(代入でないので、!!= は不適切ですが、とりあえず)

大した例外でない時、
  * 呼び出し元まで戻る必要がない
  * このコーディング部分で閉じている(解決できる)
  * どんな例外が起きても、ある処理を実行したい(まあ rescue ですが)

でも、begin rescue end と書くのが面倒な時に、とても欲しく思います。
例えば、
----------------------------------------------------------------------
1) いろんな eval

    begin
      eval 'xxx'
    rescue
      error(...)
    end

    =>  eval 'xxx' !!= error(...)
----------------------------------------------------------------------
2) Web カウンタのデータファイルを開く場合

    begin
      counter = File .open(filename) .read .to_i
    rescue
      counter = 0
    end

    =>  counter = File .open(filename) .read .to_i !!= 0
----------------------------------------------------------------------
3) .is_a? のかわりに(ていうか、if 文の代用として、わざと例外を発生させる)

    if obj .is_a? Array
      x = obj[0]
    else
      x = 0
    end
    
    =>  x = obj .read !!= 0
----------------------------------------------------------------------

どちらかと言うと、「様々な条件チェックをあえて記述しない事で、わざと例
外を発生させ、それを処理してもらう」という大名プログラムの為に欲しいの
かもしれません。(あ、それこそが、例外処理の考え?)

そういった「条件を細かく考えないで適当に書くプログラム」が正しい(推奨
されるべき)か?という話も関係すると思いますが、私は「楽に書ける手段が
あるのは大変嬉しい」ですし、「楽に書ける事」が「プログラミングをしてい
て楽しいと感じる事」に繋がると思います。

とか何とか言いましたが、未だに「begin end」に抵抗があるだけなのかもし
れません。「{}」なら一行にできるけど、「begin end」は一行にしたくない
んですよね。「?:」は許せるけど、「if then else end」は嫌だ、みたいな。

で、まとめますと、要するに(最初から言えよ)、

  * 様々な条件をいちいち考慮するのは面倒
    (⇒ 「例外処理」という考えが生まれた。(少くとも要因の一つ))

  * 例外を記述する時、「begin xxx; rescue yyy end」のように1行に書く
    のは見辛い、5行にまたがるのも嫌だ、という人が多そう。(卑怯な仮定)
    (⇒ 結局、例外処理を使わず、if 文に戻りがち)

で、「もっと使い勝手のよい例外を処理する syntax が欲しい」という事です。

これにより、コーディングスタイルの変換のみならず、プログラミングの思考
の変換(よい方向に)という可能性もあると思います。(GC の出現で、メモリ管
理の苦労から解き放たれ、本質的な部分だけを考慮できるようになったように)

でも結局、「「短くすることを目的とする」ことにはかなり抵抗があります」
とか言われそうだなぁ。(未来を予見)

御考慮、よろしくお願いします。(まだ食い下る狙い)
------------------------------------------------------------------
九州大学大学院システム情報科学研究科 情報工学専攻 博士後期課程三年
      西 和則   ( e-mail: kazunori@swlab.csce.kyushu-u.ac.jp )
------------------------------------------------------------------

In This Thread