気ままに趣味旅行

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

Rubyの基礎2

f:id:hiroakies4463:20190110194257j:plain

どうもhiroakiです。

 

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

ちなみに、前回までの内容は次に載せています。

hiroakies.hatenablog.com

 

lesson7

配列

配列は複数の値を格納することができるもので、[値1, 値2, 値3]のように作ります。配列に入っているそれぞれの値のことを要素と呼びます。

  1. names = ["sasaki","hiroaki","tom"]
  2. puts names
  3. nums = [12,22,33]
  4. puts "#{nums[2]}歳"
  5. nums[1] = 10
  6. puts "#{nums[2]}歳"

配列の変数名は、複数形にすることが多いです。また、配列の要素には、前から順に「0, 1, 2, ...」と数字が割り振られています。これをインデックス番号といいます。例えば、4.行目のnums[2]はnums配列の3番目の数値である33を示しています。

5.のようにインデックス値の要素に代入すると、配列のインデックス番号の要素を上書きできます。

 

配列に関係するメソッドには以下のものがあり、よく使うので押さえましょう。

配列の末尾に要素を追加
names.push("Tomozou")

配列の要素を削除
names.delete_at(0)

lengthメソッド 要素の数
puts names.length

 

ハッシュ

ハッシュはそれぞれの値にキーと呼ばれる名前をつけて管理します。配列の場合と違って、格納している値がどんな値か分かるので、便利ですね。

下のように、ハッシュには3つの書き方がありますが、キーがシンボルの書き方の省略形が最も使われます。

  1. #キーが文字列の書き方
  2. user = {"name" => "Suzuki" , "age"=> 21}
  3. puts user["name"]
  4. #キーがシンボルの書き方
  5. user ={:name => "Suzuki" , :age  => 21}
  6. puts user[:name]
  7. #キーがシンボルの書き方(省略形)
  8. user ={name: "Suzuki",age: 21} 
  9. puts user[:name]

1.ハッシュは{キー1 => 値1, キー2 => 値2}のようにつくります。ハッシュの各要素の値は、対応するキーを使って、ハッシュ[キー]とすることで用いることができます。user["name"]とすると、ハッシュuserのキー「"name"」と対応している値を用いることができます。

4.ハッシュは、キーの部分を文字列ではなく、先頭にコロン:を付けたシンボルと呼ばれる書き方で書くこともできます。文字列とシンボルは、基本的に同じように使うことができます。シンボルは、ハッシュのキーとしてよく使われます。ハッシュのキーの部分でシンボルを用いた場合には、その値を用いる時もシンボルで指定する必要があります。

7.ハッシュのキーにシンボルを用いるときには、省略した書き方ができます。「:key =>」を「key:」というように省略することができます。省略した書き方の場合でも、要素を取得する場合にシンボルを用いる必要があります。

 

ハッシュの要素を更新するには、配列の時のように、ハッシュ[キー] = 値と書きます。また、ハッシュ[新しいキー] = 値と書くことで、ハッシュに新しい要素を追加することができます。

 

ハッシュから存在しないキーの値を取り出した時の「何もない」という値は、Rubyでは「nil」(ニル)という特別な値で表現され、エラーにはなりません。

  1. #キーが文字列の書き方
  2. user = {name: "Suzuki" , age: 21}
  3. puts user["pet"]  #nil

nilは「何もない」という意味で、putsしても何も表示されませんが、データとしてはnilが返っていることは覚えておいてください。
 

「if ハッシュ[キー]」とすることで、値がない場合、すなわちnilの場合はfalseとして扱われます。下にコード例を書いているので参考にしてみてください。ちなみに、ここで出てきているeach文は次のlessonで紹介しています。

  1. user1 = {name: "Suzuki",age: 21}
  2. user2 = {name: "Sasaki",age: 18,pet: "トム"}
  3. users = [
  4.         user1,
  5.         user2,
  6.         {name: "Suga",age: 52,pet: "ちろ"}
  7. ]
  8. users.each do |user|
  9. if user[:pet]
  10.   puts "#{user[:name]}さん(#{user[:age]})は#{user[:pet]}という名前のペットを飼っています。"
  11. else
  12.   puts "#{user[:name]}さん(#{user[:age]})はペットを飼っていません。"
  13. end
  14. end

変数は「何でも好きな物を入れることができる箱のようなもの」でしたね。例えば、3.~7.行目のように配列を作り、ハッシュを含めることもできます。

 

また、下記のように配列[インデックス番号][キー]で、特定のハッシュの値を用いることができます。覚えておきましょう。

  1. user1 = {name: "Suzuki",age: 21}
  2. user2 = {name: "Sasaki",age: 18,pet: "トム"}
  3. users = [
  4.         user1,
  5.         user2,
  6.         {name: "Suga",age: 52,pet: "ちろ"}
  7. ]
  8. puts users[1][:name]

 

lesson8

繰り返し処理には、each文をよく使います。each文を使うと、配列の要素を順番に取り出して処理を行うことができます。

  1. nums = [12,22,33]
  2. nums.each do |num| 
  3.   puts "#{num}歳"
  4. end

each文は「配列.each do |変数名|」で書き、「end」までの間に実行したい処理を書きます。endの書き忘れに注意しましょう。変数numにはnumsの値がインデックス順に代入されていきます。

 

for文でも行うことができます。

  1. nums = [12,22,33]
  2. for num in nums 
  3.   puts "#{num}歳"
  4. end

for文は上記のように「for カウンタ変数 in 変数」で書きます。変数からカウンタ変数を取り出して使うイメージです。

 

lesson9

メソッド

putsやprintのような命令を出す言葉を、ルビーではメソッドと呼んでいます。ランダムな数値を返すrandメソッドを使ってみましょう。

  1. number = rand(1..100)
  2. puts number #デバック用
  3. if number == 1 
  4.   puts "100万円当選です"
  5. end

rand(1..100)で1から100までの数値からランダムに値を返しています。

ちなみに2.行目のデバッグ (debug) とは、プログラムの不具合・欠陥(bug)を見つけて修正し、正常に動作させるための作業全般を指します。

 

 

こちらの参考記事は少し古いものですが、リファレンスとしておすすめです。

route477.net

scrapbox.io

 

 

今回は以上です。

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

よろしくお願いします。

ではでは。