.net column

.NET開発者のためのブログメディア

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

2020年07月21日

SE
rubyのif文の中で代入することは可能なのですか?

PM
はい、他のプログラミング言語同様に代入可能です。

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文での代入は通常の==と間違えて利用してしまう可能性があり、あとから見た別の人に誤解を受ける可能性もあります。

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

SE
if文の中での代入は様々な場面で活用できるのですね。

PM
そうですね。if文の中で代入をすることで、プログラムの可読性を高めることができます。

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

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

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


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)