モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

Ruby コードスニペット (条件分岐、ループ、例外処理)

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2013/07/13
最終更新最終更新
2016/06/07
記事区分記事区分
一般公開

目次

    Rubyを使った効率的なスクリプトの書き方を紹介

    0
    ステッカーを贈るとは?

    条件分岐

    if-elsif-else

    var = gets.to_i
    if var < 256 then
      puts "var is less than 256."
    elsif var > 256 then
      puts "var is greater than 256."
    else
      puts "var is equal to 256."
    end
    

    ifまたはelsifのthenは省略可能です。

    var = gets.to_i
    if var < 256
      puts "var is less than 256."
    elsif var > 256
      puts "var is greater than 256."
    else
      puts "var is equal to 256."
    end
    

    ただし、次のようにifまたはelsifのあとに改行が記述されない場合はthenは省略不可です。

    var = gets.to_i
    if var < 256 then puts "var is less than 256."
    elsif var > 256 then puts "var is greater than 256."
    else  puts "var is equal to 256."
    end
    

    また、一行で記述できる処理は、Perlにもあるif修飾子が使用できます。

    var = gets.to_i
    puts "var is greater than 0." if var > 0
    

    unless

    unlessはif notと同じで

    var = gets.to_i
    unless var > 0
      puts "var needs to be greater than 0."
    end
    

    上のコードは次のコードと同じ動作をします。

    var = gets.to_i
    if not var > 0
      puts "var needs to be greater than 0."
    end
    

    ifと同様に一行であればunless修飾子を使用できます。

    var = gets.to_i
    puts "var needs to be greater than 0." unless var > 0
    

    条件演算子

    他の言語にもある普通の条件演算子です。

    var = (1+1==2) ? 777 : 888
    puts var
    

    これは、Rubyではif-elseを用いて次のようにも書けます。

    var = if 1+1==2 then
            777
          else
            888
          end
    puts var
    

    if内あるいはelsif、else内で最後に評価された式の値が
    if-elsif-else制御式全体としての値となります。

    var = if 1+1==5 then
            777
          end
    

    上のコードではvarにはnilが代入されます。

    case

    Rubyのcase式には二種類あり、C言語などにあるswitch文を強化したような以下の形式や、

    var = gets.to_i
    filter = [5,6,7]
    case var
    when 1 then
      puts "1"
    when 2             # thenは省略可能
      puts "2"
    when 3,4 then
      puts "3 or 4"    # 複数のcaseをまとめて記述できる
    when *filter then
      puts "5,6 or 7"
    when 8..9 then
      puts "8 or 9"
    else
      puts "others"
    end
    

    if-elsifと同じ意味をもつ以下の形式があります。

    var = gets.to_i
    case
    when var < 256 then puts "var is less than 256."
    when var > 256 then puts "var is greater than 256."
    when var == 256 then puts "var is equal to 256."
    end
    

    繰り返し処理

    while

    以下のサンプルはすべて無限ループです。

    while true do  # doは省略できます
      puts "looping..."
    end
    

    いわゆるdo-whileです。

    begin
      puts "looping..."
    end while true
    

    Perlなどにあるwhile修飾子も使用できます。

    puts "looping..." while true
    

    untilも実装されています。

    until false
      puts "looping..."
    end
    

    for

    for式は次のように記述します。doは省略可能です。

    for i in [1,2,3,4,5] do
      puts i
    end
    

    eachを用いても同じことができます。

    [1,2,3,4,5].each do |i|
      puts i
    end
    

    また、2次元配列を用いて次のように記述することもできます。

    for i,j in [[1,-1],[2,-2]] do
      puts i+j
    end
    

    その他

    ループ内操作

    break, next, redoが使用できます。

    イテレータ

    loop,times,upto,downtoなどがあります。

    loop

    loop do
      puts "looping..."
    end
    loop { puts "looping..." }
    

    times

    3.times do
      puts "looping..."
    end
    3.times{ puts "looping..."}
    3.times{|i| puts "#{i}: looping..."}
    

    upto

    0.upto(10) do |i|
      puts i
    end
    0.upto(10) {|i| puts i}
    

    例外処理

    begin-rescue-ensure

    begin
      # 例外が発生する可能性のある処理
      1/0
    rescue
      # 例外が発生した場合に実行
      p $! #エラー内容
    ensure
      # beginまたはrescueの後に必ず実行 (省略可能)
      p 'inside ensure'
    end
    

    実行例

    #<ZeroDivisionError: divided by 0>
    "inside ensure"
    

    retry

    begin
      p Dir.exists? 'sample_dir'
      Dir.rmdir 'sample_dir'
    rescue Errno::ENOENT #特定のエラーを指定して捕獲できる
      p $!
      Dir.mkdir 'sample_dir'
      retry
    end
    

    実行例

    false
    #<Errno::ENOENT: No such file or directory - sample_dir>
    true
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    Rubyを使った効率的なスクリプトの書き方を紹介

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事

      • レイアウトおよび部分テンプレートに関するまとめ (Rails4)
        レイアウトおよび部分テンプレートはどちらもテンプレート (*.html.erb) に共通の要素をまとめておき、任意のテンプレートから利用できるようにしておくための仕組みです。フッターやヘッダーといった大枠はレイアウト、小さなパーツは部分テンプレートというイメージで使い分けましょう。 レイアウトの使用方法 クラス毎に指定する方法と、アクション毎に指定する方法があります。 app/views/layo...
        taro三世taro三世10/21/2016に更新
        いいねアイコン画像0
      • Ruby コードスニペット (正規表現)
        sample.rb str = "001: This is a string." var1,var2 = 2,3 # 'EOS'とすると#{}による変数展開がなされない (%03dは展開される) doc = (<<"EOS" % var1) # 括弧は省略可。要は<<"EOS"の次の行からEOSまで。(参: <<-"EOS"とすると前に空白...
        だいふくうさぎだいふくうさぎ5/13/2018に更新
        いいねアイコン画像0
      • OAuthを用いずにTwitterに自動投稿する (回数制限あり, Selenium with Ruby)
        Seleniumを用いて、OAuthを用いずにTwitterに自動投稿するRubyスクリプトを記述してみます。連続で複数回実行すると、ボット判定としてキャプチャ認証が発生します。その認証までは通過できませんので悪しからず。また、Twitterの仕様変更次第ではDOMの構造が変化するため、下記サンプルは機能しなくなる恐れが有ります。 twitter_post.rb #!/usr/bin/ruby r...
      • Ruby における日本語のエンコーディング
        日本語を含めて多言語対応する際には、Asciiコード以外の文字コードセットが必要になります。日本語が主となる場合、よく使われる文字セットにはUnicode, Shift_JIS, EUC-JPがあります。このうち Unicode だけは特殊であり、世界中のあらゆる文字を収録しようとしていることから 1 文字を表現するために必要なバイト数が大きくなってしまっています。そのため Unicode のうち...
        だいふくうさぎだいふくうさぎ4/21/2017に更新
        いいねアイコン画像0
      • Rails3ビューテンプレートの基本的な使用方法 (Ruby)
        Railsでは、ERB (eRuby (テキストファイルにRubyスクリプトを埋込む書式の仕様) をRubyで実装したもの) を用いてHTML内にRubyスクリプトを埋込むことができます。 <% %> で囲むと出力されません (if-elseなど制御構文を記述します) <%= %> で囲むとエスケープ出力されます <%== %> で囲むとエスケープされずに...
        ほんわかパンダほんわかパンダ10/21/2016に更新
        いいねアイコン画像0