Rubyのチートシート / 式について

基本だけどRubyっぽいものをまとめてみた。好みもあるだろうけど、良い例、悪い例の比較。Code Schoolがとても分かりやすかったのでお勧め。

code school


# ---------------------------------------------- #
# Expressions
# ---------------------------------------------- #

# 評価に関しての注意 
# ---------------------------- #
post = "my post"

#**BAD**#
if post != nil 
    puts post
end

#**GOOD**# 省略できる
if post
    puts post
end

# 下記はTRUEなので注意
# "" -> TRUE
# 0  -> TRUE
# [] -> TRUE
post = ""
puts "#{post}(empty but true)" if post


# 例(これは意図した通りに動かない)
# name.length -> 0でも1でも100でもTRUE
name = ""
unless name.length
    puts "Hey! We got an error!"
end
puts "nameは#{name.length}文字だけど評価はTRUE"



# Short-circuit Assignment
# 最初の値がTRUEであればその値を代入する
# ---------------------------- #

result = nil || 1
puts result             #-> 1

result = 1 || nil
puts result             #-> 1

result = 1 || 2
puts result             #-> 1

# 例 (current_sessionがnilならsign_inメソッドを実行)
# def sign_in
    # current_session || sign_in
# end



# Conditional Assignment
# 変数が存在しないか、値が'nil/false'でなければセットする
# ---------------------------- #

user ||= 1
puts user #-> 1

user = nil
user ||= 1
puts user #-> 1

user = false
user ||= 1
puts user #-> 1

user = true
user ||= 1
puts user #-> true



# Conditional Return Values
# ifの前に変数を置く(if文はいつも値を返す)
# ---------------------------- #

#**BAD**#
if user
    message = "Welcome!"
else
    message = "Please sign in."
end

#**GOOD**#
message = if user
    "Welcome!"
else
    "Please sign in."
end

puts "#{message} (Conditional Return Values)"



# Conditional Return Values
# 代入しなくてもよい
# ---------------------------- #
#**BAD**#
def get_url(user_id)
    if user_id
        url = "http://myblog.com/posts/#{id}"
    else
        url = "http://myblog.com"
    end
    url
end

#**GOOD**#
def get_url(user_id)
    if user_id
        "http://myblog.com/posts/#{user_id}"
    else
        "http://myblog.com"
    end
end

puts "#{get_url(14)} (Conditional Return Values)"



# Conditional Return Values
# case文も値を返す
# ---------------------------- #
type = "facebook"

#**GOOD**#
base_url = case type
    when "twitter"
        "http://twitter.com"
    when "facebook"
        "http://facebook.com"
    else
        nil
end

#**BETTER**#
base_url = case type
    when "twitter"  then "http://twitter.com"
    when "facebook" then "http://facebook.com"
    else nil
end

puts "#{base_url} (Conditional Return Values)"


 
上のコードを実行するとこうなるはず。


$ ruby expression.rb

my post
my post
(empty but true)
nameは0文字だけど評価はTRUE
1
1
1
1
1
1
true
Welcome! (Conditional Return Values)
http://myblog.com/posts/14 (Conditional Return Values)
http://facebook.com (Conditional Return Values)

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた