Ruby勉強

インターネットの企画職な人がプログラミングを勉強するブログ

2015-01-01から1年間の記事一覧

Ruby 定数の参照順位 - Silver/Gold試験対策

定数は外側を参照し、その次に継承関係を探索する class C CONST = "c" end class A CONST = "a" class B < C p CONST end end #=> "a" このように明示的に、定数を参照することもできる class C CONST = "c" end class A CONST = "a" class B < C p C::CONS…

Ruby Fiber - Silver/Gold試験対策

概要 Fiberは、ノンプリエンプティブ(nonpreemptive)なタスクスケジューリング方式。 Threadはプリエンプティブ(preemptive)。プリエンプティブとは先制、先取の意味がある。 プリエンプティブである、Threadだと、例外が発生したりすると、勝手にスレッドが…

Ruby rdoc - Silver/Gold試験対策

#= "#="で見出し1 #== "#=="見出し2 #=== "#==="さようなら #- "#-"箇条書き1 #- "#-"箇条書き1 #* "#*"箇条書き別の方法 #* "#*"箇条書き別の方法 #1. "#1."箇条書き数字 #2. "#2." #a. "#a."箇条書きアルファベット小文字 #b. "#b." #A. "#A."箇条書きアル…

Ruby Object Class - Silver/Gold試験対策

全てのクラスのスーパークラス。 オブジェクトの一般的な振舞いを定義する このクラスのメソッドは上書きしたり未定義にしない限り、すべてのオブジェクトで使用することができことができる def hoge puts 1 end 上は以下と等価である class Object private …

Ruby 定数の参照順番 - Silver/Gold試験対策

定数は自クラスを参照し、その後、外側のクラスを参照する class C1 MSG = "msg1" MSG2 = "msg2" class C2 MSG = "C2:msg1" puts MSG #=> C2:msg1 puts MSG2 #=> msg2 end puts MSG #=> msg1 puts MSG2 #=> msg2 end MSG3=1 class A puts MSG3 #=> 1 end

Ruby DATA __END__ - Silver/Gold試験対策

DATAとEND。全て大文字 while DATA.gets puts $_ if $_ =~ /Ruby/ end #=> Ruby the prgoramming language __END__ Java the prgoramming language Ruby the prgoramming language Python the prgoramming language 下記とほぼ同じ DATA.each do |str| puts …

Ruby ライブラリ StringIO - Silver/Gold試験対策

require 'stringio' stringioの使い所がわからなかった。 http://itpro.nikkeibp.co.jp/article/COLUMN/20060314/232389/ まつもとゆきひろさんによると、 ログ出力のケースが挙げられている。 ファイルに書き込まずに、データベースやメモリ上など 多様な出…

Ruby 値渡し/参照渡し挙動 - Silver/Gold試験対策

a=0 b=a c=b d=c p d #=> 0 a += 1 p d #=> 0 a="hoge" b=a c=b d=c p d #=> "hoge" a.capitalize! p d #=> "Hoge" =end a="hoge" e="fuga" b=a c=b d=c a=e p d #=> "hoge" p a #=> "fuga"

Ruby Time - Silver/Gold試験対策

現在時刻 Time.now #=> 例: 2015-09-10 07:31:38 +0900 Time.new #=> 例: 2015-09-10 07:31:38 +0900 指定した時間オブジェクトを返す。 Timeオブジェクトもしくは数値で指定。 数値はUnix起点時間である1970/1/1からの経過秒数 Time.at(1441000000) #=> 201…

Ruby method_missing - Silver/Gold試験対策

No Method Error class Fuga def hoge puts "hogeだよ!" end end fuga = Fuga.new fuga.foo # No Method Error BasicObject Classに定義されている、method_missingではNoMethodError時に実行することを記載できる class Fuga def hoge puts "hogeだよ!" e…

Ruby Refinements - Silver/Gold試験対策

class String def hello self + "hello" end end オープンクラスでのメソッド定義は影響が大きすぎるため、 範囲を限定する為に、refinements を利用可能 ・ファイル内限定 ・usingはトップレベル、クラス、モジュール直下限定 ・メソッド内利用不可 class B…

Ruby 同じ意味のメソッド - Silver/Gold試験対策

findとdetectは同じ a = [1, 5, 8, 15, 22, 23, 14] p a.find {|i| i % 7 == 0 } #=> 14 b = [1, 3] p b.find {|i| i % 7 == 0 } #=> nils c = Proc.new { "7で割り切れる数は要素はありませんでした" } p b.detect(c){|i| i % 7 == 0 } #=> "7で割り切れる…

Ruby Kernelモジュール#1 - Silver/Gold試験対策

Kernelはモジュール Objectクラスのメソッド定義は実際はKernelモジュールが行なってインクルードしている #変換 String(1) #=> "1" Complex(1,2) #=> 1 + 2i Hash(key: :value) #=> {:key => :value} Float(1) #=> 1.0 Float("1") #=> 1.0 Rational(2, 3) #…

Ruby破壊的メソッド - Silver/Gold試験対策

破壊的メソッドのメソッド名には!がついているだけとは限らない リンク リンク !がつかなくても破壊的メソッドがある # Arrayの破壊的メソッドを引き続き覚えれば良い # 破壊的 # String#insert s = "string" s.insert(0, "long-") p s #=> "long-string" # …

Rubyモジュール_prepend - Silver/Gold試験対策

