ruby基礎⑤メゾットのアクセス権、モジュール、ミックスイン、例外
ドットインストールのrubyの基礎が完了しました!!
また特定の障害を持った人が相談できる相談掲示板を作成中ですが、
bootstrapによるレイアウトを組みました。
無料でbootstrapのレイアウトを組めるツールがありました。めちゃ使えます!
HTMLも生成できて、貼り付けるだけです。
https://www.layoutit.com/
#----------------------------------------------------------------- # メゾットのアクセス権 # public # protected :クラス内、同一パッケージ、サブクラス(子クラス)からアクセス可 # private :レシーバをしていできないメゾットになる # initializeメゾットとクラスの外に書いたメゾットは自動的にprivateになる class User def sayHi puts "hi!" sayPrivate #クラスの中であればプライベートメゾットを呼び出せる # self.sayPrivate #selfはインスタンスなので使用できない。 end private def sayPrivate puts "private" end end # User.new.sayPrivate #レシーバを指定できないメゾットなので、こればできない User.new.sayHi => hi! private class AdminUser < User def sayHello puts "Hello!" sayPrivate end end AdminUser.new.sayHello #privateメゾットも継承されている => Hello! private #AdminUserクラスでsayPrivateのオーバーライドも可能 #----------------------------------------------------------------- #モジュールに関して #クラスのようにメゾットや定数をまとめらる #インスタンスを生成したり、継承ができない #名前空間に関して 下記のようなメゾットを作ると、他のメゾット名と衝突する可能性がある # そんな時にモジュールを作る def movie_encode end def movie_export end module Movie #大文字で始まる VERSION = 1.1 def self.encode puts "encoding..." end def self.export puts "exporting..." end end Movie.encode Movie.export p Movie::VERSION => encoding... exporting... 1.1 #関連する定数やメゾットをグループ化する時に使用できる。 #----------------------------------------------------------------- #ミックスイン(モジュール) #以下の二つのクラスは継承関係はなく、どちらのクラスにもデバックに関するメゾットを追加したい場合 module Debug def info puts "#{self.class}debug info......" end end class Player include Debug #これでDebug moduleのinfoを使用できるようになった。(ミックスイン) end class Monster include Debug end Player.new.info Monster.new.info => Playerdebug info...... Monsterdebug info...... #----------------------------------------------------------------- #例外 x = gets.to_i p 100 / x 0を入力するとエラーになる 下記のようにして0を入力すると x = gets.to_i begin p 100 / x rescue => ex p ex.message p ex.class puts "stopped!" ensure puts "-- END --" end 入力値0 => "divided by 0" ZeroDivisionError stopped! -- END -- #rubyの持つ例外クラスも使用できる class MyError < StandardError; end x = gets.to_i begin if x == 3 raise MyError end p 100 / x rescue MyError puts "not 3!" rescue => ex p ex.message p ex.class puts "stopped!" ensure puts "-- END --" end 入力値 3 => 3 not 3! -- END --