Rubyの基礎3
どうもhiroakiです。
今回も引き続き、Rubyの基礎について紹介します。Webサイトを作ろうとしている人にとってRubyは必須の言語です。自分はとにかくウェブサイトを作ってみたい人間ですので、これをなんとか習得したいと思っています。これからまとめる内容を、みなさんもぜひ参考にしてみてください。
▼前回までの記事はこちらです。
lesson10
繰り返し文の補足
while
whileのループ処理では、条件式が成立している間はwhile~end間の処理を繰り返します。
- i = 1 #カウンタ変数の設定
- while i <=5 do #条件式部分。doは省略可。
- puts "気ままに趣味旅行へようこそ"
- i +=1
- end
4.行目がないと、処理が延々に繰り返されエラーとなってしまうので、厳重注意です。
では、いくつかコード例を出しますので、while文や繰り返し文について感覚を掴んでください。
コード例1
- array = []
- while line = gets
- line.chomp!
- array.push(line)
- end
- p array
getsメソッドは改行で文字を受け取ります。
chompメソッドは文字列の末尾の改行文字を取り除きます。whileの条件式にchompメソッドを使うことはできないので、2.行目の処理に含めます。chompメソッドとchomp!メソッドの違いは、レシーバ自身を変更するかどうか。chomp!の場合はレシーバ自身を変更するので、代入が不要になります。
詳しくは下記サイトを参照してください。レシーバは「.」の左側のことです。ここではarrayです。
コード例2
入力した文字を配列にして、ランダムで引き出すプログラムを作ってみましょう。
- line = gets.chomp.split(',')
- p line #デバック用
- num = line.length
- puts line[rand(num)]
ここでは、「,」区切りで入力された一行文字列(例えば「大吉,中吉,吉,凶,大凶」など)を1.行目のgetsで受け取り、chompで末尾を消し、splitで「,」区切りでリストを作ります。
splitメソッドは、与えられたデータを指定の記号で分割し、配列として戻します。
lengthメソッドは、配列のデータ個数を数えて返してくれます。それをnum変数に代入し、randメソッドでランダムで引き出します。その引き出した値をline配列のインデックス値とします。
ちなみにpメソッドは、データをそのまま出力するメソッドです。文字列の場合はダブルクォーテーションで囲んでくれたり、データの種類に合わせた形式で出力してくれるので、デバッグや動作確認の際に便利です。
データ例3
繰り返し文を使い、プルダウンメニューを作る。
- count = gets.to_i
- puts "<select name=\'age\'>"
- for age in 1..count
- puts "<option>#{age}才</option>"
- end
- puts "</select>"
to_iメソッドは、要素をi=integer(インテジャー)に変換します。また3.行目のように、for文の場合は、inの後で「始め..終わり」の形で指定して繰り返します。
データ例4
繰り返し文を使い、ハッシュからデータを抜き出します。
- skills = {"職業" => "戦士", "体力" => 100, "魔法力" => 200, "ゴールド" => 380}
- skills.each do |skill|
- puts skill
- puts "#{skill}です。"
- end
- skills.each_value do |skill|
- puts skill
- end
each…ハッシュからkeyとvalueを抜き出します。
each_value…ハッシュからvalueを抜き出します。
each_key…ハッシュからkeyを抜き出します。
4.のようにすると、 「["職業", "戦士"]です。」のようにskillが配列として返されます。なので、次のようにすると良いです。
実は、each文のdoとendは{}で置き換えることができます。ただし、基本的にはdoとendで書くことをおすすめします。
- team = ["勇者", "戦士", "魔法使い"]
- team.each { |person|
- puts "#{person}は、スライムと戦った"
- }
lesson11
ソート(並べ替え)
- items = ["イチゴ", "ウメ", "アップル", "イモ"]
- puts items.sort
- puts items
- items = items.sort
- puts items.sort.reverse
sortは、あいうえお順、数値順で並べ替えます。確認してほしいのは、並べ替えるのはその時だけで、3.行目のようにしてみると実際にitemsリストが変わっているわけではないことが分かります。もし、入れ替えて更新したい場合は、4.のようにしましょう。
ちなみに、漢字のソートは読み仮名順ではなく、文字コード順に並び替えられるので注意です。
ハッシュをソートする場合は次のようになります。
- items = {"イチゴ" => 40, "ウメ" =>2, "アップル" =>100}
- p items.sort #キーでソートした後、配列として返される。
- p items.sort.to_h #ハッシュに戻す。
- p items.sort_by {|k, v| v } #値でソートした後、配列として返される。
3.と4.のメソッドについて押さえましょう。
lesson12
データ型の種類
コメントに違いを書いていますので、おおよそ押さえてください。
1.は「整数データ/整数データ」となっているため、戻り値も「整数データ」となります。
2.は「整数データ/浮動小数点データ」となっているため、戻り値は「浮動小数点データ」となります。
基本は以上です。
数値データには、整数データ(Integer=インテジャー)や、浮動小数点(Float=フロート)を含む実数データがあります。詳しく知りたい人はググってみてください。しかし、現段階ではこのくらいを押さえとけば大丈夫です。
今回は以上です。
ちょっとつまんないところかもしれませんね(笑)しかし、プログラミングをするにはどれも必要な概念になりますので、コードを真似しながら覚えてみてくださいね。
次回以降も同様にまとめていきます。自分も学びながらですので、間違いや意見、質問等あればコメントください。
よろしくお願いします。
ではでは。