ゴリラからの逃走

意識が高いだけで何もできなかった頃(=ゴリラ)から変わるために日々行なっていることを書いています。

Rubyトレーニング12日目

リーダブルコード

  • 包含的範囲にはfirst,last、包含/排他的範囲にはbegin,endがイディオム。
  • 似ている分は似たように書く。例えば=などで縦を揃える。似た考えをグループにまとめ順番を整える
  • 何よりも「プロジェクトの中で一貫性がある」ことが大事。
  • 汚いコードをコメントで補うのではなく、最初から綺麗な言葉を使って極力コメントを書かない
  • ファイルやクラスには全体像のコメントを書く
  • 歯切れの悪い表現を避ける(〜〜の状況によって優先度を変える →〜〜が〜〜なら優先度を上げる
  • 調査する対象を条件式の左側にする length < 10 みたいに

読んでいて思うが、そもそもこの本は一回学んで終わり、というより初学者のうちは折に触れて見返す系のやつだな。

たのしいRuby

第15章 ハッシュクラス

練習問題

1.英語と日本語での曜日の対応させるハッシュ

wday = {sunday:"日曜日", monday:"月曜日", tuesday:"火曜日",wednesday:"水曜日", thursday:"木曜日",friday:"金曜日",saturday:"土曜日"}

2.ペアの数

p wday.size

3.eachメソッドを使う

wday.each do |key, value|
  print "「#{key}」は#{value}のことです。","\n"
end

4.文字列のハッシュ化

def str2hash(str)
  str_list = str.split(/\s+/)
  str_hash = Hash.new(0)
  counter = 0
  while counter < str_list.size
    str_hash[str_list[counter]] = str_list[counter + 1]
    counter += 2
  end
  return str_hash
end

p str2hash("blue 青 white 白\nred 赤")

配列の先頭から1つ要素を取り出すshiftを使う方法もあるね。

docs.ruby-lang.org

第16章 正規表現クラス

\sは空白文字を表す。空白、タブ、改行文字、改ページ文字とマッチ。

str = "abc  def  g    hi"
p str.sub(/\s+/,' ') # "abc def  g    hi"
p str.gsub(/\s+/,' ') # "abc def g hi"

練習問題

1.アドレスを「ローカル@ドメイン」で取得する

/([a-zA-Z]*)@([a-zA-Z]*)/ =~ "ken@gmail.com"
p $1
p $2
/^([^@]+)@(.*)$/ =~ "ken@gmail.com"
p $1
p $2

2.文章を変える

これだと、微妙に文章が変になるか。

str = "正規表現は難しい! なんて難しいんだ"

p str.gsub(/難しい/, "簡単")

こうやって、メソッドをかぶせることもできるか。(メソッドチェインと言うらしい。)

str = "正規表現は難しい! なんて難しいんだ!"

p str.gsub(/難しいんだ/, "簡単なんだ").gsub(/難しい/, "簡単だ")

3.-で繋がった文字列をcapitalizeする

正規表現使わなくても書けるよな。

p ("in-replay-to").split("-").collect{|w| w.capitalize}.join("-")

第17章 IOクラス

minitestの書き方。

techacademy.jp

バッファリングとは。

e-words.jp

Rubyの自動化

2048の自動化

こちらを参考に、chromeドライバーをダウンロード、パスを通す。

qiita.com

sudo mv ['解凍したchromedriver'] /usr/local/bin

export PATH="/usr/local/bin:$PATH"

which chromedriver
  --> /usr/local/bin/chromedriver

たまに見るけど パスを通す って概念がよくわかってないから、後で調べる。

Seleniumリファレンスを参考にコードを書いていく。

www.seleniumqref.com

タグ名から要素を取得する。

element = driver.find_element(:tag_name,'html')

要素に対して、キーを押す。

element.send_keys(:left)

あとは、操作を繰り返す。めっちゃシンプル。

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :chrome

driver.get 'https://gabrielecirulli.github.io/2048/'

sleep 1

element = driver.find_element(:tag_name,'html')
100.times do
  element.send_keys(:left)
  sleep 0.5
  element.send_keys(:down)
  sleep 0.5
  element.send_keys(:right)
  sleep 0.5
  element.send_keys(:up)
  sleep 0.5
end

1600点までいった。

後半の繰り返しが気持ち悪いので、ちょっとだけ整えた。

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :chrome

driver.get 'https://gabrielecirulli.github.io/2048/'

sleep 1

element = driver.find_element(:tag_name,'html')
direction = [:left, :down, :right, :up]

100.times do |i|
  direction_key = direction[i % 4]
  element.send_keys(direction_key)
  sleep 0.2
end

■今日の実績 f:id:aoki-shiraki21:20200214075254p:plain