.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. Ruby
  5. if文の中に代入する方法を紹介|rubyで実践しよう!

if文の中に代入する方法を紹介|rubyで実践しよう!

  • Ruby
  • プログラミング言語
公開日時:   更新日時:
if文の中に代入する方法を紹介|rubyで実践しよう!
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>


    システム
    エンジニア
    rubyのif文の中で代入することは可能なのですか?

    プロジェクト
    マネージャー
    はい、他のプログラミング言語同様に代入可能です。

    if文の中で代入とは?

    rubyのif文では、他のプログラミング言語と同じように、変数の大小や、一致などを条件に、処理を分岐させることが出来ます。

    このrubyのif文では、比較と同時に、代入を行うことができる「if文の中での代入」を行うことで、無駄な作業を減らすことが出来ます。この記事では、ruby言語のif文を例に挙げ、if文の中で代入をする方法や、その使用例を紹介します。

    if文の書き方

    rubyのif文は、以下のように記述して利用することが出来ます。

    is_start = true # 変数is_startにtrueを代入

    if is_start # もしis_startがtrueなら
    print("start") # "start"と出力
    else # そうでない(=false)なら
    print("don't start")# "don't start"と出力
    end

    [出力] start

    このように、rubyではifの後にis_startとすることで、その式がtrueであればif節に、falseであればelse節の処理が実行されます。これを日本語で一般化したものはこうなります。

    if 式
    式が正だったときの処理
    else
    式が偽だったときの処理
    end

    if文の中で代入する方法

    if文の中で代入する方法を示します。以下のように記述し、実行してみてください。

    is_start = true
    if is_ready = is_start
    print("ready")
    else
    print("not ready")
    end

    [出力] ready

    このように、is_startの中身をis_readyに代入しながらis_readyを用いたif文を記述することが出来ます。

    このままだと「直接、is_startを使った方が早いのでは?」と思うかもしれませんが、プログラムが長くなってきて、is_readyといった別名の変数を使い処理を記述するときに、この記法が便利になってきます。

    これを日本語で一般化したものは、以下のようになります。

    if 代入式
    式が正だったときの処理
    else
    式が偽だったときの処理
    end

    if文で代入する利用例を紹介!

    ここからは、if文の代入を用いた例をいくつか紹介していきます。この記事を参考に、ぜひif文での代入を使ってみてください。

    値のnilチェック

    rubyのif文は、式の内容がnil(何も入っていない)だった場合にfalseとなります。この性質を用いて、「値がnilでないときデータを使用した処理を行う」ことが出来ます。

    以下のコードを記述し、実行してみてください。

    sum = 0 # 合計値を格納する変数sumを定義
    values = [5, 43, 53, 32, 78, nil, 23] # 加算する数値配列valuesを定義(※nilを含むことに注意!)
    for value in values do # values についてforを行う
    if num = value # もしvalueがnilで無ければ(同時にnumに代入)
    puts("add #{num}")
    sum += num # 加算する
    else # nilなら
    puts("nil detected")
    end
    end

    puts("sum is #{sum}") # 合計を出力する

    [出力]
    add 5
    add 43
    add 53
    add 32
    add 78
    nil detected
    add 23
    sum is 234

    このコードは、配列の値の合計をfor文を用いて出力するプログラムです。if文での代入を用いてnilチェックと、変数numへの代入を同時に行うことで記述量を減らしています。

    for value in values doは配列に対してのfor文で、順番にvaluesの要素がvalue変数に格納されてループしています。そして、if num = valueでvalueがnilだった場合、加算しないようにしています。

    もしif文での代入を用いなければ、以下のようになります。上記と比べて1行多く、冗長です。

    sum = 0 # 合計値を格納する変数sumを定義
    values = [5, 43, 53, 32, 78, nil, 23] # 加算する数値配列valuesを定義(※nilを含むことに注意!)
    for value in values do # values についてforを行う
    num = value
    if num # もしvalueがnilで無ければ(同時にnumに代入)
    puts("add #{num}")
    sum += num # 加算する
    else # nilなら
    puts("nil detected")
    end
    end

    puts("sum is #{sum}") # 合計を出力する

    インスタンスのnilチェック

    次に、インスタンス生成の際のnilチェックに、if文の代入を用いる方法を紹介します。以下のコードを記述し、実行してみてください。

    class TempConverter # クラスTempConverterの定義
    def convert_to_kelvin(celsius) # 関数convert_to_kelvinの定義
    celsius + 273.15 # セルシウス温度をケルビンにして返す
    end
    end

    celsius = 30
    kelvin = nil
    if tempconverter = TempConverter.new # インスタンスの生成とnilチェックを同時に行う
    kelvin = tempconverter.convert_to_kelvin(celsius) # nilでなければ関数を呼び出せる
    else
    print("nil detecetd")
    end
    print(kelvin) # ケルビンを出力する

    [出力] 303.15
    このコードは、セルシウス温度[℃]からケルビン[K]への変換を行うプログラムです。30℃を入力することで、303.15Kという出力を得ています。

    このプログラムでのif文を代入するには、if tempconverter = TempConverter.newというように記載します。インスタンスの生成に失敗してnilが返ってきた場合には、関数を呼ばずに終了できます。

    こうすることで、インスタンスの生成かつ変数への代入とnilチェックを同時に、簡潔に記述できます。もしif文での代入を用いなければ、以下のようになります。上記と比べて1行多く、冗長です。

    class TempConverter # クラスTempConverterの定義
    def convert_to_kelvin(celsius) # 関数convert_to_kelvinの定義
    celsius + 273.15 # セルシウス温度をケルビンにして返す
    end
    end

    celsius = 30
    kelvin = nil
    tempconverter = TempConverter.new
    if tempconverter
    kelvin = tempconverter.convert_to_kelvin(celsius) # nilでなければ関数を呼び出せる
    else
    print("nil detecetd")
    end
    print(kelvin) # ケルビンを出力する

    if文での代入における注意点

    以下のコードを見てください。
    a = 5
    if b == a
    print(b)
    end

    この例では、if文での代入を用いてbにaの値を代入しようとしていますが、誤ってイコールを二つ付けてしまっています。このように、if文での代入は通常の==と間違えて利用してしまう可能性があり、あとから見た別の人に誤解を受ける可能性もあります。

    そのため、集団開発では誤解を受けないようコメントで説明を付けることや、プロジェクトでルールを設けて乱用を避けるなど、混乱を生まない利用を目指しましょう。

    システム
    エンジニア
    if文の中での代入は様々な場面で活用できるのですね。

    プロジェクト
    マネージャー
    そうですね。if文の中で代入をすることで、プログラムの可読性を高めることができます。

    if文での代入を使い簡潔なプログラムにしよう

    この記事では、if文での代入を紹介するため、rubyでのif文の記述方法、代入方法を紹介しました。そして値のnilチェックと、インスタンスのnilチェックの2つの使用例を紹介し、この構文の注意点を示しました。

    rubyのif文での代入は、プログラムを簡潔に記述し、可読性を高めることができるでしょう。この構文を適切に利用し、効率的なコーディングを心がけましょう。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Ruby新着案件New Job