気ままに趣味旅行

面白いコト「拡がる/拡げる」

Rubyの基礎3

f:id:hiroakies4463:20190110194257j:plain
どうもhiroakiです。

 

今回も引き続き、Rubyの基礎について紹介します。Webサイトを作ろうとしている人にとってRubyは必須の言語です。自分はとにかくウェブサイトを作ってみたい人間ですので、これをなんとか習得したいと思っています。これからまとめる内容を、みなさんもぜひ参考にしてみてください。

 

▼前回までの記事はこちらです。

hiroakies.hatenablog.com

 

lesson10

繰り返し文の補足

while

whileのループ処理では、条件式が成立している間はwhile~end間の処理を繰り返します。 

  1. i = 1  #カウンタ変数の設定
  2. while i <=5  do #条件式部分。doは省略可。
  3.   puts "気ままに趣味旅行へようこそ"
  4.   i +=1
  5. end 

4.行目がないと、処理が延々に繰り返されエラーとなってしまうので、厳重注意です。

 

では、いくつかコード例を出しますので、while文や繰り返し文について感覚を掴んでください。

コード例1

  1. array = []
  2. while line = gets
  3.   line.chomp!
  4.   array.push(line)
  5. end
  6. p array

getsメソッドは改行で文字を受け取ります。

chompメソッドは文字列の末尾の改行文字を取り除きます。whileの条件式にchompメソッドを使うことはできないので、2.行目の処理に含めます。chompメソッドとchomp!メソッドの違いは、レシーバ自身を変更するかどうか。chomp!の場合はレシーバ自身を変更するので、代入が不要になります。

詳しくは下記サイトを参照してください。レシーバは「.」の左側のことです。ここではarrayです。

ref.xaio.jp

 

コード例2

入力した文字を配列にして、ランダムで引き出すプログラムを作ってみましょう。

  1. line = gets.chomp.split(',') 
  2. p line  #デバック用
  3. num = line.length
  4. puts line[rand(num)]

ここでは、「,」区切りで入力された一行文字列(例えば「大吉,中吉,吉,凶,大凶」など)を1.行目のgetsで受け取り、chompで末尾を消し、splitで「,」区切りでリストを作ります。

splitメソッドは、与えられたデータを指定の記号で分割し、配列として戻します。

lengthメソッドは、配列のデータ個数を数えて返してくれます。それをnum変数に代入し、randメソッドでランダムで引き出します。その引き出した値をline配列のインデックス値とします。

ちなみにpメソッドは、データをそのまま出力するメソッドです。文字列の場合はダブルクォーテーションで囲んでくれたり、データの種類に合わせた形式で出力してくれるので、デバッグや動作確認の際に便利です。

 

データ例3 

繰り返し文を使い、プルダウンメニューを作る。

  1. count = gets.to_i
  2. puts "<select name=\'age\'>"
  3. for age in 1..count
  4. puts "<option>#{age}才</option>"
  5. end
  6. puts "</select>"

to_iメソッドは、要素をi=integer(インテジャー)に変換します。また3.行目のように、for文の場合は、inの後で「始め..終わり」の形で指定して繰り返します。

 

データ例4

繰り返し文を使い、ハッシュからデータを抜き出します。

  1. skills = {"職業" => "戦士", "体力" => 100, "魔法力" => 200, "ゴールド" => 380}
  2. skills.each do |skill|
  3. puts skill
  4. puts "#{skill}です。" 
  5. end
  6. skills.each_value do |skill|
  7. puts skill
  8. end

each…ハッシュからkeyとvalueを抜き出します。

each_value…ハッシュからvalueを抜き出します。

each_key…ハッシュからkeyを抜き出します。

4.のようにすると、 「["職業", "戦士"]です。」のようにskillが配列として返されます。なので、次のようにすると良いです。

  1. skills = {"職業" => "戦士", "体力" => 100, "魔法力" => 200, "ゴールド" => 380}
  2. skills.each do |key,value|
  3. puts "#{key}は#{value}です。"
  4. end

 

実は、each文のdoとendは{}で置き換えることができます。ただし、基本的にはdoとendで書くことをおすすめします。

  1. team = ["勇者", "戦士", "魔法使い"]
  2. team.each { |person|
  3. puts "#{person}は、スライムと戦った"
  4. }

 

lesson11

ソート(並べ替え)

  1. items = ["イチゴ", "ウメ", "アップル", "イモ"]
  2. puts items.sort
  3. puts items
  4. items = items.sort
  5. puts items.sort.reverse

sortは、あいうえお順、数値順で並べ替えます。確認してほしいのは、並べ替えるのはその時だけで、3.行目のようにしてみると実際にitemsリストが変わっているわけではないことが分かります。もし、入れ替えて更新したい場合は、4.のようにしましょう。

ちなみに、漢字のソートは読み仮名順ではなく、文字コード順に並び替えられるので注意です。

 

ハッシュをソートする場合は次のようになります。

  1. items = {"イチゴ" => 40, "ウメ" =>2, "アップル" =>100}
  2. p items.sort  #キーでソートした後、配列として返される。
  3. p items.sort.to_h #ハッシュに戻す。
  4. p items.sort_by {|k, v| v }  #値でソートした後、配列として返される。

3.と4.のメソッドについて押さえましょう。

 

lesson12

データ型の種類

  1. p 10/3  #int(整数)*int=int
  2. p 10/3.0  #int*float(浮動小数点)=float
  3. number = 3.14
  4. p number
  5. p number.to_i  #整数に変換
  6. p number.to_s  #文字列に変換
  7. text = "3.14"
  8. p text
  9. p text.to_f  #浮動小数点に変換
  10. puts gets.to_i*100

コメントに違いを書いていますので、おおよそ押さえてください。

1.は「整数データ/整数データ」となっているため、戻り値も「整数データ」となります。

2.は「整数データ/浮動小数点データ」となっているため、戻り値は「浮動小数点データ」となります。

基本は以上です。
数値データには、整数データ(Integer=インテジャー)や、浮動小数点(Float=フロート)を含む実数データがあります。詳しく知りたい人はググってみてください。しかし、現段階ではこのくらいを押さえとけば大丈夫です。

 

 

今回は以上です。

ちょっとつまんないところかもしれませんね(笑)しかし、プログラミングをするにはどれも必要な概念になりますので、コードを真似しながら覚えてみてくださいね。

次回以降も同様にまとめていきます。自分も学びながらですので、間違いや意見、質問等あればコメントください。

よろしくお願いします。

ではでは。