RSS RSS
zenpouの中身(Ruby on Railsのシステム開発)
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)

ブックマークに追加する

トラックバック 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:


.
web開発ならKBMJ
Rubyでのwebシステム開発は
実績豊富なKBMJにお任せ下さい
iPhone開発
iPhone開発は
KBMJにお任せ下さい
ブラウザゲーム エインヘリアル
ブラウザゲーム「エインへリアル」
αテスター募集中
オープンソースECパッケージ エレコマ
オープンソースECパッケージ
「エレコマ」

プロフィール

zenpou
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使ってます。

最近チェックした記事

最新記事

アーカイブ

アクセスランキング

KBMJのWebソリューション
Ruby on railsの開発ならKBMJ
株式会社ケイビーエムジェイ