LoginSignup
1
1

More than 1 year has passed since last update.

「たのしいRuby」オブジェクトと変数・定数

Last updated at Posted at 2022-12-07

Rubyの本、買ってきた。たのしいRuby、勉強しながらtwitterに投稿した文を加筆訂正してQiitaに投稿する。「たのしいRuby」の続き。
Twitter、Green_helmet@bethlehem4099
Qiita、@dosaidon

参考文献

この記事は以下の情報を参考にして執筆しました。
-たのしいRuby、高橋征義、後藤裕蔵著、 まつもとゆきひろ監修、SBクリエイティブ株式会社、第6版2019年
-『たのしいRuby 第6版』サポートページ、ソースコード

オブジェクトとクラス

「クラスはオブジェクトの種類を表すものです。」うーん?
「クラスはメソッド(メンバ関数)と変数などをまとめたものです。」では?
例えば、

simple_class.rb
# 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はデフォルトでは外部から変更も取り出すことも出来ない。

command_line
~ % 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ではエラーにならないが?

➜ ruby const.rb
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日

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1