U E D R , A S I H C RSS

Ruby Language/Expression


1. μ—°μ‚°μž

1.1. μ—°μ‚°μž μš°μ„ μˆœμœ„

  • μš°μ„ μˆœμœ„κ°€ 높은 것이 μœ„
  • μ•„λž˜μ— μžˆλŠ” μ—°μ‚°μžλŠ” method 둜 μ •μ˜λ˜μ–΄ 있으며 μž¬μ •μ˜κ°€ κ°€λŠ₯ν•˜λ‹€.
μ—°μ‚°μž μ„λͺ…
[] []= μš”μ†Œ μ°Έμ‘°, μš”μ†Œ μ„μ •
** λˆ„μŠΉ (2**3 = 8)
! ~ + - λ‹¨ν•­μ—°μ‚°μž (역논리, bit NOT, unary plus, unary minus)
* / & κ³±μ…ˆ, λ‚˜λˆ—μ…ˆ, λ‚˜λ¨Έμ§€
>> << shift
& bit AND
^ | bit XOR, bit OR
<= < > >= 비ꡐ μ—°μ‚°μž
<=> == === != 동등 비ꡐ

  • method 둜 μ •μ˜λ˜μ§€ μ•Šμ€ μ—°μ‚°μž
=~ !~ νŒ¨ν„΄ 맀칭
&& 논리곱
|| 논리합
.. ... λ²”μœ„
? : μ‚Όν•­ μ—°μ‚°μž
= %= ~= /= -= += |= &= >>= <<= *= &&= ||= **= λŒ€μž… μ—°μ‚°μž
defined μ‹¬λ²Œμ΄ μ •μ˜λ˜μ—ˆλŠ”μ§€ 검사
Not 역논리
or and 논리 ꡬ성
if unless while until ν‘œν˜„μ‹ μ œν•œμž
begin end 블둝 ν‘œν˜„μ‹
  • '++' '--" μ—°μ‚°μžλŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ

1.2. μ—°μ‚°μž μž¬μ •μ˜

  • 숫자 '+' μ—°μ‚°μžλΌ κ³±μ…ˆ κΈ°λŠ₯을 ν•˜λŠ” κ²ƒμœΌλ‘œ 바꿔버리기

class Fixnum
  def +(other)
    return self * other
  end
end
  • + μ—°μ‚°μžλŠ” λ‚΄λΆ€μ μœΌλ‘œλ„ 자주 쓰이기 λ•Œλ¬Έμ—, λ°”κΏ”λ²„λ¦¬λŠ” 경우 인터프리터가 맛이 갈 수 있음

2. λŒ€μž…λ¬Έ

  • ν•œκΊΌλ²ˆμ— λ³€μˆ˜ μ—¬λŸ¬κ°œ λŒ€μž…ν•˜κΈ°

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)


3. 쑰건문

3.1. 쑰건 μ—°μ‚°μž

  • and (=> &&), or (=> ||), not (!οΏΌ)
    • 기호둜 쓰인 것(&&, ||, !)이 λ‹¨μ–΄λ‘œ 쓰인 것(and, or, not)보닀 μš°μ„ μˆœμœ„κ°€ λ†’μŒ
  • defined? μ—°μ‚°μž: λ§€κ°œλ³€μˆ˜κ°€ μ •μ˜λœ 경우 그에 λŒ€ν•œ μ„λͺ…을 λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•˜κ³ , μ •μ˜λ˜μ§€ μ•Šμ€ 경우 nil을 λ°˜ν™˜

defined? 1
 -> "expression"
defined? dummy
 -> nil
defined? printf
 -> "method"
defined? $_
 -> "global variable"
defined? a = 1
 -> "assignment"

3.2. 비ꡐ μ—°μ‚°μž

  • ==: 두 값이 같은지 비ꡐ
  • ===: case ν•­λͺ©μ˜ when이 비ꡐ할 λŒ€μƒκ³Ό λ™μΌν•œμ§€ 비ꡐ
  • <=>: μ™Όμͺ½ < 였λ₯Έμͺ½: -1, μ™Όμͺ½ = 였λ₯Έμͺ½: 0, μ™Όμͺ½ > 였λ₯Έμͺ½: 1
  • <, <=, >=, >: 일반적인 비ꡐ μ—°μ‚°μž
  • =~: μ •κ·œν‘œν˜„μ‹ νŒ¨ν„΄μ΄ λ§€μΉ­λ˜λŠ”μ§€ 검사
  • eql?: μ„œλ‘œ 같은 값을 가지고 νƒ€μž…λ„ κ°™μ•„μ•Ό true
  • equal?: 같은 object IDλΌ κ°€μ§€κ³  있으면 true

3.3. if

  • ifλŠ” ꡬ문이 μ•„λ‹ˆλΌ ν‘œν˜„μ‹ (μ‹€ν–‰λœ λΆ€λΆ„μ˜ λ§ˆμ§€λ§‰ μ‹μ˜ 값을 λ°˜ν™˜κ°’μœΌλ‘œ 가짐)

if song.artist == "Gillespie" then
  handle = "Dizzy"
