ランプの中身(Ruby on Railsのシステム開発)
ランプの中身(Ruby on Railsのシステム開発)では、株式会社ケイビーエムジェイのRuby on Railsエンジニアが蓄積したノウハウを公開しています。Ruby on Railに関する技術解説や実践的なノウハウなど、開発現場の技術に則したコンテンツを随時追加していきます。 初心者の方でもわかりやすい技術解説を心がけています。リクエスト、ご質問も受け付けいますので、ご気軽にコメントを記述して下さい。

< 使えるvalidate一覧 | メイン  |  Rails プラグイ... >

zenpouの中身(Ruby
2008.04.08

railsのand/orを使った機能


railsのコーディング時にちょっと使える初心者向けのtipsです。

andやorを使って、if文や代入文を効率的に使いましょう。

 

仮に 

@user = User.find(:first, :conditions => ["id = ?", params[:user_id]])

if @user.name.blank?

  render :text => "ユーザー名が空白です"

end 

というようなプログラムがあったとします。

 このままだと、params[:user_id]にuserと一致するデータがない場合、

@userがなくて、エラーが発生してしまいます。

 

というわけで

if @user and @user.name.blank?

とすると、@userがnilの場合、andの前で既にnilになっているので、

後部の式が評価されません。

 

こういう風に、and/orは慣れるとプログラムの効率があがります。

というわけで、もうちょっと詳しく解説してきます。

andの機能は、左辺を評価して、結果が真だったときは右辺の値を評価し、

右辺の値を返します。

 true and true #=> true

 true and false #=> false

実は、これは、右辺の値を返しているのです。

 true and 1 #=> 1

 1 and true #=> true

 左の方がnil,falseでなければ、右の値を帰すため、 

    @name = @user and @user.name

という使い方もできます。

    andの演算子の優先順位の関係で&&にする必要があります。

     @name = @user && @user.name

この場合、@userがnilの場合には@nameにはnilが入り、

@userがある場合は@user.nameを代入する事になります。

 

そして、この逆の性質として、orがあります。

 1 or 2 #=> 1

 false or 2 #=> 2

 false or false #=> false

 これを利用すると、名前がないときには、名無しと代入する方法が

作れます。

 @name = @name or "名無し"

 @name = @name || "名無し" 

 @nameがnilでない場合は、@nameがそのまま保存され、@name がないときだけ"名無し"が登録されます。

 or は||として書くことができ、演算子として上の式省略すると

 @name ||= "名無し"

 ともかけます。

 

railsだと

 @use_id = params[:user_id] || @login_user.id

と、する事で、userの指定があれば、そのuser_idで検索し、

いなければlogin_userのidで検索するという構文をかけます。

 if params[:user_id]

   @user_id = params[:user_id]

 else

   @user_id = @login_user.id

 end

みたいに書くよりは簡略化できます。

3項演算子の

  @user_id = params[:user_id] ? params[:user_id] : @login_user.id

よりも効果的です。

 

普通に and / or を使える様になると細かい所で便利なので、ぜひ覚えましょう。

コメント (2)  |トラックバック (0)

ブックマークに追加する Subscribe with livedoor Reader あとで読む

トラックバック URL

コメント一覧

> @name = @user and @user.name

> @name = @name or "名無し"

andやorは=より優先順位が低いので、解説のとおりにはならんとです。&&や||を使うべし。

written by emasaka / 2008.04.08 18:50

あー、そうですね。
普段だと&&しか使ってないけど解説を意識しすぎてandとかにしっぱなしでした。

指摘ありがとうございます。

written by zenpou / 2008.04.08 20:56

この記事にコメントする

ニックネーム:
メールアドレス:
URL:


KBMJのWebソリューション
Ruby on Rails Summer Festival 2008開催決定!!

TOPICS

2008/06/25
ZD Net Builder」の連載記事です。第四回は「Rubyでどう書く?:重複したRSSをまとめる」が掲載されました。

2008/05/30
ZD Net Builder」の連載記事です。第三回は「Rubyでどう書く?:Rubyで特定URLの画像パス一覧を表示する」が掲載されました。

2008/05/07
ZD Net Builder」に連載を始めました。第二回は「Rubyでどう書く?:RubyでPDF履歴書を作成する」が掲載されました。

2008/04/24
アットマーク・アイティ」に『 Rubyを使ってPaSoRi経由でSuicaの乗車履歴を取得し、GoogleMapsやGoogleEarthで表示する』が掲載されました。

全体のRoR最新ブログ一覧

プロフィール

  • zenpou
  • 1. 名前: たかせゆういち
    2. blog: http://d.hatena.ne.jp/zenpou
    3. 年齢: 24くらい

    Railsについて

    1. KBMJでRailsの開発をやっています。
    2. 小江戸らぐというユーザーグループで、毎月Railsの勉強会の講師をしています。。

    開発環境とか

    1. Windows Vista(ノート) と Windows XP(デスクトップ)を2台並べてます。(synergyで連動)
    2. でも、実際に開発する場合、ネットに繋がってたらLinuxにPuttyで接続して開発。
    3. ネットに繋がってない場所だと、ローカルのcoLinux上にPuttyで接続して開発。
    4. 開発に使うLinuxは、ディストリは余り気にしないけど、debianとCentOSとFedora。
    5. Linux上でzsh + screen で開発します。screenで画面切り替えながらログをtail -fしたり、ruby script/consoleしたり、mysqlしたり。
    6. エディタはvim使ってます。

ブログの購読

RSS

timelog
株式会社ケイビーエムジェイロゴ