Rubyの本、買ってきた。たのしいRuby、勉強しながらtwitterに投稿した文を加筆訂正してQiitaに投稿する。「たのしいRuby」の続き。
Twitter、Green_helmet@bethlehem4099
Qiita、@dosaidon
参考文献
この記事は以下の情報を参考にして執筆しました。
-たのしいRuby、高橋征義、後藤裕蔵著、 まつもとゆきひろ監修、SBクリエイティブ株式会社、第6版2019年
-『たのしいRuby 第6版』サポートページ、ソースコード
オブジェクトとクラス
「クラスはオブジェクトの種類を表すものです。」うーん?
「クラスはメソッド(メンバ関数)と変数などをまとめたものです。」では?
例えば、
# simple_class.rb
class SimpleClass #クラスSimpleClass始まり
def initialize(a) #initializeメソッド、初期値aを与える。別名コンストラクタ
@x = a #変数@x、@で始まる変数はクラスの中なら自由に使える
end #initializeメソッド終わり
def q #qメソッドを定義する
p @x #変数@xを印刷する
end #qメソッド終わり
end #クラスSimpleClass終わり
y0=SimpleClass.new(10)#オブジェクト(インスタンス)y0を新しく作る
y0.q #オブジェクトy0のメソッドqを実行する
y1=SimpleClass.new(100.0)#オブジェクト(インスタンス)y1を新しく作る
y1.q #オブジェクトy1のメソッドqを実行する
y2=SimpleClass.new('猫が鳴く、にゃー')#オブジェクト(インスタンス)y2を新しく作る
y2.q #オブジェクトy2のメソッドqを実行する
自分の思うオブジェクト指向というのはこんなやつ。
クラスSimpleClassの中にメソッドinitializeとメソッドq、変数@xがまとまっている。
そしてポリモーフィズム、整数も実数も文字列も同じクラスで処理できる。
あと、変数の隠蔽。変数@xはデフォルトでは外部から変更も取り出すことも出来ない。
~ % ruby simple_class.rb
10
100.0
"猫が鳴く、にゃー"
オブジェクトとクラスの対応表
オブジェクト | クラス |
---|---|
数值 | Numeric |
文字列 | String |
配列 | Array |
ハッシュ | Hash |
正規表現 | Regexp |
ファイル | File |
シンボル | Symbol |
つぎ行こう。
Green_helmet@bethlehem4099·7月10日
Rubyの変数
名称 | 規則 |
---|---|
ローカル変数 | 先頭がアルファベットの小文字か「_」で始まる |
グローバル変数 | 先頭が「$」で始まる |
インスタンス変数 | 先頭が「@」で始まる |
クラス変数 | 先頭が「@@」で始まる |
@はpythonのself. か? @@は何だろう?
Green_helmet@bethlehem4099·7月10日
ローカル変数とグローバル変数
変数のスコープはい。
定数:先頭が大文字で始まる
Rubyist const.rb
TEST=1
TEST=2 # エラー
iPhone用のRubyの実行環境Rubyistではエラーにならないが?
const.rb:2: warning: already initialized constant TEST
const.rb:1: warning: previous definition of TEST was here
MacのRubyだと警告だね
Green_helmet@bethlehem4099·7月11日
つぎ予約語
__ENCODING__, __LINE__, __FILE__, BEGIN, END, alias, and, begin,
break, case, class, def, defined?, do, else, elsif, end, ensure,
false, for, if, in, module, next, nil, not, or, redo, rescue,
retry, return, self, super, then, TRUE, undef, unless, until,
when, while, yield
意外に少ない
Green_helmet@bethlehem4099·7月11日
多重代入
# multiple_substitution.rb
a, b, c = 1, 2, 3
puts a, b, c
c, b, a = a, b, c
puts a, b, c
➜ ruby multiple_substitution.rb
1
2
3
3
2
1
これは良いな
C言語だとマクロを組んでも難しいかも
いくつか飛ばしたが、これでオブジェクトと変数・定数はおしまい。どっとはらい。
Green_helmet@bethlehem4099·7月11日