elsif song.artist == "Parker" then
  handle = "Bird
else
  handle = "unknown"
end
  • μ‹€ν–‰λ˜λŠ” λ¬Έμž₯의 μ„이 λΆ„λ¦¬λ˜μ–΄ 있으면 then μƒλž΅ κ°€λŠ₯
  • then은 콜둠(:)으둜 λŒ€μ²΄ κ°€λŠ₯
  • unless: if의 λΆ€μ •ν˜•. if not으둜 λŒ€μ²΄ κ°€λŠ₯

  • μˆ˜μ‹μžλ‘œ μ‚¬μš©: 쑰건이 참일 λ•Œλ§Œ 식을 μˆ˜ν–‰

print if a == 10

3.4. case

  • caseλŠ” ꡬ문이 μ•„λ‹ˆλΌ ν‘œν˜„μ‹ (μ‹€ν–‰λœ λΆ€λΆ„μ˜ λ§ˆμ§€λ§‰ μ‹μ˜ 값을 λ°˜ν™˜κ°’μœΌλ‘œ 가짐)

kind = case year
  when 1850..1889 then "Blues"
  when 1890..1909 then "Ragtime"
  when 1910..1929 then "New Orleans Jazz"
  when 1930..1939 then "Swing"
  when 1940..1950 then "Bebop"
  else "Jazz"
end
leap = case
  when year % 400 == 0 then true
  when year % 100 == 0 then false
  else year % 4 == 0
end
  • λ³„λ„μ˜ break 문은 ν•„μš” μ—†μŒ

4. 반볡문

4.1. while

  • while은 ν‘œν˜„μ‹μœΌλ‘œ nil을 λ°˜ν™˜

a = b = 0
while a <= 10
  b += a
end
# b -> 55
  • while도 μˆ˜μ‹μžλ‘œ μ“Έ 수 있음: μˆ˜μ‹λœ 식을 주어진 쑰건이 참인 λ™μ•ˆ 반볡

a = 0
print a += 1 while a < 10

4.2. until

  • whileκ³Ό 달리 쑰건식이 거짓일 λ•Œλ§Œ 반볡

a = 0
print a += 1 until a == 10

4.3. for

  • λ°°μ—΄μ΄λ‚˜ λ²”μœ„μ˜ μš”μ†ŒλΌ ν•˜λ‚˜μ”© μ‹€ν–‰ (λ‹€λ₯Έ μ–Έμ–΄μ˜ foreach)
  • μš”μ†Œλ‘œ 쓰인 λ°°μ—΄μ΄λ‚˜ λ²”μœ„λΌ λ°˜ν™˜

for i in 1..10 do
  print i
end
  • μœ„ μ½”λ“œλŠ” λ‚΄λΆ€μ μœΌλ‘œ μ•„λž˜ μ½”λ“œλ‘œ λ³€ν™˜ν•¨

(1..10).each do |i|
  print i
end

4.4. 반볡자

4.4.1. loop

  • λ¬΄ν•œλ£¨ν”„. νƒˆμΆœμ‹μ΄ λ°˜λ“œμ‹œ ν•„μš”

loop do
  puts "hello"
end

4.4.2. times

  • Integer class의 method. Integerκ°€ λ‚˜νƒ€λ‚΄λŠ” 횟수만큼 반볡

5.times {puts "hello"}
  • timesλŠ” 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” λ‚΄λΆ€ μΉ΄μš΄ν„°λΌ λ‘κ³  있음

5.times {|i| puts i}

4.4.3. upto, downto

  • νŠΉμ • μœ„μΉ˜μ—μ„œ μ‹œμž‘ν•΄μ„œ 1μ”© 증가/κ°μ†Œ ν•˜μ—¬ 정해진 μˆ«μžκΉŒμ§€(정해진 숫자 포함)

5.downto(1) do |i| puts i end

4.5. νƒˆμΆœ ꡬ문

  • break: 반볡 κ΅¬μ‘°λΌ λΉ μ Έλ‚˜κ°
  • next: ν˜„μž¬μ˜ 남은 반볡 κ΅¬μ‘°λΌ νŒ¨μŠ€ν•˜κ³  λ‹€μŒ λ°˜λ³΅μ„ μˆ˜ν–‰ν•¨
  • redo: ν˜„μž¬μ˜ 남은 반볡 κ΅¬μ‘°λΌ λ‹€μ‹œ μˆ˜ν–‰ν•¨ (쑰건을 κ²€μ‚¬ν•˜μ§€ μ•ŠμŒ)
  • retry: 맨 μ²˜μŒλΆ€ν„° λ°˜λ³΅μ„ λ‹€μ‹œ μ‹œμž‘ν•¨

  • νƒˆμΆœ ꡬ문은 if μˆ˜μ‹μžλΌ μ‚¬μš©ν•˜λŠ” 것이 κ°„νŽΈν•¨

even = 0
multiple10 = 0
100.times do |i|
  next if i%2 != 0
  even += 1
  next if i%10 != 0
  multiple10 += 1
end
# even -> 50, multiple10 -> 10
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:27:56
Processing time 0.0358 sec