Ruby超入門 2周目 CHAPTER 5「便利な道具を使う」 まで

 

f:id:kkouji0224:20191023003724p:plain

 

Twitterが捗りすぎちゃって、はてなを書くのを忘れていたので、書きたい気持ちもあるので書いてから寝ようと思って今書いてます。こんばんはkoujiです。

 

今回も「Ruby超入門」の内容の振り返りをしていきます。ちょっと目が冴えちゃって寝れなくなってしまうのも嫌なのでサクッといきたいなって感じです。

 

リファレンスマニュアルとは

Rubyの情報がまとめられてるサイトなんだけど、今回はリファレンスマニュアルからメソッドの機能を調べるやり方を教えてもらったよ!!

 

https://www.ruby-lang.org/ja/ 

 

サイトの「ドキュメント」から使ってるRubyのバージョンにあわせてリファレンスマニュアルに進んでいく感じかな。

 

Rubyリファレンスマニュアル Ruby 2.6.0版

 

僕の場合はRubyのバージョンが2.6なので上のリンクのところを見る感じ。で、開いたら「組み込みライブラリ」のBuiltin librariesをクリックだぜ。で、色んなクラスがでてくるので、そこから進んでいく。例えば配列で使えるメソッドってどんなのがあるんだろうなーって感じならArrayの中のインスタンスメソッドの中にいっぱい書いてあるみたいな感じ。

 

で、説明も書いてあるんだけど、初学者ってそもそも日本語でかかれてても語彙が少ないから理解するのが難しいときもあると思うんだけど

a = (1..10).to_a
p a.sample        #=>  9
p a.sample        #=> 10
p a.sample(3)     #=> [1, 9, 3]
p a               #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

例が上みたいな感じで書かれてるので直感的にわかるようにもなってるかな。

むやみやたらにググるよりもまずここで調べたほうが話がはやいかもしれないね!

 

てか、上の.to_aってメソッドは範囲オブジェクトに使うと配列にしてくれちゃうのか…今知りました…。便利ですね…。なんて感じで脱線的にも学べちゃうね。

 

で、今回リファレンスマニュアルで助けられたのが練習問題ね。

 

配列の中の文字を小文字にする為に、downcaseメソッドを使う練習問題だったんだけど、配列にたいして.downcaseしてもエラーになるんだよね。なんでじゃーとリファレンスマニュアルのArrayのインスタンスメソッドのところを見てみたらdowncaseメソッドないんだよね。downcaseはStringクラスのメソッドだったの。

 

なのでこん感じ。

 

x = ["aya""achi""Tama"].map{|texttext.downcase}

 

配列を.mapで変数textに一個づつ入れてあげるとStringオブジェクトになるから、その変数textに.downcaseするみたい感じだとできるんだよね。でdowncaseで小文字になったものが変数xに配列として代入されるよみたいな。

 

で、最近は「Ruby超入門」の練習問題が面白くて楽しい。

 

答えみないで「こうじゃね?」みたいな感じでやってるとプラスアルファで知れるのが楽しいのかも。

 

ってな感じでかなりあっさりしてたけど、今日はこの辺でアディオス!

 

 

Ruby超入門 2周目 CHAPTER 4−4 配列を繰り返し処理する

f:id:kkouji0224:20191017110900p:plain

 

『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』


github.com

 ※上の画像はRuby超入門に出てくる配列オブジェクトさん

べこ🐄 (@becolomochi) | Twitterさんのイラストでgithubで公開してくれてるんだよ!

 

こんばんはkoujiです。寒い。寒いんだよ。Fuck金木犀!寂しい気持ちになるんだよ!

 

ということで、今日は前回の記事に入れれなかった「配列の繰り返し処理」を振り返っていこうと思います。繰り返しの部分だけなのでサクッと短くいけるはず。

 

drinks = ["コーラ""ファンタ""メロンソーダ"]
drinks.each do |drink|
    puts drink
end

 

eachメソッドってやつですね!doからendまでがブロックになってて、ここに繰り返したい処理を書いてるのね。ふむふむ。|drink|のdrinkは変数。変数なので名前は何でも良いんだけど、複数形drinksの要素を一つづつ入れていく変数だから単数形のdrinkにしておくのが自然な感じだよね。で、||これはパイプって名前らしい。なんでパイプなのかは不明だ。

 