prepend と includeの違い # prependで読み込まれたモジュールメソッドのほうが先に呼び出される module IncludeModule def embeded_method :from_include_module end end module PrependModule def embeded_method :from_prepend_module end end class Prep…

Rubyモジュール - Silver/Gold試験対策

# モジュールと、クラスへのインクルード module A def fuga puts("Hello, Bob. My name is #{self.class}") end end class Alice include A def fuga super puts "Nice to Meet you" end end Alice.new.fuga #=>Hello, Bob. My name is Alice Nice to Meet …

Ruby特異クラス/特異メソッド - Silver/Gold試験対策

初期化をせずとも、クラスから直接メソッドを実行できる、クラスメソッド 初期化したクラスに、改めてメソッドを付けたりもできる、特異メソッド。 両者とも、特異メソッドの一形態。 class A class << self def hoge :hoge end end end p A.hoge #=> :hoge …

Rubyメソッド定義 - Silver/Gold試験対策

# メソッドの定義方法 class Klass_A def hoge p :hoge end end Klass_A.new.hoge # メソッドの定義方法 Klass_B = Class.new do def hoge p :hoge end end Klass_B.new.hoge # メソッドの定義方法 class Klass_C define_method(:hoge,Proc.new { p :hoge })…

Rubyクラスメソッド - Silver/Gold試験対策

# クラスメソッドの定義。実行時、初期化が要らない class Hoge def self.fuga :fuga end end p Hoge.fuga #=> :fuga # selfの正体を出力 class Hoge def (p(self)).fuga :fuga end end #=> Hoge Hoge # クラスメソッドの定義 class Hoge def Hoge.fuga :fug…

Rubyクラス変数 - Silver/Gold試験対策

# クラスインスタンス変数 class Hoge @a = :a def self.a @a end end puts Hoge.a #=> :a class Hoge @a = :a @@b = :b def fuga p self.class.instance_variable_get(:@a) p @@b end end Hoge.new.fuga # :a \n :b

Rubyクラス定義 - Silver/Gold試験対策

p Class.ancestors #=> [Class, Module, Object, Kernel, BasicObject] p Class.instance_methods(false) #=> [:allocate, :new, :superclass] # クラス名 FirstClass = Class.new # 無名クラス klass = Class.new # クラス名 NamedClass = klass klass.name…

Rubyブロック#3 - Silver/Gold試験対策

rubyのブロックはクロージャである ブロック外の変数nを参照したり代入できる。(defメソッドなどではできない) n = 10 100.times{ n += 10 } puts n カリー化。引数を最初から耳揃えて渡さなくても良いことになる。 bar = ->(fuga, hoge){hoge+fuga}.curry p…

Rubyブロック#2 - Silver/Gold試験対策

def hoge(a, b, &fuga) fuga.call(a*b) end hoge(2, 3) {|arg| puts "a,bを掛け算して#{arg}でした" } def bar(a, b) puts yield(a*b) end hoge(2, 3) {|arg| puts "a,bを掛け算して#{arg}でした" } procオブジェクトの実行には & + callでも yieldでもどち…

Rubyブロック#1 - Silver/Gold試験対策

まずはメソッドから メソッドの計算結果は代入できるものの、 メソッド式を丸ごと代入できない Object#methodによって、メソッドを変数に代入できる。 def hoge p 1 end a = method(:hoge) a.call #=> 1 a.() #=> 1 a[] #=> 1 def fuga(num) p num end b = m…

Ruby例外#2 - Silver/Gold試験対策

Kernelモジュールにraiseメソッドがあり、エラーを発生させることができる raise ZeroDivisionError #=> ZeroDivisionError # エラークラスを指定しない場合はRuntimeError begin raise rescue => e p e end #=> RunTimeError raise ZeroDivisionError, "0で…

Ruby例外#1 - Silver/Gold試験対策

すべてのエラークラスのヒエラルキー。 StandardErrorとそれシステム系のエラークラス分類を覚えておく SystemCallErrorが、StandardErrorの下にあったり、 プログラムバグとしては頻発するであろう、NameError-NoMethodErrorが、 StandardErrorの配下にもか…

Rubyループ(繰り返し)#3 - Silver/Gold試験対策

redoとnextの出力の違いを確認 redo ary = ("a".."d").to_a v = 0 ary.each do |str| v += 1 if v == 3 redo end print("#{v}: #{str}") unless str == ary.last print(", ") end end #=> 1: a, 2: b, 4: c, 5: d next ary = ("a".."d").to_a m = 0 ary.each…

Rubyループ(繰り返し)#2 - Silver/Gold試験対策

whileとuntil a = 0 while a < 10 puts "#{a += 1}回目の実行中" end puts "while終了しました" until a >= 20 puts "#{a += 1}回目の実行中" end puts "until終了しました" for for i in [1,2,3,4] puts i end break while true break # 中断して脱出 puts …

Rubyループ(繰り返し)#1 - Silver/Gold試験対策

;ループとスコープ。 for文は独自のスコープを持たない for i in [1,2,3] do num = i end puts i #=> 3 [1,2,3].each do |i| num = i end puts num #=>undefined local variable or method `num': NameError 100.times do |i| i end p i #=>undefined local …

Ruby条件分岐case - Silver/Gold試験対策

case式は whenのオブジェクト === caseのオブジェクト という形式で真偽判定される。 したがって、whenのオブジェクトによって振る舞いが異なる klass = String pr = ->(s){ s } range = 1..5 r = /^\d+$/ case "12345" when r # 正規表現とのマッチ puts "…