Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby:プログラム内で出てくる記号の意味(<、::、&、@、$、**、<<-)

Rubyで書かれたプログラムを見た時に、記号の意味が良くわからないなぁと思うことがあったので、整理してみました(._.)!

記号一覧

<:継承

<は「大なり小なり」で使われるイメージが強いですがRubyではClassの継承にも使われます。

class Hoge
  def hello
    puts 'hello'
  end
end

# Hogeを継承したクラス
class Fuga < Hoge
  def bye
    puts 'good bye'
  end
end

# Hogeを継承しているため、helloメソッドが呼び出せる
puts Fuga.new.hello

:::定数の参照、クラス内クラスの参照

::は、ModuleやClassに定義された定数・Classの呼び出しを意味します。

class Hoge
  # 定数
  CONST_STRING = "定数"
  # Class内に定義されたClass
  class Piyo
    def bye
      'good bye!!'
    end
  end
end

# Module内に定数を定義
module Fuga
  FOO = 'Foo'
  BAR = 'BAR'
end

# Class内に定義した定数の呼び出し
puts Hoge::CONST_STRING
# Class内に定義したClassの呼び出し
puts Hoge::Piyo.new.bye
# Moduke内で定義した定数の呼び出し
puts Fuga::FOO

&:&演算子、ぼっち演算子

&&&としてif文等の中でAND演算子として使われることが多いですが、&演算子と呼ばれる:&の形式や、ぼっち演算子と呼ばれる.&の形式で使わることもあります。

# === &演算子 ===
num = [0, 1, 2]
# 下記は、num.map{ |n| n.to_s }と同じ
p num.map(&:to_s)

# === ぼっち演算子 ===
hoge = nil
# NoMethodError
p hoge.fuga
# 存在しないmメソッドの場合nilが返却される
p hoge&.fuga

@:インスタンス変数、クラス変数

Class内で使用される@付き変数は、インスタンス変数を表します。また@@付きの変数はクラス変数を表します。

class Hoge
  @@piyo = "piyo"
  def initialize(str)
    @var = str
  end
  def piyo
    @@piyo
  end
  def var
    @var
  end
end

#<Hoge:0x000055e6bbff9a40 @var="hoge">
p hoge = Hoge.new("hoge")
#<Hoge:0x000055e6bbff9888 @var="fuga">
p fuga = Hoge.new("fuga")
# 下記からは、両方"piyo"が返却される※クラス変数で定義された値はインスタンス間で共有される
p hoge.piyo
p fuga.piyo

$:グローバル変数

$が付与された変数がグローバル変数となり、実行中のプログラムのどこでも参照可能な変数となります。

$var = "global_var"

class Hoge
  def self.global_var
    # こんなところでも参照できます。
    $var
  end
end

# "global_var"
p Hoge.global_var

** : 累乗

**演算子として使うと累乗を取得することが出来ます。

# 3の3乗である27が返却される
p 3 ** 3

<<-:ヒアドキュメント

<<-で定義された文字列は、ヒアドキュメントと呼ばれる複数行の文字列を扱うことが出来るものです。

hoge = <<-EOF
複数行の
文字列を
扱えます
EOF

# "複数行の\n文字列を\n扱えます\n"
p hoge

参考

docs.ruby-lang.org

以上です、また何か気づいたら追記しようと思いますφ(..)