流れとしては、配列drinksの要素をeachメソッドで変数drinkに代入して、putsメソッドで表示してる。で、配列の要素がなくなるまで繰り返して次の要素がなくなったら終わり。そんな感じ。

 

繰り返しを途中で終わらせるbreak

 

drinks = ["コーラ""ファンタ""メロンソーダ"]
drinks.each do |drink|
    break if drink == "メロンソーダ"
    puts drink
end

 

これはbreakがif == "メロンソーダ"なのでdrinkに代入されたものがメロンソーダと比較してtrueだったら実行されないって感じかな。

 

drinks = ["コーラ""ファンタ""メロンソーダ"]
drinks.each do |drink|
    break if drink
    puts drink
end
puts "へぇー。"

 

ちなみにbreak if drinkにしてみたらputsまで即飛ぶね。

なるほど。面白い。へぇーだね。

 

次は繰り返しの次の回に進む

 

drinks = ["コーラ""ファンタ""メロンソーダ"]
drinks.each do |drink|
    next if drink == "ファンタ" 
    puts drink
end
puts "へぇー。"

 

これはbreakと違ってファンタだけ飛ばすって感じだね。変数drinkに代入されてるものを、文字列オブジェクトの"ファンタ"と比較してtrueだったらって感じだね。

 

次は範囲を指定して繰り返す

 

(0..50).each do |x|
   next if x.odd?
    puts x
end

 

まずこれ絶対1万とかにしてやるよね!間違いなくやるよね!

この0..50はRangeオブジェクトって呼ばれてるみたい。このRangeオブジェクトにeachメソッドを呼び出すと、上のコードだと0から50を変数xに代入して繰り返してくれるんだね。ちなみにさっきのnextをつかってx.odd?なのでxが奇数の時はtrueが返ってくるのでxが奇数だと次に飛ぶようにしてみたよ!こんなに簡単に書けるんだね。ビックリ!

 

ってことでCHAPTER 4はここまでっ!

 

基本中の基本でもこんなに面白いので、どんどん面白くなる気しかいないねっ!

ってことで今日はこの辺で。アディオス。

Ruby超入門 2周目 CHAPTER 4−3  要素を追加・削除する まで

f:id:kkouji0224:20191017110900p:plain

 

『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』


github.com

 ※上の画像はRuby超入門に出てくる配列オブジェクトさん

べこ🐄 (@becolomochi) | Twitterさんのイラストでgithubで公開してくれてるんだよ!

 

おはようございます。秋が急に深まりすぎて寒いですね…

 

今日は配列をやったので、その振り返りをやっておきます!まず配列は英語にするとArrayですね。Arrayもオブジェクト!種類の違う要素を1つの配列に入れることもできるんですね。文字列オブジェクト、整数オブジェクト、少数オブジェクトみたいな種類が違っても入れれちゃう。

 

変数に代入することもできると。

で、代入するときの変数名を複数形にしてあげることが慣習があるみたい。

 

drinks = ["コーラ""ファンタ""メロンソーダ"]

 

そりゃそうだよね。上みたいに配列に色んな飲み物が入ってたら変数名を複数形にしたほうが現実的な感じするよね。

 

じゃー配列の中の要素を取得していきましょー。

 

