開発を進めている中で最近悩みがあります。
俺)「修正しました!」
上司)「本当に大丈夫それ?」
俺)「はい!テストはしたので大丈夫です!」
私のいうテストとは、自分の手を使って確認していくスタンスです。なので、時間がめっちゃ掛かります。
ちょっとずつ自動化は進めています。ブラウザではiMacros。これめちゃくちゃ便利です。
しかし、ちょっとの修正を入れてもテストしないといけなくなる。でもテストするのに時間がかかる。。。
そして、、、やらなくなる。(今後のバグの可能性を生む)
これじゃ意味ないっすね。
冒頭長いんだけど、結局何がいいたいのか。
テストを自動化したいんです!!!
最近このスライドに発火させられました。
www.slideshare.net
なんとすばらしいことでしょう。
俺)「真似したい!(・∀・)!」
で、テストで使っているツールがRubyだったので、おとなしくRubyを覚えることにしました。
目標は、Rubyの構文を覚える。⇒ テストのツールを使えるようになる。⇒ テストを書く
のステップで進む予定
ドットインストールで構文を学習
まずは読めるようにしなければ話になりません。本を買おうかなと思ったんだけど、外出るのがダルいので、ドットインストールで学習中です。今は1〜12まで終わったかな。
メモ
出力
デバッグとかでよくつかうんだろうね。
print "hello world" # 終わったあとに改行がない puts "hello world(puts)" # 改行がある p "hello world(p)" # データの形式がわかるように表示
変数と定数
定数は先頭が大文字であればおkとのことですが、全部大文字で書いている人が多数なので、大文字にします。ちなみに、Rubyは全部オブジェクト型らしいです。
# 変数: データをつけるラベル # 定数: 変更されないデータにつけるラベル msg = "hello world" p msg ADMIN_EMAIL = "taguchi@gmail.com" p ADMIN_EMAIL
文字列
単純な使い方ができます。(なんかPythonを学んでいる感じが)
# データ(オブジェクト) # - メソッド(クラスで定義) # 文字列 - String # length 文字列をカウント p "hello world".length # 11
シングル、ダブルクォーテーションの使いドコロ
文字列を囲うダブルクォーテーション、シングルクォーテーションで意味が変わります。PHPもそうだけど、ダブルクォーテーションで囲うクセつけようかな。。。(そもそもなんでシングルで囲うようになったんだろ? Pythonかな?)
個人的にビビったのは繰り返しになる点です。(グッバイforチュートリアル)
# name = "taguchi" x = "hel\tlo world, #{name}" # 変数展開、特殊文字 "hel\tlo world, taguchi" y = 'hel\tlo world, #{name}' # 文字だけ "hel\\tlo world, \#{name}" # 文字列連結 + * puts "hello world" + " taguchi" # hello world taguchi # 繰り返しになる(なん・・・だと・・・!?) puts "hello " * 5 # hello hello hello hello hello
!(ビックリマーク)と?(クエスチョンマーク)
「!」「 ?」 何ぞこれ(´・ω・`)!?
!
が破壊的メソッド。これをつけるとメソッド実行時に変数の値も変更になります。
?
は真偽値を返すメソッドです。メソッドの結果に真偽値で返します。
なんかSwiftでもみたような気がする。。。同じ意味だったのかな。
# ! 破壊的メソッド # ? 真偽値を返すメソッド # 通常メソッドは使用後、変数の値を変更しない s = "taguchi" puts s.upcase # TAGUCHI puts s # taguchi # 破壊的メソッドを使用すると、値も変更する puts s.upcase! # TAGUCHI puts s # TAGUCHI # 真偽値を返す p s.empty? # false s = "" p s.empty? # true
数値オブジェクト。Numeric
これまた単純でわかりやすい。
x = 10 y = 20.5 z = Rational(1, 3) # 1/3r <- これは動かなかった・・・?バージョン? # こういう定義もできる。金額等見やすいようにコロン区切るするアレと同じこと puts 100_000_000 # 100000000 # + - * / % ** # 演算 p x % 3 # 1 p x ** 3 # 1000 p z * 2 # 2/3 x = x + 5 p x # 15 x += 5 # 自己代入 p x # 20 # round 四捨五入のメソッド p y.round # 21
配列オブジェクト。Array
やっぱりPythonと似ているな。どっちが先にリリースしたかわかりませんが、自分はPythonから入ったもので。。。
あと、ショートカットってなんだろう?
# 特に配列の中身の型は混じってもおk sales = [5, 8, 4, "taguchi"] p sales[0] # 5 p sales[3] # taguchi p sales[0] = 10 # 書き換えもおk p sales[0] # 10 # 範囲指定 # 0 - 2まで p sales[0..2] # [5, 8, 4] # コロン3つで未満指定(0から2未満) p sales[0...2] # [5, 8] # 一番後ろから p sales[-1] # "taguchi" # 複数指定 p sales[1, 2] # 8, 4 # 初期化 sales = [] # 複数要素の書き換え sales = [5, 8, 4] # 0 1が 1,2に変わります sales[0...2] = [1, 2] p sales # 1, 2, 4 # 要素を追加する # 要素1のところから0個分追加(単純な追加になる) sales[1, 0] = [10, 11, 12] p sales # [1, 10, 11, 12, 2, 4] # 要素の削除 sales[0, 2] = [] p sales # [11, 12, 2, 4] # メソッド # 要素をカウント p sales.size # 要素を逆にソート p sales.sort.reverse # 配列の最後に追加 p sales.push(100) # ショートカット(?)もある sales << 100 << 102 p sales # [11, 12, 2, 4, 100, 100, 102]
ハッシュ
Scalaの時にシンボルってのが一番意味不明でしたけど、やっとわかりました。Scalaのシンボルの意味とはまた違うのかね。
シンボルで記述すると読み込みのスピードが速くなるらしい。
# 他のプログラム言語と扱い方は同じ # key value sales = {"taguchi" => 200, "fkoji" => 300} p sales["taguchi"] # 200 # シンボルキタ━(゚∀゚)━! sales = {:taguchi => 200, :fkoji => 300} p sales[:taguchi] # 200 # こういう書き方もできる sales = {taguchi: 200, fkoji: 300} p sales[:taguchi] # 200 # メソッド関連 # カウント p sales.size # 2 # keyを全部出力 p sales.keys # taguchi, fkoji # valueを全部出力 p sales.values # 200, 300 # keyに「taguchi」があればtrue p sales.has_key?(:taguchi) # true
型変換
これまた便利だね。そういえば、PHPであんまり型変換したことないなぁ。
a = 10 b = "5" p a + b.to_i # 15 p a + b.to_f # 15.0 p a.to_s + b # "105" h = {taguchi: 100, fkoji: 200} # ハッシュから配列に変換 p h.to_a # 配列になる [[:taguchi, 100], [:fkoji, 200]] # Ruby 2.1以降です。(´;ω;`)ウッ… # ハッシュから配列に変換してハッシュに変換 p h.to_a.to_h
%記法
これは初めてな感じがします。でもPerlでこんなのなかったっけ?
書き方に慣れてくれば便利になるかも。バックスラつけまくるの結構めんどいからね。
s = "he\"llo" # バックスラが必要 s = %Q(he"llo) # いらない s = %q(he"llo) # 小文字でもおk # s = %Q!hello! # 囲む記号は同じであれば問題ない p s # "he\"llo" # 配列の指定 # a = ["a", "b", "c"] と同じ意味 a = %W(a b c) p a # ["a", "b", "c"]
感想
初めてRubyを勉強しましたが、わかりやすいですね。構文をマスターすれば、どんどん進むことができると思います。これは好きになりそうだわ。またRuby on Railsなんてフレームワークもあったらそれは増えていくと思いました!
周りは大体Ruby使っています。なんとなく気持ちはわかりました。
時間あるときに後編すすめますかね。がんばるお(^ω^ = ^ω^)