[[pagelist(^RubyLanguage)]]
[[TableOfContents]]

= 연산자 =
== 연산자 우선순위 ==
 * 우선순위가 높은 것이 위
 * 아래에 있는 연산자는 method 로 정의되어 있으며 재정의가 가능하다.
|| 연산자 || 설명 ||
|| [] []= || 요소 참조, 요소 설정 ||
|| ** || 누승 (2**3 = 8) ||
|| ! ~ + - || 단항연산자 (역논리, bit NOT, unary plus, unary minus) ||
|| * / & || 곱셈, 나눗셈, 나머지 ||
|| >> << || shift ||
|| & || bit AND ||
|| ^ | || bit XOR, bit OR ||
|| <= < > >= || 비교 연산자 ||
|| <=> == === != || 동등 비교 ||

 * method 로 정의되지 않은 연산자
|| =~ !~ || 패턴 매칭 ||
|| && || 논리곱 ||
|| |&#xfffc;| || 논리합 ||
|| .. ... || 범위 ||
|| ? : || 삼항 연산자 ||
|| = %= ~= /= -= += |= &= >>= <<= *= &&= |&#xfffc;|= **= || 대입 연산자 ||
|| defined || 심벌이 정의되었는지 검사 ||
|| Not || 역논리 ||
|| or and || 논리 구성 ||
|| if unless while until || 표현식 제한자 ||
|| begin end || 블록 표현식 ||
 * '++' '--" 연산자는 존재하지 않음

== 연산자 재정의 ==
 * 숫자 '+' 연산자를 곱셈 기능을 하는 것으로 바꿔버리기
{{{
class Fixnum
  def +(other)
    return self * other
  end
end
}}}

= 대입문 =
 * 한꺼번에 변수 여러개 대입하기
{{{
a, b = 1, 2
# a -> 1, b -> 2
}}}
 * swap 구현
{{{
a, b = b, a
}}}
 * 좌변값과 우변값 개수가 다른 경우
  * 좌변값이 하나라면, 그 값은 우변값이 모두 들어간 배열이 된다.
  * 좌변값이 둘 이상이라면, 우변값과 대응되지 못한 좌변값은 nil(없는 값)이 된다.
  * 좌변값의 맨 마지막 변수 앞에 *을 붙이면 남은 우변값이 배열로 들어간다.
{{{
a, b = 1, 2, 3
# a -> 1, b -> 2

a, b, c = 1, 2
# a -> 1, b -> 2, c -> nil

a = 1, 2, 3
# a -> [1, 2, 3] (array)

a, *b = 1, 2, 3
# a -> 1, b -> [2, 3] (array)
}}}


= 조건문 =
== 조건 연산자 ==
 * and (=> &&), or (=> ||), not (!)
  * 기호로 쓰인 것(&&, ||, !)이 단어로 쓰인 것(and, or, not)보다 우선순위가 높음
 * defined? 연산자: 매개변수가 정의된 경우 그에 대한 설명을 문자열로 반환하고, 정의되지 않은 경우 nil을 반환
{{{
defined? 1
 -> "expression"
defined? dummy
 -> nil
defined? printf
 -> "method"
defined? $_
 -> "global variable"
defined? a = 1
 -> "assignment"
}}}

== 비교 연산자 ==
 * ==: 두 값이 같은지 비교
 * ===: case 항목의 when이 비교할 대상과 동일한지
= 반복문 =