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... ]