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
-
RedmineプラグインおよびWEB開発/Ruby/東京都中央区/【WEB面談可】/在宅勤務
月給65万~65万円東京都中央区(新富町駅) -
Webアプリケーション運用保守/Ruby/東京都江東区/【WEB面談可】
月給50万~60万円東京都江東区(亀戸駅) -
Webアプリケーション開発(既存機能改修)のテスター/Ruby/東京都江東区/【WEB面談可】
月給25万~35万円東京都江東区(亀戸駅) -
Webアプリケーション開発(既存機能改修)/Ruby/東京都江東区/【WEB面談可】
月給45万~60万円東京都江東区(亀戸駅) -
Ansibelの自動構築/Ruby/東京都台東区/【WEB面談可】/テレワーク
月給46万~48万円東京都台東区(浅草駅) -
会計ワークフローの開発/Ruby/東京都新宿区/【WEB面談可】/フルリモート
月給46万~48万円東京都新宿区(新宿駅)