drinks = ["コーラ""ファンタ""メロンソーダ"]
puts drinks[0#=>コーラ
puts drinks[2#=>メロンソーダ

 

配列って1から始まるんじゃなくて0からはじまるんだよね。

なのでputs drinks[0]は先頭(ゼロ番目)のコーラになるんだね。

 

これputs drinks[-1]だと末尾のメロンソーダになる。今ふと思ったんだけど、-0ってのはないんだね。0も-0も同じっていうか-0は存在しないのかな?ってことで、上のプロフラムのputs drinks[0]をputs drinks[-0]にして実行したらメロンソーダになっちゃったね。

 

ほぉ… これは面白いと思って、 p 0 == -0ってやってみたらtrueが返ってきたよ!

 

面白いね!

 

脱線しちゃったので元にもどってと…

 

取得するための専用のメソッドもあるのね。

 

drinks = ["コーラ""ファンタ""メロンソーダ"]
puts drinks.first #=>コーラ
puts drinks.last #=>メロンソーダ

 

配列.firstとか配列.lastみたいな感じで書いてあげると、読んで字の如く的な感じで取得できるんだねぇ。ちなみに配列の要素の中に対応するものがなかった場合はnilが返ってくるんだね。

 

上のプログラムだと変数drinksに代入してるけど

["コーラ""ファンタ""メロンソーダ"].first

 

変数使わなくても呼び出せるんだよね。

 

こんな感じで追加と削除もできる。1つ1つやると覚えにくいからまとめて書いておこうかな。

 

配列.push(" ")  末尾に追加
配列.unshif(" ") 先頭に追加
配列 << " "   末尾に追加

 

配列.pop    末尾から削除
配列.shift    先頭から削除

 

で、最後に配列の引き算も面白い

 

menu = [" カフェラテ "モカ "" コーヒー "エスプレッソ "]
ordered = [エスプレッソ "" カフェラテ "]
p not_ordered = menu - ordered

#[" モカ ", " コーヒー "]

 

配列menuから配列orderedを引いて、not_orderedに代入してるんだけど配列orderedの中の要素(この場合だとエスプレッソとカフェラテ)が引かれてコーヒーとモカになっちゃうって感じだね。

 

とりあえず今日はこんな感じで!のんびりしてたら時間がなくなってきたよ!

後半駆け足になってしまったので時間配分は大事ですね…

 

次回はeach doの振り返りをしたいと思いますっ。

 

Ruby面白いねっ!!

Ruby超入門 2周目 CHAPTER 3 3-6 「なんどもも繰り返す」 まで

f:id:kkouji0224:20191016161437p:plain

『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』


github.com

 ※上の画像はRuby超入門に出てくる文字列オブジェクトさん

べこ🐄 (@becolomochi) | Twitterさんのイラストでgithubで公開してくれてるんだよ!

 

今はバスの中です。バスの中でもRubyです。

 

複数の条件を組み合わせる

まずは || からですねー。

wallet = 100
pasmo = 300
if wallet >= 300 || pasmo >= 300
    puts "コンビニでアイスを買っていこう!"
end

これも2周目ちゃんと読むまで「もしくは」みたいな感じで覚えてたんだけど、「or」で覚えちゃった方が感覚的にサッといけるなってことに気がついたよ!orのほうがパッとイメージしやすいの僕だけでしょうか…

 

続きまして&&これね!

wallet = 500
weather = "fine"
if wallet >= 300 && weather == "fine"
    puts "コンビニでアイスを買っていこう!"
end 

 

これも上と同じで「かつ」で覚えてたんだけど、普段あまり使わない言葉だとイメージするのにラグが発生するというか負荷が高くなるので「アンド」で覚えたほうがパッとでてくるなぁってのをあらためて実感。

 

ifの条件に書けるもの

if 1
    puts "1で成立しました"
end
if "a"
    puts "aで成立しました"
end 

このチャプターではこれが一番「ほほー!!」ってなったところかも。

ifはfalseとnilは条件をみたさなくて、それ以外は条件を満たす。だから上のifは100とabcなのでfalseでもnilでもないから条件が満たされてputsメソッドが実行されちゃうんだね〜。これは面白いなー。覚えておこう…

 

で、caseさんです

 

order = "特盛り"
case order 
when "並盛り"
    puts "300円です"
when "大盛り"
    puts "350円です"
else 
    puts "ここは牛丼屋ではありません"
end 

これは見たまんまかなぁ。case + 変数からのwhen + 候補みたいな感じ。whenだから変数orderが"並盛り"の時にputsメソッド実行みたいな読み方かなぁ。で、どれにも当てはまらなかった場合に実行するelseも書けるんですね!

 

二択のときはifさん 三択以上のときはcaseさんで考えてみると良いっぽい!

 

 

で、ifとcaseはここまで…

 

timesメソッドさん

7.times do
    puts  "毎日焼肉"
end
puts "休肉日をつくりましょう" 

doとendのセットが「ブロック」で処理のかたまりをかける場所。

で、回数を繰り返し終わると次の処理にいくので上の場合は、7日間繰り返し焼肉食べたら休肉日をつくりましょうって苦言をいただくって感じ…

 

この繰り返しも一個一個書くんじゃなくて、timesメソッドで書くことでDRY(Don't Repeat Yourself)的な感じで読みやすいしメンテナンスしやすいってことだねっ!

 

 

続きましてwhileさんですねー。

stress = 0
while stress < 7
    stress += 1
    puts "パワハラくらうとストレス#{stress}に増加"
end
puts "休日で回復だ!!"

 

while + 条件で、中身が条件が満たされるまで繰り返す処理。で満たされるまで繰り返し確認して繰り返し処理を実行。条件が満たされたら次の処理にいくので休日がやってくると… あれおかしいパワハラが7回繰り返されている… 休みはどこだろう…みたいな。

 

結局行きも帰りもバスの中でRuby超入門やったり、はてなにこんな感じで書いてたりすると一瞬で時間が過ぎていくので、かなり楽しい時間かもしれない…。

 

そとでパソコンいじるのそんなに好きじゃ無い派だったんだけど、意外と集中できちゃったり。そんな発見もありつつ今日の振り返りはここまで。

 

てかvscodeからコピペするとそのまんまの感じで貼り付けられてめっちゃ便利!

 

ってことでまた明日〜!

Ruby超入門 2周目 CHAPTER 3 3-3 「条件を満たさないときにも処理する」 まで

f:id:kkouji0224:20191015093851p:plain

 

『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』


github.com

 ※上の画像はRuby超入門に出てくる文字列オブジェクトさん

べこ🐄 (@becolomochi) | Twitterさんのイラストでgithubで公開してくれてるんだよ!

 

今日はCHAPTER 3 3-3 「条件を満たさないときにも処理する」までの振り返りを書きまーす!

 

まずは比較メソッドから!

 

puts 1 < 2

puts 1 > 2

 

これtrueとfalseになりますよね。これも「ほほー…」と思ったことがあるので書いていこう。不等号が成り立つならtrueを返す。成り立たないならfalseを返す。この「返す」ってのは「実行結果に置き換える」って意味。置き換えられた結果がputsメソッドで表示されてるってことなんだね。ふむふむ。ちなみにtrueもfalseもオブジェクトさん

 

比較メソッドでもこんなに面白いってのは面白い!!

 

例えば…

 

wallet = 500

puts wallet >= 300

 

財布の中に500円ぶっ込んだ。財布の中が300円以上入っていたらなのでtrueを返すみたいな感じだね。

 

次は等しいかどうかを判断する比較メソッド

puts 1 == 2

puts 2 == 2

puts 2 == 1 + 1

 

とか

 

puts 1 != 2

puts 2 != 2

 

!= は≠に相当する。今まで「等しくない」って感じで認識してて、!=がでてくると等しくないって頭の中で変換かましてややこしくなってたんだけど、ノットイコールって考えるとスッキリしちゃった。あーなるほどね。!はノットイコールの斜めの線みたいなものだなって。面白いねー。

 

で、== とか != は数値オブジェクトだけじゃなくて文字列オブジェクトの比較もできる。

 

puts "kouji" == "kouji"  #=> true

puts "kouji" != "kouji"  #=> false

 

末尾に?がつくメソッド

puts 2.even? 

こんな感じの。慣習的に末尾に?がつくメソッドはtrueかfalseを返すことが多いらしい。ちなみに.even?は偶数かどうかを判断してtrueかfalseを返すメソッド。

 

で、準備が整いましたよってことでifです。

 

wallet = 500

if wallet >= 300

  puts "コンビニでアイスを買っていこう!"

end

 

if wallet >= 300が条件を満たしていたらtrueを返してputsが実行されるって感じだね。面白いなーと思ったのが、後置ifってやつね。うえのやつを一行で書ける。

wallet = 500

puts "コンビニでアイスを買っていこう!" if wallet >= 300

 

こういうところは1周目で読み飛ばしてたので凄く面白い。「へー」の連続である。

 

さーて次はunlessさんですね。

unlessさんは条件を満たさないときに処理を実行してくれる。

 

x = 200

unless x == 100

  puts "100ではありません"

end

 

これは実行されるね。

xに200が代入されてるので100と等しくないからputsが実行される。

 

面白いなーって思ったのがこれ。

 

x = false
unless x
  puts "unless: x は false です "
end
if !x
  puts "if: x は false です "
end

 

xにfalseが代入されてるからunlessさんはputsを実行して、ifさんはfalseが代入されてるxを!で反転してtrueなのでputsを実行する。unlessさんとか!で反転してtrueとかも面白いし、xにfalseを代入ってのが「へー面白い!」って感じ。これって文字や数字を代入してるって考えるとあれなんだけど、オブジェクトを代入してるってことだからかな。trueもfalseもオブジェクトだもんね。面白いねー!

 

最後にelseとelsif

 

season = " 夏 "
if season == " 春 "
  puts " アイスを買っていこう! "
elsif season == " 夏 "
  puts " かき氷買ってこう! "
else
  puts " あんまん買ってこう! "
end

 

で、面白いなと思ったのが、上のプログラムを違う書き方できるんだなっての。

 

season = " 夏 "
if season == " 春 "
  puts " アイスを買っていこう! "
else
  if season == " 夏 "
    puts " かき氷買ってこう! "
  else
    puts " あんまん買ってこう! "
  end
end

 

elseでifとさらにelseみたいな書き方できるんだなって。いやーちゃんと読んで進めるとマジで面白いね。ちなみに今回はここまでなんだけど、これcaseとか使うと読みやすくかけるみたい。

 

うーんプログラミングってそれ自体としても面白いね。

プログラミングっていうかRubyでこういう本を書いてくれる人がいるRubyコミュニティが素晴らしいのかな。とにかく2周目楽しいっす!ありがとうございます!

 

ということで続きは明日!書けるかな…!

Ruby超入門 2周目 CHAPTER 2

f:id:kkouji0224:20191014093908p:plain

 

『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』

 

github.com

 ※上の画像はRuby超入門に出てくる整数オブジェクトさん

べこ🐄 (@becolomochi) | Twitterさんのイラストでgithubで公開してくれてるんだよ!

 

 

てな感じで2周目を開始したので記録していきまーす。

 

開始日:10/13

 

今回はCHAPTER 2 かんたんなプログラムを書くの中から気になったところを。

足し算引き算とか整数少数とか.to_i .to_sとか変数の章なんだけど、それでも「へー」って思えるところがあるのは流石だなって感じ。

 

プログラムの途中で一時停止してirb を使う

 

require "irb"
a = 1
binding.irb
puts a

 

 

1周目で見事に読み飛ばしていて頭の片隅にもなかった…

面白いなと思ったので。プログラムを一時停止させてirbが使えるっていう。

 

putsの前でプログラムを一時停止してirbが起動するので、例えばここでa = 100って変数に代入してあげてからexitでirbを終了させると、一時停止していたプログラムが動き出して、puts a で100が表示されるんだよね。なかなかおもしろいなーと思った。

 

binding irbをプログラムの一時停止させたいところに書いて、それより前にrequire "irb"を書いておく。

 

次は

 

p メソッドを使って変数の中身を表示させる

 

ほほう… またまた… 記憶にない… pメソッドなんて頭の片隅にもない…

 

a = 3 / 2

b = a * 2

puts b

 

これだとputs bで2になってしまうよね。あれあれ何でだろ?ってときにpメソッドなんですね。使い方としては…

 

a = 3 / 2

p a

b = a * 2

puts b

 

変数aの次にp aで変数aに何が代入されてるのかが見れちゃうんですね。これを実行するとp aは1になってる。そうだよねー。整数だもんなー。変数aへ 3.0 / 2.0を代入しないと意図した3にはならないよねーって気がつけちゃうわけですね。これは便利。

 

で、pメソッドじゃなくてputsでいいんじゃね?って思ったけど、pメソッドはデバッグ用に使うと。pメソッドとputsメソッドでは表示も異なる場合があるっぽい。

 

なるほどねぇ〜!

 

次はエラーメッセージ!ここも改めて読んでみるとフワッと読んでググってたりしたのがハッキリするね。

 

エラーメッセージの読み方

 

hi.rb:1:in `<main>': undefined method `put' for main:Object
(NoMethodError)

 

hi.rb 

これは実行したファイル名

 

:1

これは何行目かってやつね。この場合1行目

 

undefined method `put'

putなんてメソッドは定義されてないぞってやつね。

 

(NoMethodError)

これがエラーの名前

 

 

xy.rb:2:in `<main>': undefined local variable or method `y' for
main:Object (NameError)

 

この場合は、実行したファイルがxy.rbで2行目でエラーが起きてるよ。でもって、undefined local variable or method `y' なのでyなんて変数もしくはメソッドは定義されていませんよってことになるのね。 

 

variableが変数って意味を私は今知りました…

 

続いてのエラーはこれ

Traceback (most recent call last):
ruby: No such file or directory -- ab.rb (LoadError)

 

No such file or directoryはそんなファイルやディレクトリ御座いませんよ!

 

 

1周やっとけば良いんじゃね?入門だしと甘くみていたけど、まったくちゃんと読んでない自分に恐怖すら覚える… でも面白さはなんだか増す感じがするかな。

 

ということで『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』の2周目はこんな感じで復習しながら進めて見ようと思います。