Ruby勉強

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

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 "…

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

# foo.rb hoge = true fuga = true if hoge puts 1 elsif fuga puts 3 else puts 2 end $ ruby foo.rb 1 hoge = false a = if false 1 else 2 end puts a #=> 2 unlessは偽のときに評価され、elsifは置けない。 rubyにおいて、偽とは、false, nilのときのみ …

Ruby演算子 - Silver/Gold試験対策

# ★は再定義可能な演算子(つまりメソッド) 高い :: ★ [] ★ +(単項) ! ~ ★ ** ★ -(単項) ★ * / % ★ + - ★ << >> ★ & ★ | ^ ★ > >= < <= ★ <=> == === != =~ !~ && || .. ... ?:(条件演算子) =(+=, -= ... ) not 低い and or a && b || c #=> (a && b) || c a …

Rubyインスタンス変数 - Silver/Gold試験対策

クラスのインスタンス上で定義できる変数。 インスタンスメソッド内から参照できる。 class A def initialize @a = 0 end def setter(num) @a += num end def getter @a end end a = A.new p a.getter #=> 0 a.setter(2) a.setter(2) p a.getter #=> 4 gette…

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

クラスインスタンス変数は、 クラス直下で定義する。クラス内参照・代入はできるが、 サブクラスからは参照できない。 class A @a = 1 def self.hoge p @a end end A.hoge #=> 1。クラスメソッドからは参照できる class B @b = 1 def hoge p @b end end b = …

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

クラス変数は、クラス内だとどこでも参照できて、 継承したクラスでも参照・代入ができる。 class A @@a = 0 puts @@a end #=> 0 A.class_variable_get(:@@a) #=> 0, クラス変数を参照するゲッターメソッド class B @@b = 0 def hoge puts @@b end end B.new…

Ruby変数のスコープ - Silver/Gold試験対策

定数は大文字で始まる。 定数だけに変更は原則できない(代入はできるが警告が出る)。 GreatCar = "TOYOTA" p ::GreatCar #=> "TOYOTA" p Object::GreatCar class Germany GreatCar = "VolksWagen" end p ::Germany::GreatCar #=> "VolksWagen" p Germany::Gr…

Rubyコメント - Silver/Gold試験対策

# コメント1 # コメント2 =begin ここはコメントだよ、=beginと、=endは行頭であることが必要だ。 =end

Ruby組み込み変数 - Silver/Gold試験対策

`$'が頭につけば、通常はグローバル変数。 その中でも特殊変数と呼ばれているものは組み込み定数 Kernel配下の特集変数がそれにあたる グローバル変数と銘打っていても、特殊変数は、 グローバルに値を共有するとは限らない $! 例外を記録する変数 begin hog…

Ruby擬似変数 - Silver/Gold試験対策

見た目変数なのに(小文字)、もしくは定数なのに(警告は出るが無理矢理値は導入できる)、値を代入できないもの。 self true false nil __FILE__ # 実行中ファイル名 __LINE__ # 実行中行番号 __ENCODING__ # 現在のソースのエンコード名 __dir__ # 実行ファイ…

Ruby組み込み定数

組み込み定数は、 STDINでいうなら、正式には Object::STDINという名前空間が定義済みということ STDIN 標準入力である。 IOオブジェクト。getsメソッドをとったりできる IOオブジェクトを検証。getsがprivate_methodだったので sendした ruby -e 'p IO.__se…

Rubyのコマンドラインオプション

MacのTerminalでシェル(bash)実行 -C 指定したディレクトリでスクリプトを実行 # hoge.rb puts("あなたの名前は何ですか?") $ ruby -C ~/Documents/test/ hoge.rb -e Rubyのスクリプトを実行する $ ruby -e 'puts "Hello, Ruby!"' #=> Hello, Ruby! 複数の…