[#44578] Ruby初心者が作りました — Kabu and Ruby管理人 <kabu_and_ruby@...>

http://www.geocities.jp/kabuandruby/index.html

26 messages 2008/02/06

[#44691] ”Rubyアプリケーションプログラミング”の伝言サーバの使い方 — "Yangkook Kim" <yangkookkim@...>

キムと申します。オーム社から出版されている書籍、"Rubyアプリケーションプログラミング"のP267~275に掲載されている伝言サーバー&クライアントの利用の仕方がわかりません。質問を要約すると次の2点です。1、サーバーが正常に起動されているかどうかわからない。2、書き込みクライアントで入力をサーバーに送信する方法がわからない。

8 messages 2008/02/24

[ruby-list:44603] Re: アーティストのニュースを自動取得

From: rubikitch@...
Date: 2008-02-10 16:26:23 UTC
List: ruby-list #44603
From: sora <sora.hs@gmail.com>
Subject: [ruby-list:44602] アーティストのニュースを自動取得
Date: Mon, 11 Feb 2008 00:11:33 +0900

るびきちです。

> 一人で勉強するより、やっぱこういうの良いですね。

いいですね^^
プログラミングは自分で調べるのが基本ですが、もっといい書き方がないかと
疑問に思った場合は思い切って質問してみましょう。
もしかしたらかっこいい答えが返ってくるかもしれません。

> んで、調子こいて僕も便乗させてください。

どうぞ。ではさっそく。

>     @engine = engine
>     if @engine == 0 then
>       @load = MNewsLoad.new('http://www.excite.co.jp/music/news/')
>     else
>       @load = MNewsLoad.new('http://music.yahoo.co.jp/music_news/')
>     end
(snip)
> s_engine = 0  # 0=excite, 1=yahoo
> News.new(s_engine).start

News#get_newsでも@engineの分岐が出ているため、MNewsLoad#print_newsを新設して
News#initializeの引数で直接MNewsLoadオブジェクトを渡したほうがすっきりするでしょう。

0とか1を使うくらいならば:exciteとか:yahoo等のSymbol使いましょう。
そうすれば、「if @engine == :excite〜」などと書けますし。

>     print Kconv.kconv(@track.name, Kconv::UTF8) + "\n"

「Kconv.kconv(@track.name, Kconv::UTF8)」は「@track.name.toutf8」と書けます。
この場合はputsを使ったほうがいいですね。

>     puts @track.date_added.to_s

putsやprintで非文字列を表示しようとすると内部でto_sを呼んでくれるので「.to_s」は不要です。

>       if self.is_changed? then
>         break
>       end

僕なら「break if is_changed?」と書きます。メソッド呼び出しのselfは省略できます。

>   def is_changed?
>     track = @itunes.get_current_track
>     if @track.artist != track.artist then
>       true
>     else
>       false
>     end
>   end

条件式は真偽値を返すので「@track.artist != @itunes.get_current_track.artist」
の一行で済みます。
また、メソッド名も「artist_is_changed?」にすると
「break if artist_is_changed?」と書けて英語っぽくなります(笑)

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/

In This Thread