想定外の挙動発生!問題解消-デバッグ-の流れを確認しよう!~chompメソッド

記事
IT・テクノロジー
こんにちは!現役システムエンジニア@育休中のtak_kです!😁
本業でシステムエンジニアをしているかたわら、複業でプログラミング講師や、初学者向けにプログラミング学習をサポートする『メンター』をやっています!

前回の振り返り

前回の復習.png
前回の記事で、以下の話をしました。

・プレイヤーが「HIGH」か「LOW」と入力するまで、再入力を求めるようにするため、「繰り返し処理」を学んだ!
・繰り返し処理は「while文」で記述できる!
・while文を使ってプログラムを書いたが、想定と違う結果に。。。



問題の発生箇所を推定して、原因を特定しよう!

audit-6904474_640.png

前回までのプログラミングの結果、想定と異なる挙動が発生してしまいました。
その時は落ち着いて、以下の流れで解決を試みましょう。

①事象の分析
まずは、起こった事象を一つずつ紐解いていきましょう。
実行したプログラムは以下ですね。

■実行プログラム
num1 = rand(10)
puts "「HIGH」か「LOW」を入力してください"
input = gets
while input != "HIGH" && input!= "LOW" #⇦ この部分を満たしている!?
  puts "もう一度入力してください" #確認用出力
  input gets
end
puts "繰り返し文を抜けました" #確認用出力
今回、プレイヤーが「HIGH」としたのに、「もう一度入力してください」と表示されてしまいました。
つまり、「while文の条件文を満たしている」と判定されてしまったことになりますね。

つまるところ、プレイヤーの入力である変数「input」が「HIGH」という文字列と異なると判断されてしまっていると推測できますね。

ここまでで、変数「input」に想定通りの値が入っていないという仮説が立てられます。

②被疑箇所の解析
怪しいと思われる変数を特定できたので、その中身を確認してみましょう!
変数の中身の出力といえば、今まで使ってきた「puts」メソッドがありますが、今回のような不具合の解析(「デバッグ」と言います)の際は、「p」メソッドという別の手法をよく利用します。
※詳細は割愛しますが、「p」メソッドの方がより詳細な情報を情報を見ることができます。

今回は、プレイヤーに入力させて変数「input」に代入した直後の4行目、5行目に、putsメソッドとpメソッドで出力してみましょう。

■プログラム内容
num1 = rand(10)
puts "「HIGH」か「LOW」を入力してください"
input = gets
puts input #追加
p input #追加
while input != "HIGH" && input!= "LOW"
  puts "もう一度入力してください" #確認用出力
  input gets
end
puts "繰り返し文を抜けました" #確認用出力
■実行結果
~~~ % ruby high_and_low.rb 
「HIGH」か「LOW」を入力してください
HIGH #⇦プレイヤーの入力結果
HIGH #⇦putsの出力結果
"HIGH\n" #⇦pの出力結果
もう一度入力してください
おや、putsメソッドだと違いがわからないですが、pメソッドの出力結果を見ると、末尾に「\n」というよくわからないものが付いてますね。
これは一体何かというと、「特殊文字」と呼ばれるもので、「\n」は改行を表す表記になります。
特殊文字はバックスラッシュ(\)から始まるもので、他にも色々なものがあります。主なものを挙げておきます。

■主な特殊文字
・\n:改行
・\t:タブ
・\s:空白(スペース)

「chomp」メソッドでgetsメソッドの末尾の改行を削除!

削除イメージ.jpg

プレイヤーが入力した情報を、getsメソッドで取り出していたのですが、入力した後のEnterキーまで含まれてしまっていた、というのが原因だとわかりましたね。
実はrubyでは、末尾の改行を削除してくれる便利なメソッドが用意されていて、それが「chomp」メソッドです。
これを使って、プログラムを修正してみましょう!

■プログラム内容
num1 = rand(10)
puts "「HIGH」か「LOW」を入力してください"
input = gets.chomp #末尾に「.chomp」を追加
puts input
p input
while input != "HIGH" && input!= "LOW"
  puts "もう一度入力してください" #確認用出力
  input gets
end
puts "繰り返し文を抜けました" #確認用出力

■実行結果
~~~ % ruby high_and_low.rb 
「HIGH」か「LOW」を入力してください
HIGH #⇦プレイヤーの入力結果
HIGH #⇦putsの出力結果
"HIGH" #⇦pの出力結果
繰り返し文を抜けました
pメソッドの出力結果から改行文字「\n」が消えて、さらに「繰り返し文を抜けました」が表示されたので、while文から抜けましたね!
これで想定通りの結果になっています!

無事不具合を解消できたので、確認用に使った部分は削除しておきましょう。
このようになります。

■今回までのプログラム内容
num1 = rand(10)
puts "「HIGH」か「LOW」を入力してください"
input = gets.chomp
while input != "HIGH" && input != "LOW"
  puts "もう一度入力してください"
  input = gets
end                                


次回の予告

次回予告.png
今回は、「不具合が発生した時の解消までの流れ」を確認し、末尾の改行を削除する「chompメソッド」を学びました!
プログラムというのは、今回のように想定外の動きをすることが当然のように発生して、それをトライ&エラーでどうやって修正していくか、という部分が最も大事になります!

次回はいよいよ、プレイヤーの入力と実際の結果を比較して、判定していく部分に突入していきます!ゲームの根幹となる部分になるので、乞うご期待!


プログラミング学習をサポートします!

サポート.jpg

プログラミングの学習は、一人だととても挫折しやすいんですよね。
そんな方のために、現役エンジニアで指導経験もある私が、プログラミング学習のお悩み相談に乗るサービスを提供しています。
「何をしてくれるのかよくわからない!」という方も、お気軽にメッセージで問い合わせてくださいね!
※問い合わせるだけなら「タダ」です!😂
また、小中学生向けのプログラミング教育の場で、「scratch」というプログラミング言語がよく使われてます。
難しそうなプログラミングのイメージとは違って(まさに本章の見出し画像のようなイメージ😅)、視覚的/直感的にわかりやすいのが特徴で、お子様でも楽しく遊び感覚で、プログラミング的な思考力を養うことができます。
こちらもお気軽にお問い合わせください!


サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す