未経験からのフルスタックエンジニア

スキルをつけよう!未経験からフリーランスエンジニアへの成長記録

【Ruby入門】変数と制御構文~変数・getsによる入力・文字列と数値・if~

以下の記事で簡単な計算を扱えるようになったと思います。

atora1992.hatenablog.com

でも、これだけでは電卓と同じですよね?

やっぱりプログラミングなんだから、「こんな場合はホニャララして、、」とか「何回も繰り返して計算させる」とかしたいです!

そこで、よく使われるのが(よく使ってきたのが)以下の3つです。 この他にも色々種類はありますが、基本は以下の3つかと思います。以下のリンクで他の制御構文も見れますので、気になったかたはどうぞ!

docs.ruby-lang.org

  • 条件分岐のif
  • 繰り返しのwhile(次の記事で書きます)
  • 繰り返しのfor(次の記事で書きます)

本題に入る前に

Macユーザーなので、Mac向けの内容となっています。

以下のコードは、適当なテキストエディタ上で"test.rb"という名前でファイルを作り、ターミナル上でそのファイルを実行する形をとります。

以下の最後のコマンドは、"test.rb"のあるディレクトリに移動してから実行してください。

#Desktopに保存した場合を仮定
#ターミナルを起動した初期状態で

$ cd Desktop  #Desktopにディレクトリを移動する
$ ruby test.rb  #test.rbを実行する

変数

コードを書いていて、同じ内容・値のものを何回も書くのは面倒ですよね?さらに、値を全てベタ打ちで書くと、なんの値なのか(値段?大きさ?、、、)がわからなくなりませんか?

そこで登場するのが変数です。変数は、値を入れる箱のようなものだと考えてください。その箱に任意の値を入れて(代入)、使いたいときにその箱から取り出すイメージです。また、値は数値だけじゃなく、文字列でもOKです。

イコール=の左辺に変数名を書き(小文字)、右辺に代入したい値を書くことで、変数に値を格納できます。

price = 1000  #priceという変数に、1000という値を入れる
puts price  #ターミナルに1000が表示される

name = "Yamada"  #nameという変数に、Yamadaという文字列を入れる
※文字列は"文字列"'文字列'といったようにクォーテーションで囲ってください。そうすることで、文字列として認識されます。
puts name  #ターミナルにYamadaが表示される

また、定数(円周率とか)は、変数名の頭文字を大文字のアルファベットにしてください。そうすることで、定数の値を変えようとすると警告が出るようになります。

Pi = 3.14

docs.ruby-lang.org

ユーザーからの入力を可能にしよう(gets)

上記では、コード内で手打ちで変数に値を格納しましたが、ユーザーの入力値を取得する方法があります。それがgetsメソッドです。

このメソッドでは、ユーザーがキーボードで入力した値を文字列として取得できます。

以下のように書いて実行すると、実行後にカーソルのみ表示される状態になると思います。そこで、適当な数値や文字列を入力して、Enterキーを押すと入力した値が変数inputに代入され、putsメソッドでターミナル上に入力した内容が表示されるはずです。

input = gets
puts input

コードは基本上から下に順に実行されていきますが、このようにgetsメソッドを使うと、ユーザーが入力するまでgetsメソッド以下のコードが読まれない状態になります(ユーザー入力完了を待機する状態になる)。

赤文字で、文字列として取得できると書いたように、キーボードの数字を打ち込んでEnterを押しても、プログラム上は文字列として認識されることに注意してください。だから、以下のコードを書いて、数値を入力したとしてもエラーが出てしまいます。というのも、四則演算の式が使えるのは数値に対してのみだからです。

input = gets  #数値を入力
puts input+100

そこで、文字列(オブジェクト)を数値(オブジェクト)に変換するメソッドがあります。それが".to_i"です。(逆に数値オブジェクトを文字列に変換するのは".to_s"です)

このメソッドを、数値オブジェクトに変換したい文字列オブジェクトの後ろにつけるだけで、それは数値オブジェクトになります。なので、先ほどのコードを正しくすると、以下のようになります。

input = gets.to_i
puts input+100

条件分岐のif

英単語のifの意味どおり、「もし〜だったらこうして、そうじゃなかったらこうする」といった条件による実行内容の分岐に使える構文です。

例えば、入力した値が奇数なら"odd"、偶数なら"even"と出力するプログラムを書いてみましょう。まずは日本語で考えてみると、このプログラムは「入力した数値が2で割り切れれば偶数なので"even"と出力し、それ以外(2で割り切れないのは奇数なので)は"odd"と出力する」と言い換えることができます。

割り切れるとは、あまりがゼロということなので、"入力した値%2==0"が条件として書けますね。これを使ってif構文で書くと以下のようになります。

input = gets.to_i
if input % 2 == 0
  puts "even"  #条件がtrueの場合実行される
else 
  puts "odd"  #条件がfalseの場合実行される
end

まずは、getsメソッドで入力を可能にし、数値に変換します。

次に、入力された値を2で割ったあまりが0かどうかを判断します。trueの場合、1行下のコードが実行されて終了です。

falseの場合、elseと書かれた行の1行下のコードが実行されます。

このように、ifの隣に書いた条件が満たされるtrueの場合と、そうでないfalseの場合とで実行するコードを変更できるのがifによる条件分岐です。

まとめ

今回は

  • 変数
  • getsによるユーザー入力
  • 文字列と数値オブジェクト
  • if条件分岐

を扱いました。次回は、他の制御構文(while・for)について書きます!

コードを色々いじったりして試すことが重要です!色々試してみてくださいね!