[前][次][番号順一覧][スレッド一覧]

learn-ruby-in-kansai:1235

From: "U.Nakamura" <usa@g...>
Date: Sun, 27 Nov 2005 14:35:27 +0900
Subject: [learn-ruby-in-kansai:1235] Re: シンボルという概念 Re: Rubyについてのnoviceな質問はOK?

こんにちは、なかむら(う)です。

In message "[learn-ruby-in-kansai:1228] シンボルという概念 Re: Rubyについてのnoviceな質問はOK?"
    on Nov.26,2005 09:30:20, <craftgear@a...> wrote:
| さっそくですが、Symbolという概念が理解しきれず、なんだかもやもやしており
| ます。

Symbolの意味合いは既に出ている通りでいいですよね。


| リファレンスを読むと、「文字列と一対一に対応するオブジェクト」と書いてあ
| るのですが、
| 「なぜ普通の変数ではいけないのか? もしかするとSymbolを使うことには、コー
| ドの文脈上何らかの意図を明白にする効果があるのだろうか?」
| という疑問が頭の中で渦巻いて仕方ありません。

使いどころとしては、他の言語での「定数」のような用途に使う場
合が多いのではないかと思います。
もちろんRubyにも定数はあるのですが、定数の値に深い意味はなく
て、名前を付けることだけに意味がある場合は、Symbolを使えばい
いわけです。

例えば、

  MODE_PREPARE = 1
  MODE_RUNNING = 2
  MODE_FINISH  = 3
  ...
  case mode
  when MODE_PREPARE
    ...
    mode = MODE_RUNNING
  when MODE_RUNNING
    ...
    mode = MODE_FINISH
  when MODE_FINISH
    ...
    mode = MODE_PREPARE
  end

なんていう状態遷移のコードがあったりしたときに、MODE_*という
定数は現在の状態を表す名前に意味があるわけで、1,2,3といった値
には本当は意味はないわけです。
こういう場合は、そんな定数は用意しないでSymbolを使えば、

  ...
  case mode
  when :MODE_PREPARE
    ...
    mode = :MODE_RUNNING
  when :MODE_RUNNING
    ...
    mode = :MODE_FINISH
  when :MODE_FINISH
    ...
    mode = :MODE_PREPARE
  end

と書けるわけです。

こうすると、値に意味があって名前をつけているものは定数、値に
意味はなくて名前を付けることだけに意味があるものはSymbol、と
コード上で使い分けができるので、読み手に優しいコードになるの
ではないかと思いますです。


それでは。
-- 
U.Nakamura <usa@g...>


--
ML: learn-ruby-in-kansai@r...
使い方: http://QuickML.com/
公式ページ: http://jp.rubyist.net/?KansaiWorkshop
過去ログ: http://www.fdiary.net/ml/learn-ruby-in-kansai/

[前][次][番号順一覧][スレッド一覧]

      1225 2005-11-23 14:43 [nshttsk@g...        ] 復帰 and 懇親会締め切り                 
      1226 2005-11-25 15:07 ┗[craftgear@a...      ] Rubyについてのnoviceな質問はOK?       
      1227 2005-11-25 15:29  ┗[konami@k...         ]                                     
      1228 2005-11-26 01:30   ┗[craftgear@a...      ] シンボルという概念 Re: Rubyについてのnoviceな質問はOK?
      1229 2005-11-26 05:22    ┣[adzumi@d...         ]                                 
      1230 2005-11-26 07:09    ┃┣[xml@t...            ] 今日は失礼しました            
      1231 2005-11-26 13:21    ┃┗[craftgear@a...      ]                               
      1233 2005-11-26 18:26    ┃ ┗[speakillof@y...     ]                             
->    1235 2005-11-27 06:35    ┗[usa@g...            ]                                 
      1238 2005-11-27 16:05     ┗[craftgear@a...      ]