はじめに
rubyはこれまで必要な時に見よう見まねでなんとなくちょい修正、程度に触ってました。
まともに勉強したことはなかったので
プログラミング経験者のためのRUBY最速入門
という本を読んでみたのでそのまとめです。
売り上げランキング: 3,272
所感
タイトル通り、
他の言語を触ってる人ならかなり早く読めます。
1,2時間程度でも読めると思います。
基本中の基本文法がコンパクトにまとまっていてとても良かったです。
まとめ
もともとコンパクトにまとめてくれてる本なので、
それをさらにまとめ
たというよりは自分用メモです。
- 導入
- 文法
- 演算子とデータ型
- 制御分
- 組み込みオブジェクト
1. 導入
rubyを入れて使ってみれるようにするまでです。
フレームワークなどを入れる/触るわけではないのでさらっと終わります。
homebrew
自分はすでに入ってたので飛ばしましたが一応...
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
参考: http://tweeeety.hateblo.jp/entry/2014/10/03/195429
rbenv
rbenv経由でrubyを入れます。
自分はhomebrewで直接rubyを入れてたのでrbenvで入れ直しました
# rubyのバージョンを確認 $ ruby -v ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin13] # rbenv install # upgradeは10分弱かかったのでコーヒーでも飲みながら... $ brew install rvenv $ rbenv -v rbenv 1.0.0 $ brew upgrade rbenv # rbenv経由でのrubyのinstall # これは3分くらいだったかな $ rbenv install 2.4.1 # rubyのversionを2.4.1に切り替え $ rbenv versions system 2.1.2 * 2.2.0 (set by /Users/tweeeety/.rbenv/version) 2.4.1 $ rbenv global 2.4.1 $ rbenv versions system 2.1.2 2.2.0 * 2.4.1 (set by /Users/tweeeety/.rbenv/version)
補足
rbenvをinstall後に、~/.bash_profileなどに以下を追加する必要があります
追加後にsource ~/.bash_profile
するのをお忘れなく
export PATH="$HOME/.rbenv/shims:$PATH" eval "$(rbenv init -)"
2. 文法
変数と定数
ローカル変数
hoge = "hoge"
インスタンス変数
@hoge = "hoge"
クラス変数
class Foo @@hoge = 1 end
グローバル変数
$hoge = 100
定数
HOGE = "hoge"
- ちょいメモ
- 先頭が大文字
- 再代入可能
コメント
単行コメント
# コメント
複数業コメント
=begin ここから コメントや \(^o^)/ =end
記述以降を全てコメント
hoge = "hoge" fuga = "fuga" __END__ これ以降は コメントや \(^o^)/
関数
def メソッド名(arg1, arg2, ...) # 処理 end
- ちょいメモ
- 引数は「参照渡し」
- 到底の意味をもつ関数名の末尾に感嘆符(!と?)を付与する慣例がある
標準出力
puts
puts "hogehoge"
- nilを返す
- 最後改行される
puts "hogehoge"
- nilを返す
- 最後改行されない
p
p "hogehoge"
- 引数の値を返す
- 最後改行さる
3. 演算子とデータ型
演算子
他の言語とほぼ同じです。
あげてくれているサイトがあるので参照だけしておきます。
Ruby 2.5.0 リファレンスマニュアル > 演算子式
三項演算
条件 ? 式1 : 式2
文字列演算
文字列は +
で連結します。
また、*
で繰り返しができます。
連結と代入
というのがあり、これは知らなかったです。
a = "aiu" b = "eo" puts a << b # aiueo puts a # aiueo
データ型
数値
全ての数値オブジェクトはNumericのインスタンス
Numeric 数値の親クラス ├ Integer 整数の親クラス │ ├ Bignum 大きな整数 │ └ Fixnum 整数 └ Float 浮動小数点
文字列
"(ダブルクオート)
か'(シングルクオート)
で囲む。
ダブルクオートで囲った文字列は式(#[式]
)を埋め込める
# 式埋め込み例 hoge = "#[1 + 1]だよ" # print => 2だよ
配列
arr = ["hoge", "fuga", 1, true] p arr puts arr[0]
ハッシュ
member = {"hoge" => 20, "fuga" => 20} puts member["hoge"]
型キャスト
# 文字 -> 数値 num = "1".to_i # 数値 -> 文字 str = 1.to_s
クラス
# class定義 class Hoge def initialize(name, age) @name = name @age = age end def say puts @name + " is " + @age.to_s end # クラスメソッド def self.fuga puts "fuga!!!!" end end # インスタンス化 piyo = Hoge.new("piyo", 20) piyo.say # クラスメソッドの呼び出し Hoge.fuga
モジュール
# module定義 module Mod Version = "1.0.0" def v Version end def say puts "this version is " + Version end def self.fuga puts "fuga!!!!" end # モジュールメソッドとして定義 module_function :v end puts Mod.v puts Mod::fuga # (※1)これは怒られる # puts Mod.say # クラスにインクルード class Cls include Mod end cls = Cls.new puts cls.say # (※2)これは怒られる # puts cls.v
- ちょいメモ
- モジュールメソッドはmodule_functionを使う
- モジュール名.メソッドで呼び出せる
- プライベートメソッドになりインクルードしても呼べない
補足
(※1)これは怒られる
の実行結果
module_sample.rb:25:in
<main>': undefined method
say' for Mod:Module (NoMethodError)
(※2)これは怒られる
の実行結果
module_sample.rb:34:in
<main>': private method
v' called for #<Cls:0x007fa9238f8c38> (NoMethodError)
オブジェクト
Objectクラスは全てのスーパークラス
nil
他の言語のnull
と違い、nil
はオブジェクト
4. 制御分
条件分岐
if文
if 条件式1 then # 処理1 elsif 条件式2 then # 処理2 else # 処理3 end
case文
case オブジェクト when 値1 then # 処理1 when 値2 then # 処理2 when 値3, 値4, 値5 then # 処理3 else # 処理4 end
繰り返し
for
# よくある形 for 変数 in オブジェクト do # 処理 end # 範囲オブジェクト for num in 1..3 do # 処理 end
- ちょいメモ
..
は「範囲オブジェクト」
while
while 条件式 do # 処理 end
each
オブジェクトに対して何らかの処理を繰り返す場合使う
# オブジェクト.each{|変数| # 処理 } # オブジェクト.each do |変数| # 処理 end
loop
loop { # 処理 }
- ちょいメモ
- 抜けるときは
break
timesメソッド
一定の回数処理を繰り返す場合に使う
# オブジェクト.times {|変数| # 処理 } # オブジェクト.times do |変数| # 処理 end # 例 3.times do |i| putsh i # 1,2,3と出力 end
setpメソッド/uptoメソッド/donwtoメソッド
# stepメソッド オブジェクト.step(limit, stepno) {|変数| # 処理 } # 例 1.step(5, 2) {|i| puths i # 1,3,5と出力 } # uptoメソッド オブジェクト.upto(max) {|変数| # 処理 } # 例 2.upto(4) { |i| puth i # 2,3,4 と出力 } # donwtoメソッド オブジェクト.downto(min) {|変数| # 処理 } # それぞれ`do |変数| 〜 end`の記述も可能
例外
# エラーの捕捉 begin # エラーが発生する可能性のある処理 rescue # エラーが発生した場合の処理 else # エラーが発生しない場合 ensure # 必ず行う処理 end # エラーの発生 raise "error" # RuntimeError
ブロック
ブロックとは
関数やメソッドの呼び出しの際に引数と一緒に渡す処理のかたまり
以下の"do"から"end"まで
がブロック
[0,1,2].each do |i| puts i + 1 end
blockとyield
# def block_func(v) puts v # yieldを使うと関数内でブロックを実行可能 # ブロックを受け取っていないと例外のため # block_given?とセットで使う yield if block_given? end # 呼び出し時二ブロックを渡す block_func("hoge") do puts "fuga" end
5. 組み込みオブジェクト
組み込みオブジェクトには以下のようなものがある
- Numeric
- 数値を扱う基本クラス
- 数値処理のメソッドや演算子が実装されている
- String
- 文字列を扱うクラス
- 文字列操作のメソッドや演算子が実装されている
- Comparable
- 比較演算を許可するMix-in
- NumericやStringも比較演算のためにインクルードしている
- Regexp
- 正規表現を扱うクラス
- リテラルは
/(スラッシュ)
===
、=~
でパターンマッチ- Time
- OS管理の時刻情報を扱うクラス
- File
- システム上のファイルを扱うクラス
- IOクラスを継承している
- Dir
- ディレクトリ操作のためのクラス
- Enumerable
- オブジェクトの集まりを表現するMix-in
- Struct
- 構造体を扱うためのクラス
その他
気になったコードだけ書いておいた、という自分用メモ https://github.com/tweeeety/book-ruby-sample
おわり
売り上げランキング: 3,272
自分のように、基本は他の言語だけどたまーに読み書きする程度で
ちゃんと勉強までしたことなかった、という人には
かなりすっきりさっくり読めてコンパクトなのでオススメです!\(^o^)/