MoinMoin   ÇÁ·Î±×·¡¹Ö ·çºñ UserPreferences
 
Help Info Print View Search Diffs Edit
 À妽º   µµ¿ò¸»   Ã£±â   ´ë¹®   ºí·Î±×   ¹Ù²ï±Û 

  1. ÇÁ·Î±×·¡¹Ö ·çºñ (Pick-Axe: Programming Ruby) 2ÆÇ
    1. 1ºÎ ·çºñ ±âº» ´ÙÁö±â
      1. 1Àå ·çºñ ½ÃÀÛÇϱâ
        1. ÇѱÛ
        2. ¿µ¹®
        3. ÀÌ Ã¥ÀÇ ÄÚµå
        4. ·çºñ ¹®¼­È­ µµ±¸
      2. 2Àå Ruby.new
        1. ¹¹µçÁö °´Ã¼
        2. ¸Þ¼­µå
        3. ¹®ÀÚ¿­ ºÎÈ£
        4. À̸§ÀÇ ¾à¼Ó
        5. ¹è¿­
        6. ¹è¿­ Á¢±Ù
        7. ÇØ½Ã
        8. ÇØ½Ã Á¢±Ù
        9. Á¦¾î¹®
        10. ±¸¹® º¯°æÀÚ(statement modifier)
        11. Á¤±ÔÇ¥Çö½Ä(Regular expressions) ³»Àå Áö¿ø
        12. ºí·Ï°ú ¹Ýº¹ÀÚ
        13. yield¹®
        14. I/O
      3. 3Àå Ŭ·¡½º, °´Ã¼, º¯¼ö
        1. Ŭ·¡½º ÀνºÅϽº »ý¼º½Ã
        2. »ó¼Ó
        3. Àб⠰¡´É ¼Ó¼º(property)
        4. ¹Í½ºÀÎ
        5. ¾²±â °¡´É ¼Ó¼º
        6. Ŭ·¡½º º¯¼ö
        7. Ŭ·¡½º ¸Þ¼­µå
        8. ½Ì±ÛÅæ
        9. ´Ù¸¥ »ý¼ºÀÚ
        10. Á¢±Ù Á¦¾î, Á¢±Ù ±ÇÇÑ
        11. º¯¼ö
      4. 4Àå ÄÁÅ×À̳Ê, ºí·Ï, ¹Ýº¹ÀÚ
        1. ¹è¿­(Array)
        2. ÇØ½Ã(Hash)
        3. ÄÚµå ºí·Ï
        4. ¹Ýº¹ÀÚ
        5. ¸Þ¼­µå Çü½ÄÀμö ³Ñ±â±â?
        6. Æ®·£Á§¼Ç
        7. ÄÚµåºí·Ï ³Ñ±â±â?
        8. Proc °´Ã¼
      5. 5Àå Ç¥ÁØ Å¸ÀÔ
        1. ¼ýÀÚ
        2. ¹®ÀÚ¿­
        3. ¹®ÀÚ¿­ ´Ù·ç±â
        4. ¹üÀ§ ½ÃÄö½º
        5. Á¤±Ô Ç¥Çö½Ä
      6. 6Àå ¸Þ¼­µå
        1. ¸Þ¼­µå ¸í·ÉÀÚ !, ?
        2. ¸Þ¼­µåÀÇ ÀÎÀÚ
        3. °¡º¯ ÀÎÀÚ ¸®½ºÆ®
        4. ¸Þ¼­µå¿Í ºí·Ï
        5. ¸Þ¼­µåÀÇ È£Ãâ
        6. ÇØ½Ã·Î ÀÎÀÚ¸¦ ¸ðÀ¸±â
      7. 7Àå Ç¥Çö½Ä
        1. ¿¬»êÀÚ Ç¥Çö½Ä
        2. Ä¿¸Çµå È®Àå
        3. ¿ªµû¿ÈÇ¥ ÀçÁ¤ÀÇÇϱâ
        4. ´ëÀÔ¹®
        5. º´·Ä ´ëÀÔ¹®
        6. Áßø ´ëÀÔ¹®
        7. ³í¸® Ç¥Çö½Ä
        8. ºñ±³ ¿¬»ê
        9. caseÇ¥Çö½Ä
        10. ¹Ýº¹¹®
        11. ¹Ýº¹¹® Á¦¾î
        12. º¯¼ö À¯È¿ ¹üÀ§
      8. 8Àå ¿¹¿Ü ó¸®
        1. Exception Ŭ·¡½º
        2. ¿¹¿Ü ´Ù·ç±â
        3. ½Ã½ºÅÛ¿¡·¯
        4. ¸»²ûÈ÷ Ä¡¿ì±â
        5. ¿¹¿Ü ó¸® ÈÄ Àç½Ãµµ
        6. ¿¹¿Ü ¹ß»ý½Ã۱â
        7. ¿¹¿Ü¿¡ Á¤º¸ Ãß°¡Çϱâ
        8. Catch¿Í Throw
      9. 9Àå ¸ðµâ
        1. ¹Í½ºÀÎ
        2. ¹Ýº¹ÀÚ¿Í Enumerable ¸ðµâ
        3. ¹Í½ºÀÎÀÇ ÀνºÅϽº º¯¼ö
        4. ¸Þ¼­µå À̸§¿¡¼­ ¸ðÈ£ÇÔ ÇØ¼ÒÇϱâ
        5. ´Ù¸¥ ÆÄÀÏ Æ÷ÇÔÇϱâ
      10. 10Àå ±âº» ÀÔÃâ·Â
        1. IO °´Ã¼
        2. ÆÄÀÏ ¿­°í ´Ý±â
        3. Àбâ À§ÇÑ ¹Ýº¹ÀÚ
        4. ÆÄÀÏ¿¡ ¾²±â
        5. ³×Æ®¿öÅ©
      11. 11Àå ½º·¹µå¿Í ÇÁ·Î¼¼½º
        1. ½º·¹µå Áö¿ª º¯¼ö¿¡ Á¢±Ù
        2. ½º·¹µå¿Í ¿¹¿Ü
        3. µ¿±âÈ­
        4. ¸ð´ÏÅÍ
        5. ´ÙÁß ÇÁ·Î¼¼½º ½ÇÇà
        6. µ¶¸³Àû ÀÚ¼Õ
      12. 12Àå ´ÜÀ§ Å×½ºÆ®
      13. 13Àå ¹®Á¦°¡ ¹ß»ýÇßÀ» ¶§
        1. ·çºñ µð¹ö°Å
        2. ´ëÈ­Çü ·çºñ ¼Ð
        3. µ¿ÀÛÇÏÁö ¾Ê´Â´Ù!
        4. º¥Ä¡¸¶Å©
        5. ÇÁ·ÎÆÄÀÏ·¯
    2. 2ºÎ ·çºñ ¼¼ÆÃÇϱâ
        1. 14Àå ·çºñ¿Í ¼¼»ó
        2. 15Àå ´ëÈ­Çü ·çºñ ¼Ð
        3. 16Àå ·çºñ ¹®¼­È­
        4. 17Àå ·çºñÁªÀ» ÀÌ¿ëÇÑ ÆÐŰÁö °ü¸®
      1. 18Àå ·çºñ¿Í À¥
        1. CGI ½ºÅ©¸³Æ® ÀÛ¼ºÇϱâ
        2. cgi.rb »ç¿ëÇϱâ
        3. Äõ¸® ¸Å°³º¯¼ö
        4. HTML »ý¼ºÇϱâ
      2. 19Àå ·çºñ Tk
      3. 20Àå ·çºñ¿Í À©µµ¿ì(Microsoft Windows)
      4. 21Àå ·çºñ È®ÀåÇϱâ
    3. 3ºÎ ·çºñ ¿Ï¼ºÇϱâ
    4. 4ºÎ ºÎ·Ï
    5. (º°Ã¥) 5ºÎ ·çºñ ¶óÀ̺귯¸® ·¹ÆÛ·±½º
    6. (º°Ã¥) 6ºÎ ºÎ·Ï

ÇÁ·Î±×·¡¹Ö ·çºñ (Pick-Axe: Programming Ruby) 2ÆÇ

Ruby 1.8.2 (2004-08-24) Ã¥ Âü À̻ڳ×;

1ºÎ ·çºñ ±âº» ´ÙÁö±â

1Àå ·çºñ ½ÃÀÛÇϱâ

ÇѱÛ
http://myruby.net
http://www.ruby-lang.org/ko
http://forum.rubykr.org

¿µ¹®
http://rpmfind.com
http://rubyinstaller.rubyforge.org
http://ruby-lang.org

ÀÌ Ã¥ÀÇ ÄÚµå
http://pragmaticprogrammer.com/titles/ruby/code

·çºñ ¹®¼­È­ µµ±¸
RDoc, ri
http://www.ruby-doc.org

2Àå Ruby.new

¹¹µçÁö °´Ã¼
¹®ÀÚ¿­ ¹®ÀÚ ¼ýÀÚ º¯¼ö »ó¼ö °¡¸±°Í ¾øÀÌ ÀüºÎ °´Ã¼

¸Þ¼­µå
def 
 ~~ 
end 

¹®ÀÚ¿­ ºÎÈ£
' (single-quoted) ±×³É ¹®ÀÚ¿­
" (double-quoted) º¯È¯ ¹®ÀÚ¿­
"»ì¶ó»ì¶ó \n #{º¯¼ö}" 

À̸§ÀÇ ¾à¼Ó
Áö¿ªº¯¼ö, ¸Þ¼­µå Çü½ÄÀμö, ¸Þ¼­µå À̸§ ¼Ò¹®ÀÚ³ª ¹ØÁÙ(_)·Î ½ÃÀÛ
Àü¿ªº¯¼ö $·Î ½ÃÀÛ
ÀνºÅϽº º¯¼ö(¸â¹ö º¯¼ö) @·Î ½ÃÀÛ
Ŭ·¡½º º¯¼ö @@·Î ½ÃÀÛ
»ó¼ö, Ŭ·¡½º À̸§ ´ë¹®ÀÚ·Î ½ÃÀÛ
ù±ÛÀÚ´Â ¹«Á¶°Ç ¼ýÀÚ´Â ¾ÈµÊ.

¹è¿­
a = ["À̰Í","Àú°Í",30000, ...] 
¹è¿­ ³»¿ëÀÌ ¹®ÀÚ¿­¸¸ ¿Â´Ù¸é?
a = %w{ÀÌ°Í Àú°Í ... } # µû¿ÈÇ¥ »ý·« °¡´É 

¹è¿­ Á¢±Ù
a[0] -> ÀÌ°Í 
a[1] -> Àú°Í 
a[3] -> 30000 
... 

ÇØ½Ã
a = { 'ÿ·Î' => 'Çö¾Ç±â', 'Ŭ¶ó¸®³Ý => '°ü¾à±â' , ...} 
Ű => °ª ÇüÅÂ

ÇØ½Ã Á¢±Ù
a['ÿ·Î'] -> Çö¾Ç±â 
... 

Á¦¾î¹®
if ~ elsif ~ else ~ end 
while ~ end 
for ÃʱâÈ­ in ¹üÀ§(¿¹, 0 ... ¹è¿­º¯¼ö.length) ~ end 
nil Àº null&falseÀÇ ÀÇ¹Ì 

±¸¹® º¯°æÀÚ(statement modifier)
: Á¦¾î¹® ÇÑÁÙ·Î ¾²±â
¿¹)
if radiation > 3000 
 puts "À§Çè °æ°í µ¥ÀÎÀú À¸¾Ç" 
end 
¿¹2)
puts "À§Çè °æ°í µ¥ÀÎÀú À¸¾Ç" if radiation > 3000 
¹Ýº¹¹®µµ ¸¶Âù°¡Áö
abc = abc*abc while abc > 3000 

Á¤±ÔÇ¥Çö½Ä(Regular expressions) ³»Àå Áö¿ø
/ ... / # ½½·¡½¬¿Í ½½·¡½¬ »çÀÌ

ºí·Ï°ú ¹Ýº¹ÀÚ
ÄÚµå ºí·Ï(code blocks)Àº { ... } ³ª do ... end ¸¦ ¶æÇÔ
Áß°ýÈ£´Â do ... end º¸´Ù ¿ì¼±¼øÀ§°¡ ³ô´Ù.
ÇÑÁÙ¿¡´Â Áß°ýÈ£¸¦ ¿©·¯ÁÙÀº do ... end¸¦

yield¹®
yield´Â ÄÚµåºí·ÏÀ» ´ëüÇÑ´Ù.
ÄÚµå ºí·° ³»ÀÇ {| ... , ... | ... }ÀÇ ³»¿ëÀº yield¸¦ ¸¸³¯¶§ ÀÎÀÚ·Î½á ´ëüµÈ´Ù.
¿¹)
a = %w {°³¹Ì ¹ú °í¾çÀÌ °í¾çÀÌ ¿¤Å©} 
a.each {|animal| puts animal} 
¿¹2)
3.upto(6) {|i| print i} 
5.times {print "a"} 

I/O
puts, gets, printf ÀüºÎ CÀÇ stdio.hÀÇ ÇÔ¼ö¿Í ±â´ÉÀÌ °°´Ù.

3Àå Ŭ·¡½º, °´Ã¼, º¯¼ö

class Song 
 def initialize(name, artist, duration) #new¸Þ¼­µå´Â »ý¼ºÀÚÀÇ ¿ªÇÒ°ú µ¿½Ã¿¡ Ŭ·¡½ºÀÇ initialize¸Þ¼­µå¿Í ¿¬°áÀÌ µÈ´Ù. 
  @name = name 
  @artist = artist 
  @duration = duration 
 end 
end 

Ŭ·¡½º ÀνºÅϽº »ý¼º½Ã
song = Song.new("·ê·ç¶ö¶ó", "±èÇü±Õ", 20) 
song.inspect -> #<Song:0x1c7ca8 @name="·ê·ç¶ö¶ó", "±èÇü±Õ", 20> #inspect ¸Þ¼­µå´Â °´Ã¼ÀÇ ID¿Í ÀνºÅϽº º¯¼ö¸¦ Ãâ·ÂÇÑ´Ù. 

·çºñ´Â Ŭ·¡½º¿¡ ´ÝÇôÀÖÁö ¾Ê´Ù.
Ãß°¡ÀûÀ¸·Î ¸Þ¼­µå¸¦ »ý¼ºÇϰíÀÚ ÇÑ´Ù¸é,

class Song 
 def to_s 
  "Song : #@name -- #@artist (#@duration)" 
 end 
end 

»ó¼Ó
class KaraokeSong < Song 
 def initialize(name, artist, duration, lyrics) 
  super(name, artist, duration) 
  @lyrics = lyrics 
 end 
end 

Àб⠰¡´É ¼Ó¼º(property)
class Song 
 def name 
  @name 
 end 
 def artist 
  @artist 
 end 
end 

À̿Ͱ°Àº ³»¿ëÀº

class Song 
 attr_reader :name, :artist # :artistÀÇ Àǹ̴ º¯¼öartistÀÇ °ªÀÇ ³»¿ëÀÌ ¾Æ´Ñ À̸§(·¹ÆÛ·±½º?)¿¡ ÇØ´çÇÏ´Â Á¢±Ù.  
end 
À¸·Î Ãà¾à °¡´É

song = Song.new("LOVEHURT","±èÇü±Õ",200) 
song.name -> "±èÇü±Õ" 
µÑ´Ù Á¢±Ù ¹æ¹ýÀº °°À½

¹Í½ºÀÎ
·çºñ¿¡¼­ ´ÙÁß »ó¼ÓÀ» ±¸ÇöÇÑ ¹æ¹ý
´ÙÁß »ó¼ÓÀÇ ¸ðÈ£ÇÔÀÇ °áÁ¡À» ´ÜÀÏ »ó¼Ó¿¡ ¹Í½ºÀÎ ÇÏ´Â ¹æ¹ýÀ» Ãß°¡ÇÔÀ¸·Î ´ÜÁ¡¾øÀÌ ÃëÇÔ

¾²±â °¡´É ¼Ó¼º
class Song 
 def duration=(new_duration) 
  @duraion = new_duration 
 end 
end 
ÀÌÁ¦ºÎÅÍ ¾²±âµµ °¡´É

¸¶Âù°¡Áö·Î Ãà¾àÇüµµ Á¸Àç

class Song 
 attr_writer :duration 
end 

Á¸ÀçÇÏÁö ¾Ê´Â ÀνºÅϽº º¯¼ö¿¡ ´ëÇÑ ¼Ó¼ºÀ» ¸¸µé°íÀÚ ÇÑ´Ù¸é
À§ÀÇ def ~ end ±¸¹®À¸·Î Àбâ¿Í ¾²±â¿¡ ´ëÇÑ ¼Ó¼ºÀ» ¸¸µé¸é µÈ´Ù.

Ŭ·¡½º º¯¼ö
Ŭ·¡½ºÀÇ ¸ðµç °´Ã¼°¡ °øÀ¯Çϸç, Ŭ·¡½º ¸Þ¼­µå¿¡¼­µµ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.
½ºÅÂÆ½(static) º¯¼ö¿Í À¯»ç
Ç¥Çö¹ýÀº @@º¯¼öÀ̸§ °ú °°ÀÌ »ç¿ëµÈ´Ù.
Ŭ·¡½º º¯¼ö´Â ±× Ŭ·¡½º¿Í ÀνºÅϽº¿¡°Ô privateÀÌ´Ù.
²À Á¢±ÙÇϰíÀÚ ÇÑ´Ù¸é Á¢±ÙÀÚ ¸Þ¼­µå¸¦ ¸¸µé¸éµÈ´Ù.

Ŭ·¡½º ¸Þ¼­µå
¸¶Âù°¡Áö·Î ½ºÅÂÆ½ ¸Þ¼­µå
Ŭ·¡½ºÀ̸§.Ŭ·¡½º¸Þ¼­µå ·Î Á¢±ÙÇÒ ¼ö ÀÖ´Ù.
class Song 
 def Song.AllShow 
  ... 
 end 
end 

½Ì±ÛÅæ
new ¿¬»êÀÚ¸¦ privateÀ¸·Î ¼³Á¤ÇÏ¿© ÁÖ¸é µÈ´Ù.
ÇöÀç ¹æ¹ýÀº ½º·¹µå ¾ÈÁ¤¼ºÀ» º¸ÀåÇÏÁö ¸øÇÏÁö¸¸ µÚ¿¡(p.920)¿¡ ½Ì±ÛÅæ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù.
class MyLogger 
 private_class_method :new 
 @@logger = nil 
 def MyLogger.create 
  @@logger = new unless @@logger 
  @@logger 
 end 
end 

´Ù¸¥ »ý¼ºÀÚ
Ŭ·¡½º ¸Þ¼­µå¸¦ Ȱ¿ëÇÑ´Ù.
class Sharpe 
 def Sharpe.triangle(side_length) 
  Sharpe.new(3, side_length*3) 
 end 
 def Sharpe.square(side_length) 
  Sharpe.new(4, side_length*4) 
 end 
end 

Á¢±Ù Á¦¾î, Á¢±Ù ±ÇÇÑ
Public ¸Þ¼­µå ´©±¸³ª È£Ãâ°¡´ÉÇÏ´Ù. ·çºñ¿¡¼­´Â ±âº»ÀûÀ¸·Î publicÀÌ´Ù. (intialize¸¸ ¿¹¿ÜÀûÀ¸·Î private)
Protected ¸Þ¼­µå °´Ã¼¸¦ Á¤ÀÇÇÑ Å¬·¡½º¿Í ÇÏÀ§ Ŭ·¡½º¿¡¼­ È£Ãâ °¡´É.¡Ú°°Àº Ŭ·¡½ºÀÇ ÀνºÅϽº °´Ã¼¶ó¸é È£Ãâ °¡´É
Private ¸Þ¼­µå ¼ö½ÅÀÚ¸¦ ÁöÁ¤Çؼ­ È£ÃâÇÒ ¼ö ¾ø´Ù. ¼ö½ÅÀÚ´Â Ç×»ó selfÀÌ´Ù.

Á¢±Ù Á¦¾î ±â¼úÇϱâ

class MyClass 
 def method1 // ±âº»°ªÀº public 
 end 
 protected  // ÀÌ ´ÙÀ½ÀººÎÅÍ´Â protected 
  def method2 
  end 
 private // ÀÌ ´ÙÀ½ºÎÅÍ´Â private 
  def method3 
  end 
 public // ÀÌ ´ÙÀ½ºÎÅÍ´Â ´Ù½Ã public 
  def method4 
  end 
 
 private :method1 // µÚ¿¡ ´Ù½Ã Á¢±Ù ±ÇÇÑÀ» Á¦¾îÇÒ ¼ö ÀÖ´Ù. 
 protected :method4 
end 

º¯¼ö
º¯¼ö´Â °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶¸¦ °¡Áø´Ù.
person1 = "Tim" # ¹®ÀÚ¿­ °´Ã¼¸¦ »ý¼º 
person1[0] = 'J' 
person1 -> "Jim" 
°á±¹ º¯¼ö´Â °´Ã¼ÀÇ º°¸í(alias)¸¦ °¡Áö°í ÀÖÀ»»Ó´Ù.
person2 = person1 # ´Ü¼øÇÑ alias¸¦ Çϳª ´õ »ý±æ»ÓÀÌ´Ù. °´Ã¼ ÀÚü´Â ÀÚü Ç®(ÈüÀ¸·Î ±¸¼º?)·Î °ü¸®µÈ´Ù. 
object.dup¿Í °°Àº ¸Þ¼­µå´Â °´Ã¼¸¦ º¹»ç½ÃŲ´Ù. 
person1.freeze # °´Ã¼¿¡ ´ëÇÑ ¼öÁ¤À» Á¦ÇÑÇÑ´Ù. 
person1[0] = 'A' -> TypeError ¿¹¿Ü¸¦ ¹ß»ýÇÑ´Ù. can't modify frozen string 

4Àå ÄÁÅ×À̳Ê, ºí·Ï, ¹Ýº¹ÀÚ

¹è¿­(Array)
»ý¼º½Ã
a = ... , ...
? # ¹è¿­ »ý¼º°ú ÃʱâÈ­¸¦ µ¿½Ã¿¡
a = Array.new # ¹è¿­ »ý¼º½Ã, ÃʱâÈ­ ÇÊ¿ä

¹è¿­ÀÇ ¿ª¹æÇâ À妽º
0 1 2 3 4
-5 -4 -3 -2 -1

Àбâ¿ë [] ¿¬»êÀÚ
¾²±â¿ë []= ¿¬»êÀÚ

astartindex, count?·Î Á¢±Ù °¡´É
ƯÁ¤À§Ä¡ÀÇ À妽º¿¡ ¾²±â¸¦ ½ÃµµÇÒ ¶§ ±× À妽º ¹øÈ£ Àü±îÁö´Â nil·Î ä¿öÁø´Ù.

ÇØ½Ã(Hash)
Ű¿Í °ªÀ¸·Î °ü¸®

»ý¼º½Ã
a = {Ű => °ª, ...}

¹è¿­°ú ´Ù¸¥Á¡Àº À妽º·Î ¼ýÀÚ¿ÜÀÇ °ªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡

ÄÚµå ºí·Ï
C++, Java, C# °ú´Â ¾ÆÁÖ ´Ù¸£´Ù.

¼Ò½ºÄڵ忡¼­ ºí·ÏÀº ¸Þ¼­µå È£Ãâ ¹Ù·Î µÚ¿¡ ³ªÅ¸³­´Ù. °°Àº ÁÙ¿¡ Á¸ÀçÇÏ¸ç ºí·Ï¾ÈÀÇ ÄÚµå´Â ³ªÅ¸³ªÀÚ¸¶ÀÚ ½ÇÇàµÇ´Â°Ô ¾Æ´Ï¶ó ·çºñ°¡ ±× ºí·ÏÀÌ ³ªÅ¸³¯¶§(Áö¿ªº¯¼ö, ÇöÀç °´Ã¼µî)À» ±â¾ïÇÏ°í ¸Þ¼­µå°¡ ½ÇÇàµÇ¸é¼­ yield¹®À» ¸¸³¯¶§ ºí·ÏÀÇ ³»¿ëÀ» ½ÇÇàÇÑ´Ù. ±×¸®°í ºí·Ï ÀÚü¿¡ Çü½ÄÀμö¸¦ °¡Á® ÀÎÀÚ¸¦ °¡Áö´Â ÀÛÀº ÇÔ¼ö¿Í °°ÀÌ ½ÇÇàµÈ´Ù.

¹Ýº¹ÀÚ
each Çϳª¾¿ ¹Ýº¹Çؼ­ ¹ÝȯÇÑ´Ù.
collect Çϳª¾¿ ¹Ýº¹Çؼ­ ¹ÝȯÇÑ °á°ú°ªÀ» ¹­¾î¼­ ¹è¿­·Î ¸¸µç´Ù.
inject µÎ°³ÀÇ ÀÎÀÚ¸¦ °¡Áö°í ù¹øÂ° ÀÎÀÚ´Â ¸ðÀ¸´Â(inject) °ª µÎ¹øÂ° ÀÎÀÚ´Â ¹Ýº¹Çؼ­ ¹ÝȯÇÑ °ªÀÌ µÈ´Ù.
¹Ýº¹ÀÚ´Â ´Ü¼øÈ÷ ¸Þ¼­µåÀ̸ç, ´Ù¸¥ ¸Þ¼­µå¿Í ´Ù¸¦ ¹Ù ¾ø°í, »õ·Î¿î °ªÀ» À§ÇØ yield¸¦ È£ÃâÇÑ´Ù. ¹Ýº¹ÀÚÀÇ ÁÖü´Â ¹Ù·Î ¸Þ¼­µå¿Í °áÇÕµÈ ÄÚµå ºí·ÏÀÌ´Ù.

¸Þ¼­µå Çü½ÄÀμö ³Ñ±â±â?
¸Þ¼­µåÀÇ Á¤ÀǺκп¡ (*args)¿Í °°ÀÌ ÀÎÀÚ¸¦ ¼³Á¤ÇØ Áشٸé
½ÇÁ¦ ¸Þ¼­µå È£ÃâÇÒ¶§ µé¾î¿Â ÀÎÀÚ´Â Åõ¸íÇÏ°Ô args¶ó´Â À̸§À» °¡Áö°í ±×´ë·Î ´Ù¸¥ ¸Þ¼­µå¿¡ ³Ñ°Ü ÁÙ ¼ö ÀÖ´Ù.

Æ®·£Á§¼Ç
FileŬ·¡½ºÀÇ Open¸Þ¼­µå´Â ÄÚµåºí·ÏÀ» Ãß°¡ÇÔÀ¸·Î ½ÇÁ¦ ÇൿÀ» ½ÇÇà½Ã¿¡ Ãß°¡ÇÑ´Ù.
¹®Á¦´Â Open¸Þ¼­µåÀÇ È£ÃâÀÌ ³¡³²°ú µ¿½Ã¿¡ ¿­·ÁÀÖ´Â ÆÄÀÏÀ» ´Ù½Ã CloseÇØÁÖ´Â Æ®·£Á§¼ÇÀÌ Æ÷ÇԵǾî Àִµ¥
¸¸ÀÏ ÄÚµåºí·ÏÀÌ Ãß°¡µÇÁö ¾Ê´Â´Ù¸é ¿­·ÁÀÖ´Â »óŸ¦ À¯ÁöÇÏ°Ô ¸¸µé¾îÁØ´Ù.
±¸Çö ³»¿ëÀº
Kernel.block_given? ¸Þ¼­µå¸¦ ÀÌ¿ëÇØ¼­ ÇöÀç ¸Þ¼­µå¿¡ ºí·ÏÀÌ °áÇյǾî ÀÖ´Ù¸é true¸¦ ¹ÝȯÇÑ´Ù.]

ÄÚµåºí·Ï ³Ñ±â±â?
¸Þ¼­µåÀÇ ÀÎÀÚ¿¡ &º¯¼ö¸í À¸·Î ¼³Á¤ÇÏ¿© ÁÖ¸é µÚÀÇ ÄÚµåºí·ÏÀ» ã¾Æ ÀÎÀÚ¿Í ¿¬°áÇÏ¿© ÁØ´Ù.

Proc °´Ã¼
º¯¼ö·Î ¾î¶² °´Ã¼ÀÇ ¸Þ¼Òµå¸¦ ¹ÞÀ¸¸é ¾î¶»°Ô µÉ±î?
À̰ÍÀ» Proc °´Ã¼¶ó°í Çϴµ¥ ÀÌ °´Ã¼´Â Á¤ÀÇµÈ ½ÃÁ¡¿¡¼­ ¸ðµç ¹®¸Æ Á¤º¸¸¦ °®´Â´Ù.
Áï, self°ª°ú ¹üÀ§³»ÀÇ ¸Þ¼­µå, º¯¼ö, »ó¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ´Ù¸¥ ¾ð¾î¿¡¼­´Â Ŭ·ÎÀú(closure)¶ó°í ºÎ¸£´Â Ư¡ÀÌ´Ù.
Proc°´Ã¼¿¡ ÇÒ´çµÈ ¸Þ¼­µå¸¦ ½ÇÇàÇϱâ À§Çؼ­´Â Proc#call ¸Þ¼­µå¸¦ »ç¿ëÇÑ´Ù.

5Àå Ç¥ÁØ Å¸ÀÔ

¼ýÀÚ
Á¤¼ö ¿Í ºÎµ¿¼Ò¼öÁ¡ À» Áö¿ø

Á¤¼ö´Â ±æÀÌ »ó°ü¾øÀÌ »ç¿ë °¡´É. (½Ã½ºÅÛ ¸Þ¸ð¸®°¡ ¹ÞÃÄÁÖ´ÂÇÑ)
ÀÏ¹Ý ÀûÀÎ ¹üÀ§ (-2^30 ~ 2^30-1 ¶Ç´Â -2^62 ~ 2^62-1)´Â ³»ºÎ¿¡¼­ FixnumŬ·¡½ºÀÇ °´Ã¼°¡ µÇ°í
ÀÌ ¹üÀ§¸¦ ³Ñ¾î¼­´Â ¼ýÀÚ´Â Bignum Ŭ·¡½ºÀÇ °´Ã¼·Î ÀúÀå

Áø¹ý ¼ýÀÚ¾ÕÀÇ ¹®ÀÚ
8Áø¹ý 0
10Áø¹ý 0d(±âº»°ª)
16Áø¹ý 0x
2Áø¹ý 0b

Á¤¼öµé »çÀÌÀÇ ¹ØÁÙÀº ¹«½ÃÇÑ´Ù. (123 == 12_3)

Á¦¾î ¹®ÀÚ
?\ÀÇ ÇüÅ·ΠǥÇöÇÑ´Ù.
?a -> 97 # ¾Æ½ºÅ°¹®ÀÚ
?\n -> 10 # °³Ç๮ÀÚ0x0a
?\C-a -> 1 # ÄÁÆ®·Ñ a = ?A & 0x9f = 0x01
?\C-x -> # ÄÁÆ®·Ñ x = ?x & 0x9f
?\M-x -> # ¸ÞŸ¹®ÀÚ x = ?x | 0x80 Àß ¸ð¸£°Í´Ù.

¼Ò¼öÁ¡À̳ª Áö¼ö¸¦ Æ÷ÇÔÇÏ´Â ¼ýÀÚ ¸®ÅÍ·²Àº Float °´Ã¼·Î º¯È¯µÈ´Ù.

¼ýÀÚ¿¡ ÇØ´çÇÏ´Â ¹®ÀÚ¿­Àº ¼ýÀÚ·Î ¹Ù²îÁö ¾È´Â´Ù.
"3" Àº ¼ýÀÚ3°ú ¾ö¿¬È÷ ´Ù¸£´Ù.
Interger("3")À» ÅëÇØ º¯È¯À» ½ÃÄÑÁà¾ß ÇÑ´Ù.

¹®ÀÚ¿­
8ºñÆ® ¹®ÀÚÀÇ ½ÃÄö½º´Ù.
¸ðµç ¹®ÀÚ¿­Àº String Ŭ·¡½ºÀÇ °´Ã¼ÀÌ´Ù.

ÀÛÀº µû¿ÈÇ¥ ³»ÀÇ ¹®ÀÚ¿­Àº
\\Àº \ ·Î ÀνÄÇϰí
\'Àº ' À¸·Î ÀνÄÇÑ´Ù.

Å« µû¿ÈÇ¥ ³»ÀÇ ¹®ÀÚ¿­Àº ´õ ¸¹Àº À̽ºÄÉÀÌÇÁ ½ÃÄö½º¸¦ Áö¿øÇÑ´Ù.
\n \t µîÀÇ À̽ºÄÉÀÌÇÁ ½ÃÄö½º¸¦ Áö¿øÇϰí
#{expr}°ú °°Àº ½ÄÀ¸·Î ¾²¸é ·çºñ ÄÚµåÀÇ °á°ú¸¦ ¹®ÀÚ¿­·Î º¯È¯ÇØ ÁØ´Ù.
#{}¾ÈÀÇ Ç¥Çö½ÄÀÌ Àü¿ªº¯¼ö, Ŭ·¡½ºº¯¼ö, ÀνºÅϽºº¯¼ö¶ó¸é Áß°ýÈ£¸¦ »ý·«Çصµ µÈ´Ù.
expr¿¡´Â ´Ü¼øÇÑ º¯¼ö¸í »Ó¾Æ´Ï¶ó ÇÑÁÙ ÀÌ»óÀÇ ¸í·É¹®ÀÌ ¿Ã ¼öµµ ÀÖ´Ù.

ÀÌ ¿Ü¿¡ ¹®ÀÚ¿­À» ¸¸µå´Â ½ºÆ®¸µ ¸®ÅÍ·²Àº ¼¼°¡Áö°¡ ´õ ÀÖ´Ù.
%q/¹®ÀÚ¿­/ -> ÀϹÝÀûÀÎ ÀÛÀº µû¿ÈÇ¥ ¹®ÀÚ¿­°ú °°´Ù.
%Q!¹®ÀÚ¿­! -> ÀϹÝÀûÀÎ Å« µû¿ÈÇ¥ ¹®ÀÚ¿­°ú °°´Ù.
%Q{or(or< ¹®ÀÚ¿­ >or)or} -> °¢°¢ ´ëÀÀÇϴ ¦ÀÇ ´Ý´Â ¹®ÀÚ°¡ ³ª¿Ã¶§±îÁö °è¼Ó ¹®ÀÚ¿­·Î 󸮵ȴÙ.
±¸ºÐ¹®Àڷδ ¾ËÆÄºª, ¼ýÀÚ, 2¹ÙÀÌÆ®¹®ÀÚ¸¦ Á¦¿ÜÇÑ ¾î¶²°ªÀ̳ª »ç¿ëÇÒ ¼ö ÀÖ´Ù.


È÷¾î µµÅ¥¸ÕÆ®(here document)
<<´ÙÀ½¿¡ ƯÁ¤ ¹®ÀÚ¿­ÀÌ ¿À´Â Á¾°á¹®ÀÚ¿­À» Á¤ÀÇÇÑ´Ù.
´Ù½Ã Á¾°á¹®ÀÚ¿­ÀÌ ³ª¿Ã¶§ ±îÁö ÀüºÎ(Áٹٲ޵µ »ó°ü¾ø´Ù.) ¹®ÀÚ¿­·Î 󸮵ȴÙ.

¹®ÀÚ¿­ ´Ù·ç±â
¸Þ¼­µå
String#chomp °³Ç๮ÀÚ(\n,\r)¸¦ ±¸ºÐÀÚ·ÎÇÑ split
String#split ÁöÁ¤µÈ ±¸ºÐÀÚ·Î ³ª´®
String#squeeze ¹Ýº¹µÇ´Â ¹®ÀÚ Á¦°Å

¸Þ¼­µå µÚ¿¡ ºÙ´Â !´Â ¼ö½ÅÀÚ¸¦ ÀÚ±â ÀÚ½ÅÀ¸·Î Çϰڴٴ ǥÇö

¹üÀ§ ½ÃÄö½º
object1 .. object2 # °æ°è¸¦ Æ÷ÇÔÇÏ´Â ½ÃÄö½º
object1 ... object2 # Á¾·á°ªÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â ¹üÀ§ÀÇ ½ÃÄö½º

½ÃÄö½º¸¦ ¸®½ºÆ® ÇüÅ·Π¸¸µé¶§ to_a ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.
(1..10).to_a

¹üÀ§´Â ±¸¼º ¿ä¼Ò¸¦ ¹Ýº¹ÇÏ´Â ¸Þ¼­µå¿Í ³»¿ëÀ» ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î °Ë»çÇÏ´Â ¸Þ¼Òµå¸¦ Áö¿øÇÑ´Ù.
#include?()
#min
#max
#reject{}
#each{}

°´Ã¼ ´ÜÀ§¿¡¼­µµ ¹üÀ§¸¦ Áö¿øÇϴµ¥
´ÙÀ½ °´Ã¼¸¦ ¹ÝȯÇÏ´Â succ°ú <=> ºñ±³ ¿¬»êÀÚ¸¦ Áö¿øÇØ¾ß ÇÑ´Ù.

Á¶°Ç¹®¿¡ ¹üÀ§¸¦ ³ÖÀ» ¼öµµ ÀÖ´Ù.
puts line if line =~ /start/ .. line =~ /end/

¾î¶²°ªÀÌ ¹üÀ§¿¡ Æ÷ÇÔÇÏ´ÂÁö === µ¿µî ¿¬»êÀÚ·Î Å×½ºÆ® ÇÒ ¼ö ÀÖ´Ù.
(0..10) === 5 -> true

Á¤±Ô Ç¥Çö½Ä
Á¤±Ô Ç¥Çö½ÄÀº µû·Î °øºÎ

6Àå ¸Þ¼­µå

ù±ÛÀÚ¸¦ ´ë¹®ÀÚ·Î ½áµµ ´çÀåÀº ¿¡·¯³ªÁö´Â ¾ÊÁö¸¸ ·çºñ°¡ ÀÌ À̸§À» ¸Þ¼­µå°¡ ¾Æ´Ï¶ó »ó¼ö¿¡¼­ ¸ÕÀú ã±â ¶§¹®¿¡, °á°úÀûÀ¸·Î ¸Þ¼­µå È£ÃâÀÌ ¿øÄ¡¾Ê´Â ½ÄÀ¸·Î ºÐ¼®µÉ ¼öµµ ÀÖ´Ù.

¸Þ¼­µå ¸í·ÉÀÚ !, ?
¿¹) instance_of? , chop!

¸Þ¼­µåÀÇ ÀÎÀÚ
def ¸Þ¼­µå¸í #¸Þ¼­µå ÀÎÀÚ°¡ ¾øÀ»¶§ 
 ~  
end 
 
def ¸Þ¼­µå¸í(ÀÎÀÚ1, ÀÎÀÚ2, ... ) 
 ~ 
end 
 
def ¸Þ¼­µå¸í(ÀÎÀÚ1 = ±âº»°ª1, ÀÎÀÚ2 = ±âº»°ª2 , ...) # ÀÌ·± ¹æ¹ýµµ °¡´É 
 ~ 
end 

°¡º¯ ÀÎÀÚ ¸®½ºÆ®
°¡º¯ Çü½Ä Àμö À̸§ ¾Õ¿¡ *¸¦ ºÙ¿©ÁÜ
def varags(arg1, *rest) 
 "Get #{arg1} and #{rest.join(', ')}" 
end 

¸Þ¼­µå¿Í ºí·Ï
¸Þ¼­µå ³»ºÎÀÇ yield¸¦ ÀÌ¿ëÇØ¼­ ¸Þ¼­µå È£Ãâ½Ã ºí·Ï°ú °áÇÕÇÑ´Ù.
¸Þ¼­µåÀÇ ¸¶Áö¸· Çü½Ä Àμö ¾Õ¿¡ ¾ÚÆÛ»÷µå('&')°¡ ºÙ¾î ÀÖ´Ù¸é, ÀÌ ¸Þ¼­µå È£Ãâ¿¡ °áÇÕµÈ ºí·ÏÀº Proc°´Ã¼·Î ¹ÝȯµÇ¾î Çü½ÄÀμö¿¡ ´ëÀԵȴÙ.

¸Þ¼­µåÀÇ È£Ãâ
¼ö½ÅÀÚÀÇÀ̸§ ¸Þ¼­µåÀÇÀ̸§ ÇÊ¿äÇѰæ¿ì¸Å°³º¯¼ö ºí·Ï

¼ö½ÅÀÚ¸¦ »ý·«Çϸé, ±âº»°ªÀº self°¡ µÇ°í ÀÌ´Â ÇöÀç °´Ã¼¸¦ ³ªÅ¸³½´Ù.

¸ðÈ£ÇÑ Ç¥ÇöÀÌ ¾Æ´Ï¶ó¸é ¸Þ¼­µå È£Ãâ½Ã ¸Å°³º¯¼ö ¸®½ºÆ®¸¦ °¨½Ñ °ýÈ£¸¦ »ý·«Çصµ µÈ´Ù.(¸Þ¼­µå À̸§°ú °ýÈ£»çÀÌ¿¡ °ø¹éÀº Çã¿ëÄ¡ ¾Ê´Â´Ù.)

returnµµ »ý·«Çصµ µÈ´Ù.

ºí·ÏÀº do~end±¸¹®°ú °°À¸³ª ¿ì¼±¼øÀ§¸¸ ³ô´Ù.

ÇØ½Ã·Î ÀÎÀÚ¸¦ ¸ðÀ¸±â
ÀÎÀÚ¸¦ ÇØ½Ã·Î ³Ñ°ÜÁÙ¶§ ,À» ÅëÇØ ±¸ºÐÀ» ÇÏ´õ¶óµµ ÇϳªÀÇ ÇØ½Ã·Î Æ÷ÇÔÀ̵ȴÙ.

7Àå Ç¥Çö½Ä

´ëºÎºÐÀÇ ¾ð¾î¿¡¼­´Â Ç¥Çö½Ä(expression)À̶ó°í Çϸé, ÇϳªÀÇ °ªÀ» ¸¸µé¾î ³»´Â ¿¬»êÀ» ÀǹÌÇÑ´Ù.(3À» ¸¸µé±â À§ÇÑ 1+2) ±×¸®°í Ç¥Çö½ÄÀ» ÀÌ¿ëÇØ¼­ ±¸¹®(statement)¸¦ ±¸¼ºÇÑ´Ù.(result = 1+2)
·çºñ¿¡¼­´Â ´ëÀÔ¹®µµ °á°ú¸¦ ¹ÝȯÇÑ´Ù. °ÅÀÇ ¸ðµç °ÍÀÌ Ç¥Çö½ÄÀÌ µÈ´Ù. (result2 = (result = 1+2) +1 ÀÌ °¡´É)
±×¸®°í ¸¶Áö¸·¿¡ ½ÇÇàµÈ Ç¥Çö½ÄÀÇ °ªÀ» ¹ÝȯÇÑ´Ù.

¿¬»êÀÚ Ç¥Çö½Ä
a*b+c ´Â (a.*(b)).+(c)°ú °°´Ù.
±âº» ¿¬»êÀ» ÀçÁ¤ÀÇ ÇÒ ¼öµµ ÀÖ´Ù.

Ä¿¸Çµå È®Àå
¹®ÀÚ¿­À» ¿ªµû¿ÈÇ¥(backquotesȤÀº backtick)·Î ½Î°Å³ª %x ·Î ½ÃÀÛÇÏ´Â ±¸ºÐÀÚ Çü½ÄÀ» »ç¿ëÇϸé, À̰ÍÀº »ç¿ëÁßÀÎ ±â¹Ý ¿î¿µÃ¼Á¦¿¡ ÀÇÇØ Ä¿¸Çµå·Î ½ÇÇàµÈ´Ù.
Ä¿¸Çµå ¹®ÀÚ¿­µµ Ç¥Çö½Ä È®Àå°ú ÀϹÝÀûÀÎ À̽ºÄÉÀÌÇÁ ¹®ÀÚ¿­À» ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
Ä¿¸ÇµåÀÇ Á¾·á»óŰªÀº Àü¿ªº¯¼ö $?·Î È®ÀÎÇÒ ¼ö ÀÖ´Ù.

¿ªµû¿ÈÇ¥ ÀçÁ¤ÀÇÇϱâ
½ÇÁ¦·Î ¹®ÀÚ¿­À» Kernel.`(¿ªµû¿ÈÇ¥ÇѰ³) ¸Þ¼­µå¿¡ ¸Å°³º¯¼ö·Î ³Ñ±â´Â °ÍÀÌ´Ù.
¿øÇÑ´Ù¸é À̰͵µ ÀçÁ¤ÀÇ ÇÒ ¼öÀÖ´Ù.

´ëÀÔ¹®
·çºñ¿¡´Â µÎ°¡Áö ±âº»ÀûÀÎ ´ëÀÔ¹® Çü½ÄÀÌ ÀÖ´Ù.
1. º¯¼ö³ª »ó¼ö¿¡ °´Ã¼ ÂüÁ¶¸¦ ´ëÀÔÇÏ´Â°Í (¿¹ instrument ="piano")
2. ¿ÞÆí¿¡ °´Ã¼ÀÇ ¼Ó¼ºÀ̳ª ¿ä¼Ò°ª ÂüÁ¶¸¦ Æ÷ÇÔÇÏ´Â °æ¿ì (¿¹ song.duraiont = 234)
´ëÀÔ¹®¿¡¼­ ¹Ýȯ°ªÀº ¹«½ÃµÈ´Ù. ÀԷ°ªÀÌ ±×´ë·Î ¹Ýȯ°ªÀÌ´Ù.

º´·Ä ´ëÀÔ¹®
a,b = b,a
µ¿½Ã¿¡ ÀÌ·ç¾îÁü

Áßø ´ëÀÔ¹®
b, (c,d), e = 1,2,3,4 -> b == 1, c== 2, d == nil, e == 3
b, (c,d), e = 1,2,3,4
? -> 1,2,nil,3
b, (c,d),e = 1,2,3?,4 -> 1,2,3,4
b,(c,d,), e = 1,2,3,4?,5 -> 1,2,3,5
b,(c,*d),e = 1,2,3,4?,5 -> 1,2,3,4?,5


·çºñ¿¡´Â ÀÚµ¿ Áõ°¡ ¿¬»êÀÚ(++,--)´Â ¾ø´Ù.

³í¸® Ç¥Çö½Ä
nilÀ̳ª false °¡ ¾Æ´Ï¸é trueÀÌ´Ù.
0À̳ª ""´Â °ÅÁþÀÌ ¾Æ´Ï´Ù.


and¿Í orÀº ¿ì¼±¼øÀ§°¡ °°Àº ¹Ý¸é &&Àº ||º¸´Ù ¿ì¼±¼øÀ§°¡ ³ô´Ù. (or°ú ||Àº ¿ì¼±¼øÀ§°¡ °°´Ù.)


not°ú !Àº °°Àº ÀǹÌ


defined? Àº ¸Å°³º¯¼ö°¡ Á¤ÀǵÇÁö ¾Ê¾ÒÀ»¶§ nilÀ» ¹ÝȯÇϸç, ±×·¸Áö ¾ÊÀº °æ¿ì ¸Å°³º¯¼ö¿¡ ´ëÇÑ ¼³¸íÀ» ¹ÝȯÇÑ´Ù.
defined? 1 -> "expression"
defined? dummy -> nil
defined? Math::PI -> "constant"
defined? 42.abs -> "method"

ºñ±³ ¿¬»ê
¿¬»êÀÚ ÀǹÌ
==(ºÎÁ¤Çü !=) µÎ °ªÀÌ °°ÀºÁö ºñ±³
=== case ±¸¹®ÀÇ whenÇ׸ñÀÌ ºñ±³ÇÒ ´ë»ó°ú µ¿ÀÏÇÑÁö ºñ±³Çϴµ¥ ¾²ÀδÙ.
<=> ÀϹÝÀûÀÎ ºñ±³ ¿¬»êÀÚ ¿ÞÂÊÀÌ ¿À¸¥ÂÊ º¸´Ù ÀÛÀ¸¸é -1, °°À¸¸é 0, Å©¸é 1
=~(ºÎÁ¤Çü !~) Á¤±ÔÇ¥Çö½Ä ÆÐÅÏÀÌ ¸ÅĪµÇ´ÂÁö °Ë»çÇÑ´Ù.
<. <=. >, >= ÀÛ´Ù, À۰ųª °°´Ù, Å©´Ù, Å©°Å³ª °°´Ù
eql? ¼ö½ÅÀÚ¿Í ¸Å°³º¯¼ö°¡ ¼­·Î °°Àº ŸÀÔÀÌ¸ç °°Àº °ªÀ» °¡Áö´Â °æ¿ì ÂüÀÌ µÈ´Ù. (1 == 1.0Àº ÂüÀÌÁö¸¸, 1.eql?(1.0)Àº °ÅÁþÀÌ´Ù.
equal? ¼ö½ÅÀÚ¿Í ¸Å°³º¯¼ö°¡ °°Àº °´Ã¼ ID¸¦ °¡Áú °æ¿ì ÂüÀÌ´Ù.


word ||= default_value #word = word || default_value ºñ¾îÀÖÀ¸¸é default_value°¡ ºñ¾îÀÖÁö¾Ê´Ù¸é ¿ø·¡°ªÀÌ º¸Á¸µÈ´Ù.


if ~ then # thenÀº »ý·«¶Ç´Â :·Î ´ëü °¡´É #if ÀÇ ºÎÁ¤Çü unless Á¸Àç
elsif ~ then
else
end


? : #»ïÇ× ¿¬»êÀÚµµ Áö¿ø

caseÇ¥Çö½Ä
case
when ~ then(:À¸·Î ´ëü°¡´É)
else ~
end

¹Ýº¹¹®
¿ø½ÃÀûÀÎ ¹Ýº¹ ±¸¹®ÀÌ ÀÖ´Ù.
while #untilÀº whileÀÇ ºÎÁ¤Çü
~
end
¿¹)
file = File.Open("oridinal")
while file.gets
end
#ÆÞÀÇ ÄÚµå¿Í À¯»çÇѵ¥ getsÀÇ ÀÐÀº ¸¶Áö¸·ÁÙÀº Àü¿ªº¯¼ö $_¿¡ µé¾î°¡°í ~¿¬»êÀÚ´Â Á¤±ÔÇ¥Çö½ÄÀÌ $_¿¡ ¸ÅĪÇÏ´ÂÁö¸¦ ÆÇ´ÜÇÑ´Ù. ¾Æ¹« ¸Å°³º¯¼ö ¾øÀÌ ¾´ print´Â $_ÀÇ ³»¿ëÀ» Ãâ·ÂÇÑ´Ù.

begin/end ºí·ÏÀ» ±¸¹® º¯°æÀÚ·Î ²Ù¹Ð°æ¿ì, ³í¸® Ç¥Çö½ÄÀÇ °ª¿¡ »ó°ü¾øÀÌ ºí·ÏÀÇ Äڵ尡 ¹«Á¶°Ç ÇѹøÀº ½ÇÇàµÈ´Ù. (C¾ð¾îÀÇ do~ while ÄÚµå¿Í °°´Ù.)

loop do # break¸¦ ¸¸³¯¶§±îÁö ¹Ýº¹ÇÑ´Ù.
~
end

for song in songlist

end
´Â
songlist.each do |song|
end
¿Í °°´Ù. for´Â »ç½Ç»ó ¹®¹ýÀ» Æí¸®ÇÏ°Ô ÇØÁÖ´Â ¹®¹ý»çÅÁ(syntactic sugar)¿¡ °¡±õ´Ù.

¹Ýº¹¹® Á¦¾î
break, next(C¾ð¾îÀÇ continue), redo (¹Ýº¹¹®½ÃÀÛºÎÅÍ ´Ù½Ã ¼öÇàÇ쵂 ´ÙÀ½ ¿ø¼Ò¸¦ °¡Á®¿À°Å³ª Á¾·áÁ¶°ÇÀ» ÀçÆò°¡ ÇÏÁö ¾Ê´Â´Ù.) retry (¹Ýº¹¹®À» ÃʱâÈ­ ½Ã۰í óÀ½ºÎÅÍ ´Ù½Ã ½ÃÀÛÇÑ´Ù.)

º¯¼ö À¯È¿ ¹üÀ§
³»Àå ¹Ýº¹¹®ÀÎ while, until, for´Â »õ·Î¿î º¯¼ö ¹üÀ§¸¦ ¸¸µéÁö ¾Ê´Â´Ù.
Áï, ¹Ýº¹ÀÚ ³»¿¡ »õ·Î ¸¸µé¾îÁø Áö¿ª º¯¼ö´Â ¹Ýº¹¹®ÀÌ ³¡³ªµµ »ç¿ë°¡´ÉÇÏ´Ù.
ÇÏÁö¸¸ ¹Ýº¹ÀÚ¿¡¼­ »ç¿ëÇÏ´Â ºí·Ï(loop, each µî)Àº Á¶±Ý ´Ù¸£´Ù.
ºí·Ï ¹Û¿¡¼­ Á¢±ÙÇÒ ¼ö °¡ ¾ø´Ù. ÇÏÁö¸¸ ºí·Ï ¹Û¿¡¼­ ¸ÕÀú °°Àº À̸§ÀÇ º¯¼ö°¡ ¼³Á¤µÇ¸é ±× º¯¼ö¸¦ ±×´ë·Î »ç¿ëÇÑ´Ù.

8Àå ¿¹¿Ü ó¸®

Exception Ŭ·¡½º
¿¹¿Ü¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áø °ÍÀº Exception Ŭ·¡½º ȤÀº ±× ÀÚ½Ä Å¬·¡½ºÀÇ °´Ã¼´Ù. ·çºñÀÇ ¿¹¿Ü Ŭ·¡½º »ó¼Ó °èº¸´Â Àß Á¤¸®µÇ¾î ÀÖ´Ù.
Á÷Á¢ ¿¹¿Ü Ŭ·¡½º¸¦ ÀçÁ¤ÀÇ ÇÑ´Ù¸é StandardError
?¸¦ »ó¼ÓÇÏ´Â ÀÚ½Ä Å¬·¡½º·Î ¸¸µå´Â °ÍÀÌ ÁÁ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ±âº» ¿¹¿Ü ó¸® ·çƾ¿¡¼­ ÀÌ ¿¹¿Ü¸¦ Àâ¾ÆÁÖÁö ¾ÊÀ» °ÍÀ̱⠶§¹®ÀÌ´Ù.
¸ðµç ¿¹¿Ü´Â ±× ¿¹¿Ü¿¡ ¿¬°üµÈ ¸Þ½ÃÁö, ±×¸®°í ½ºÅà ¿ªÃßÀû Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. ±×¸®°í Á÷Á¢ Á¤ÀÇÇÑ ¿¹¿Ü¶ó¸é Ãß°¡ Á¤¸¦ ´ãÀ» ¼öµµ ÀÖ´Ù.

·çºñ ¿¹¿Ü °èÃþ
Exception
fatal(·çºñ ³»ºÎ¿¡¼­ »ç¿ë)
NoMemoryError?
ScriptError?
LoadError?
NotImplementedError?
SyntaxError?
SignalException?
Interrupt
StandardError?
ArgumentError?
IOError
EOFError
IndexError?
LocalJumpError?
NameError?
NoMethodError?
RangeError?
FloatDomainError?
RegexpError?
RuntimeError?
SecurityError?
SystemCallError?
½Ã½ºÅÛ Á¾¼ÓÀûÀÎ ¿¹¿Üµé (Errno::xxx)
ThreadError?
TypeError?
ZeroDivisionError?
SystemExit?
SystemStackError?

¿¹¿Ü ´Ù·ç±â
begin/end ºí·ÏÀ¸·Î °¨½Ñ µÚ, rescure ±¸¹®À» Çϳª ÀÌ»ó »ç¿ëÇØ¼­ ¿ì¸®°¡ ó¸®ÇÒ ¿¹¿Ü¸¦ ¾Ë¸°´Ù.
begin 
 ~  # begin ~ end ±¸¹® ¾È¿¡¼­ rescue¸¦ ÅëÇÑ ¿¹¿Ü󸮸¦ ÇÒ¼ö Àִµ¥ ¿©±â¼­ ãÁö ¸øÇÏ¸é ½ºÅÃÀ» °Å½½·Î ¿Ã¶ó°¡ È£ÃâÀÚ¿¡¼­ ¿¹¿Ü¸¦ ã°ÔµÈ´Ù. 
end 
 
rescue SystemCallError # ÄÞ¸¶(,)·Î ±¸ºÐÇÏ¿© ¿©·¯ ¿¹¿Ü¸¦ µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à rescue ¸¶Áö¸·¿¡ "=> ¿¹¿Ü¹ÞÀ»º¯¼ö"¸¦ Ãß°¡ÇØÁÖ¸é ¿¹¿Ü °´Ã¼¸¦ ¹ÞÀ» Áö¿ª º¯¼ö¸¦ ¸¸µé¾îÁØ´Ù. 
 $stderr.print "IO failed: " + $!    # ¿¹¿Ü°¡ ¹ß»ýÇϸé ÀÌÈÄÀÇ ¿¹¿Ü ó¸® °úÁ¤°ú º°µµ·Î, °ü·ÃµÈ Exception °´Ã¼ ÂüÁ¶¸¦ Àü¿ª º¯¼ö $!¿¡ ´ã´Â´Ù. 
 # ³ª¸ÓÁö ó¸® 
 raise # ¾Æ¹« ¸Å°³º¯¼ö ¾øÀÌ »ç¿ëÇÏ¸é ´Ù½Ã $!¿¡ ´ã±ä ¿¹¿Ü¸¦ ¹ß»ý½ÃÄÑ ´õ ³ôÀº °èÃþÀ¸·Î Àü´ÞÇÑ´Ù. 
end 
 
½Ã½ºÅÛ¿¡·¯
¿î¿µÃ¼Á¦°¡ ¿¡·¯ Äڵ带 ¹ÝȯÇßÀ» ¶§ ÀϾ´Ù. POSIX ½Ã½ºÅÛ¿¡¼­´Â ÀÌ·¯ÇÑ ¿¡·¯°¡ EAGAIN, EPERM µîÀÇ À̸§À» °¡Áø´Ù. (À¯´Ð½º¿¡¼­ man errno·Î ¿¡·¯ ¸ñ·ÏÀ» º¼ ¼ö ÀÖ´Ù.)
·çºñ¿¡¼­´Â ÀÌ·± ¿¡·¯¸¦ ¿¹¿Ü °´Ã¼·Î °¨½Ñ´Ù. SystemCallError
?ÀÇ ÇÏÀ§ Ŭ·¡½ºÀ̸ç, Errno¸ðµâ¿¡¼­ Á¤ÀÇÇϰí ÀÖ´Ù.

Errno¿¹¿Ü °´Ã¼´Â ¿¡·¯ Äڵ带 Á÷Á¢¹ÝȯÇÏ´Â Errno¶ó´Â Ŭ·¡½º »ó¼ö¸¦ °¡Áø´Ù.

Errno::EAGAIN::Errno -> 35
Errno::EPERM::Errno -> 1
Errno::EIO::Errno -> 5
Errno::EWOULDBLOCK::Errno -> 35 # EAGAIN°ú ¿¡·¯ Äڵ尡 °°´Ù. SystemCallError?#===¸¦ ÀçÁ¤ÀÇ ÇÏ¿© °è½Âµµ »óÀÇ À§Ä¡°¡ ¾Æ´Ï¶ó ±× ¿¡·¯ ÄÚµå °ªÀ» Á÷Á¢ ºñ±³Çϵµ·Ï ¹Ù²Û °ÍÀÌ´Ù.

¸»²ûÈ÷ Ä¡¿ì±â
ensureÀýÀº C++ ÀÇ finally ±¸¹®°ú °°´Ù.

elseÀýµµ Àִµ¥ ¿¹¿Ü°¡ ¹ß»ýÇÏÁö ¾Ê¾Æ rescueºí·Ï¿¡ µé¾î°¡Áö ¾ÊÀ¸¸é ½ÇÇàµÈ´Ù. rescue¿Í ensureÀÇ »çÀÌ¿¡ À§Ä¡ÇÑ´Ù.

¿¹¿Ü ó¸® ÈÄ Àç½Ãµµ
retry ±¸¹®À» »ç¿ëÇÏ¿© begin ~ end ±¸¹®À» Àç½Ãµµ ÇÒ ¼ö ÀÖ´Ù. ¹«ÇÑ·çÇÁ¿¡ ºüÁú ¼ö ÀÖÀ¸´Ï À¯ÀÇÇÒ °Í.

¿¹¿Ü ¹ß»ý½Ã۱â
Kernel.raise(°æ¿ì¿¡ µû¶ó Kernel.failÀ» ÀÌ¿ë)
raise # ´Ü¼øÈ÷ ÇöÀçÀÇ ¿¹¿Ü($!)¸¦ ´Ù½Ã ¹ß»ý½ÃŰ´Â °ÍÀÌ´Ù. (ÇöÀç ¿¹¿Ü°¡ ¾ø´Ù¸é ´Ü¼øÈ÷ RuntimeError¸¦ ¹ß»ý½ÃŲ´Ù.) 
raise "bad mp3 encoding" # RuntimeError¸¦ ¹ß»ý½ÃŲ´Ù. 
raise Interfaceexception, "Keyboard failure", caller # ù ¹øÂ° ¸Å°³º¯¼ö·Î ¿¹¿Ü Ŭ·¡½º¸¦ ¸¸µé°í(Exception °èÃþ Ŭ·¡½ºÀ̰ųª object.kind_of?(Exception)À» ÂüÀ¸·Î ¸¸Á·ÇÏ´Â °´Ã¼ÀÌ´Ù. exceptionÀ̶ó´Â ¸Þ½ÃÁö¿¡ ÀÀ´äÇÒ ¼ö ÀÖ´Â °´Ã¼¶ó¸é ¾î¶² °ÍÀ̵çÁö ¸Å°³º¯¼ö·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ¸»), µÎ¹øÂ° ¸Å°³º¯¼ö·Î °ü·Ã ¸Þ½ÃÁö ÀÛ¼ºÇϰí, ¼¼¹øÂ° ¸Å°³º¯¼ö·Î ½ºÅà ÃßÀûÇÑ´Ù.(ÀϹÝÀûÀ¸·Î Kernel.caller ¸Þ½ºµå¸¦ ÀÌ¿ëÇØ ¸¸µé¾îÁø´Ù.) 

¿¹¿Ü¿¡ Á¤º¸ Ãß°¡Çϱâ
»õ·Î¿î ¿¹¿Ü¸¦ »ó¼Ó ¹Þ¾Æ Á¤ÀÇÇÔÀ¸·Î½á ¿¡·¯°¡ ³­ ½ÃÁ¡¿¡¼­ ¾Ë ¼ö ÀÖ´Â Á¤º¸ Áß Àü´ÞÇÒ Çʿ䰡 ÀÖ´Â °ÍÀ» Ãß°¡·Î ´ãÀ» ¼ö ÀÖ´Ù.
¿¹¸¦ µé¸é ¼ÒÄÏ Åë½ÅÁß¿¡ ¾î¶² ³×Æ®¿öÅ© ¿¡·¯´Â »óȲ¿¡µû¶ó ÀϽÃÀûÀ̶ó Àç½ÃµµÇÏ´Â°Ô Áß´ÜÇÏ´Â °Íº¸´Ù ³ªÀ» ¼ö ÀÖ´Ù.

Catch¿Í Throw
catch´Â À̸§(ÈçÈ÷ SymbolÀ̳ª StringÀ» »ç¿ëÇÑ´Ù.)ÀÌ ºÙ¿©Áø ºí·ÏÀ» Á¤ÀÇÇÑ´Ù.
throw¸¦ ¸¸³ª¸é ·çºñ´Â ÇØ´çÇÏ´Â ½É¹úÀ» °¡Áø catch¸¦ ã¾Æ Äڵ带 °Å½½·Î ¿Ã¶ó°£´Ù. ±×¸®°í ã°ÔµÇ¸é, ·çºñ´Â ½ºÅÃÀ» ÇØ´çÀ§Ä¡·Î µÇµ¹¸° µÚ ºí·ÏÀ» Á¾·áÇÑ´Ù.

catch (:done) do # catch ºí·Ï ³»ºÎ¿¡ throw°¡ »ç¿ëµÉ °æ¿ì ÇØ´ç catch ºí·ÏÀÇ ³ª¸ÓÁö ÄÚµå´Â »ý·«ÇÏ°í ºí·ÏÀ» ºüÁ®³ª¿Â´Ù. 
 ... 
 throw :done unless fields = line.split(/\t/) 
 ... 
end 

def ~ 
 ... 
 throw :quit_requested if res == "!" #throw°¡ catchºí·Ï¿¡ ¼ÓÇÏÁö ¾ÊÀ»¶§, ÇØ´ç ºí·ÏÀÇ catchºí·ÏÀ» ½ÇÇàÇÏ¿© °á°ú°ªÀ¸·Î ¹ÝȯµÈ´Ù. 
 ... 
end 
 
catch :quit_requested do 
 ... 
end 

9Àå ¸ðµâ

¸ðµâÀº ¸Þ¼­µå, Ŭ·¡½º, »ó¼ö¸¦ Çϳª·Î ¹­´Â ¼ö´ÜÀÌ´Ù.
1. ¸ðµâÀº À̸§°ø°£(Namespaces)À» Á¦°øÇؼ­ À̸§ÀÌ Ãæµ¹ÇÏ´Â °ÍÀ» ¸·¾ÆÁØ´Ù.
2. ¸ðµâÀº ¹Í½ºÀÎ(mixin)±â´ÉÀ» ±¸ÇöÇϴµ¥ »ç¿ëÇÑ´Ù.

module ´ë¹®ÀڷνÃÀÛ # Ŭ·¡½º¿Í À¯»ç 
 »ó¼ö´Â´ë¹®ÀڷνÃÀÛ 
 def ¸ðµâ¸í.¸Þ¼­µå¸íÀº¼Ò¹®ÀڷνÃÀÛ 
  ... 
 end 
 ... 
end 
 
#Á¢±ÙÇÒ¶§´Â 
require '¸ðµâÀ̸§' 
 
¸ðµâÀ̸§.¸Þ¼­µåÀ̸§() # ¸ðµâÇÔ¼öÈ£Ãâ 
¸ðµâÀ̸§::»ó¼öÀ̸§ # ¸ðµâ»ó¼öÁ¢±Ù 

¹Í½ºÀÎ
Ŭ·¡½º ¼±¾ð¿¡ ¸ðµâÀ» Æ÷ÇÔ(include)ÇÒ ¼ö ÀÖ´Ù.
¹Í½ºÀÎµÈ ¸ðµâÀº ½ÇÁ¦·Î´Â ÀÏÁ¾ÀÇ »óÀ§ Ŭ·¡½ºÃ³·³ µ¿ÀÛÇÑ´Ù.

·çºñ¿¡¼­ÀÇ include¹®Àº ´ÜÁö ÇØ´ç ¸ðµâ¿¡ ´ëÇÑ ÂüÁ¶¸¸ Ãß°¡½ÃŲ´Ù. ¸ðµâÀÌ ºÐ¸®µÈ ÆÄÀÏ·Î Á¸ÀçÇÑ´Ù¸é require½ÃÄÑ¾ß ÇÑ´Ù.

¿¹)
·çºñ¿¡¼­ Comparable ¹Í½ºÀÎÀ» Æ÷ÇÔÇϸé Ŭ·¡½º ºñ±³ ¿¬»êÀÚ(<, <=, ==, >=, >)¿Í between? ¸Þ¼­µå°¡ Ãß°¡µÈ´Ù. À̰ÍÀ» °¡´ÉÇÏ°Ô Çϱâ À§Çؼ­ Ŭ·¡½º°¡ <=> ¿¬»êÀÚ¸¦ Á¤ÀÇÇϰí ÀÖ´Ù°í °¡Á¤ÇÑ´Ù.
±×·¯¹Ç·Î Ŭ·¡½º¸¦ ¸¸µé¶§´Â <=>¸Þ¼­µå¸¦ Á¤ÀÇÇϰí, ComparableÀ» Æ÷ÇÔÇÏ´Â ÀÛÀº ¼ö°í·Î ¿©¼¸°³ÀÇ ºñ±³ÇÔ¼ö¸¦ ¾òÀ» ¼ö ÀÖ´Ù.

¹Ýº¹ÀÚ¿Í Enumerable ¸ðµâ
ÁýÇÕÀÇ °¢ ¿ø¼Ò¸¦ Â÷·Ê·Î ¹ÝȯÇÏ´Â each¶ó´Â ¹Ýº¹ÀÚ¸¦ ÀÛ¼ºÇϰí Enumerable ¸ðµâÀ» ¹Í½ºÀÎÇϸé, map, include?, find_all °°Àº ¸Þ¼­µå¸¦ Áö¿øÇÏ°Ô µÈ´Ù.±×¸®°í ±× ÁýÇÕÀÇ ¿ø¼ÒµéÀÌ <=> ¸Þ¼­µå¸¦ °¡Áö°í ÀÇ¹Ì ÀÖ´Â ¼ø¼­¸¦ Á¤ÇÑ´Ù¸é min, max, sort¿Í °°Àº ¸Þ¼­µåµµ ¾ò°Ô µÈ´Ù.

¹Í½ºÀÎÀÇ ÀνºÅϽº º¯¼ö
¹Í½ºÀÎ ³»ºÎ¿¡ ÀνºÅϽº º¯¼ö¸¦ »ç¿ëÇÏ·Á¸é ±¸º°µÇ´Â À¯ÀÏÇÑ À̸§À» °¡Áö°Ô ÇØ¾ß ÇÑ´Ù.
(¸ðµâÀÇ À̸§À» º¯¼ö À̸§¿¡ ÇÕÄ¡¸é ÆíÇÒ °ÍÀÌ´Ù. ´ë¾ÈÀ¸·Î ¸ðµâÀÌ ·çºñ ÀνºÅϽºº¯¼ö¸¦ Á÷Á¢¾²Áö ¾Ê°í ÇöÀçÀÇ °´Ã¼ ID·Î »öÀÎÇÏ¿© ÀνºÅϽº º°·Î µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ¼ö ÀÖ´Â ¸ðµâ ¼öÁØÀÇ ÇØ½Ã¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.)

¸Þ¼­µå À̸§¿¡¼­ ¸ðÈ£ÇÔ ÇØ¼ÒÇϱâ
°°Àº À̸§À» Á¸ÀçÇÒ ¼öµµ ÀÖÀ» ¶§ °Ë»ç ¼ø¼­´Â ´ÙÀ½°ú °°´Ù.
1.°´Ã¼ÀÇ Å¬·¡½º ÀÚü¸¦ ã´Â´Ù.
2.Ŭ·¡½º¿¡ Æ÷ÇÔµÈ ¹Í½ºÀÎÀ» ã´Â´Ù.
3.»óÀ§Å¬·¡½º¿Í »óÀ§Å¬·¡½º¹Í½ºÀÎÀ» ã´À´Ù.
*¿©·¯°³ÀÇ ¸ðµâÀÌ ¼¯¿©ÀÖ´Ù¸é, ¸¶Áö¸·¿¡ Æ÷ÇÔµÈ °ÍºÎÅÍ Ã£´Â´Ù.

´Ù¸¥ ÆÄÀÏ Æ÷ÇÔÇϱâ
load "·çºñÆÄÀÏ(*.rb)" # ½ÇÇàµÉ ¶§¸¶´Ù ¹«Á¶°Ç ÇØ´çÀ̸§À» °¡Áø ·çºñ ¼Ò½º Äڵ带 ·ÎµåÇÑ´Ù.
require "·çºñÆÄÀÏ" # Á» ´õ ÀÚÁÖ »ç¿ëµÇ´Â require´Â ÇØ´ç ÆÄÀÏÀ» ´Ü ÇÑ ¹ø¸¸ ·ÎµåÇÑ´Ù. ÀоîµéÀÎ ÆÄÀÏ ¸ñ·ÏÀ» ¹è¿­ $"¿¡ º¸°üÇÑ´Ù. ±×¸®°í require¹® ÀÚüµµ ½ÇÇà °¡´ÉÇÑ ±¸¹®ÀÌ´Ù. (Ãß°¡ ±â´ÉÀ¸·Î °øÀ¯µÈ ¹ÙÀ̳ʸ® ¶óÀ̺귯¸® (À©µµ¿ì *.dll ¸®´ª½º *.so)¸¦ ·ÎµåÇÒ ¼ö ÀÖ´Ù.)

µÑ ´Ù Àý´ë°æ·Î, »ó´ë°æ·Î¸¦ °¡¸®Áö ¾Ê´Â´Ù.
»ó´ë°æ·Î¸¦ ¾´´Ù¸é ·Îµå°æ·Î($:)¿¡ ÀÖ´Â ¸ðµç µð·ºÅ丮¸¦ °Ë»öÇÑ´Ù.

10Àå ±âº» ÀÔÃâ·Â

Kernel ¸ðµâ¿¡´Â ÀÔÃâ·Â °ü·ÃµÈ ¸Þ¼­µå°¡ ÀüºÎ ±¸ÇöµÇ¾î ÀÖ´Ù.
gets, open, print, printf, putc, puts, readline, readlines, testµîÀ¸·Î ÀÌ ¸Þ¼­µåµéÀº Ç¥ÁØ ÀÔÃâ·ÂÀ» Áö¿øÇÑ´Ù.
Á» ´õ ´Ù¾çÇÑ Á¦¾î°¡ ÇÊ¿äÇÏ´Ù¸é IO °´Ã¼¸¦ »ç¿ëÇÏ¸é µÈ´Ù.

IO °´Ã¼
ÀÔÃâ·ÂÀ» ´ã´çÇÏ´Â ±âº» Ŭ·¡½º IO¸¦ Á¦°øÇÑ´Ù. ÀÌ Å¬·¡½º¸¦ »ó¼ÓÇÑ FileŬ·¡½º³ª BasicSocket? Ŭ·¡½º¿¡¼­µµ ±âº» ¿øÄ¢Àº µ¿ÀÏÇÏ´Ù.

ÆÄÀÏ ¿­°í ´Ý±â
File.new("ÆÄÀϸí","r") # r, w, rw
¸¦ »ç¿ëÇØ ÆÄÀÏÀ» ¿­¼ö ÀÕÁö¸¸ ±×°Í º¸´Ù´Â File.openÀ» »ç¿ëÇϴ°ÍÀÌ ´õ ³´´Ù. º¸ÅëÀÇ °æ¿ì °°Àº ¿ªÈ°À» ÇÏÁö¸¸ ºí·ÏÀÌ °áÇÕµÇ¸é ¸Å°³º¯¼ö·Î »õ·Î ¿­¸° °´Ã¼¸¦ ³Ñ°ÜÁÖ°í ºí·ÏÀÌ Á¾·áµÇ¸é ÀÚµ¿À¸·Î closeµÈ´Ù.

Àбâ À§ÇÑ ¹Ýº¹ÀÚ
IO#each_byte { |ch| putc ch; print "." } # °¢ ¹ÙÀÌÆ®¸¦ Àо È­¸é¿¡ Á¡(.)°ú ÇÔ²² Ãâ·ÂÇÑ´Ù.
IO#each_line { |line| puts "Got #{line.dump}" } # ÇÑ ÁÙÀ» Àо ºí·ÏÀ» È£ÃâÇÑ´Ù. ±âº»ÀûÀ¸·Î \nÀ» ±¸ºÐÀÚ·Î »ç¿ëÇÏÁö¸¸ each_lineÇÔ¼ö¿¡ ¸Å°³º¯¼ö·Î ±¸ºÐÀÚ¸¦ ³Ñ°ÜÁÙ ¼ö ÀÖ´Ù.
IO#foreach # IO´ë»óÀ» ¸Å°³º¯¼ö·Î ¹Þ¾Æ¼­ Àбâ¿ëÀ¸·Î ¿­°í, °¢ ÁÙº°·Î ºí·ÏÀ» È£ÃâÇÑ ´ÙÀ½ ÀÚµ¿À¸·Î ÆÄÀÏÀ» ´Ý´Â´Ù.
IO#read # ´ë»óÀÇ Àüü¸¦ ¹®ÀÚ¿­ ÇüÅ·ΠÀд´Ù.
IO#readlines # ´ë»óÀÇ Àüü¸¦ ¹®ÀÚ¿­ ¹è¿­·Î Àд´Ù.

ÆÄÀÏ¿¡ ¾²±â
ÀÌÁø µ¥ÀÌÅ͸¦ ÀÚ½ÅÀÇ ¿ø·¡ ÇüÅ·Π¹®ÀÚ¿­¿¡ ÀúÀåÇϰíÀÚ ÇÑ´Ù¸é
¸®ÅÍ·²À» »ç¿ëÇÏ´Â °Í, ¹ÙÀÌÆ® º°·Î °¢°¢ ³Ö¾îÁÖ´Â °Í, Array#packÀ» »ç¿ëÇÏ´Â °Í 3°¡Áö ¹æ¹ý

<<¿¬»êÀÚ¸¦ ÀÌ¿ëÇØ¼­ °´Ã¼¸¦ Ãß°¡ÇÏ´Â °Í°ú ¸¶Âù°¡Áö ¹æ¹ýÀ¸·Î Ãâ·Â¿ë IO ½ºÆ®¸²¿¡ °´Ã¼¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.

¹®ÀÚ¿­¾øÀÌ ¸Þ¸ð¸®¿¡¼­ IOÀ» ÇØ¾ßÇÒ ¶§ StringIO¸¦ »ç¿ëÇÑ´Ù. StringIOÇü °´Ã¼¿¡ ¹«¾ð°¡¸¦ ¾²¸é ÀÌ °ªÀº ¹®ÀÚ¿­¿¡ ä¿öÁø´Ù.

³×Æ®¿öÅ©
require 'socket' # ¼ÒÄÏ »ç¿ë °¡´É 
... 
client = TCPSocket.open('127.0.0.1', 'finger') 
client.send("mysql\n", 0) # 0Àº Ç¥ÁØ ÆÐŶÀ» ÀÇ¹Ì 
puts client.readlines 
client.close 

require 'net/http' # lib/netÀÇ ¶óÀ̺귯¸®µéÀÌ ¿©·¯ ¾ÖÇø®ÄÉÀÌ¼Ç ·¹º§ÀÇ ÇÁ·ÎÅäÄÝ(HTTP, FTP, POP, SMTP, telnet µîÀ» Áö¿ø) 
h=Net::HTTP.new('www.red.com',80) 
response = h.get('/index.html',nil) 
if response.message == "OK" 
 puts response.body.scan(/<img src="(.*?)"/m).uniq 
end 

require 'open-uri' # open-uri¶óÀÔ »ç¿ë 
open('http://www.red.com') do |f|  #Kernel.open ¸Þ¼­µå°¡ http:// ftp://¸¦ ÆÄÀÏ À̸§Ã³·³ ÀνÄÇÑ´Ù. 
 puts f.read.scan(/<img src="(.*?)"/m).uniq 
end 

11Àå ½º·¹µå¿Í ÇÁ·Î¼¼½º

·çºñ ½º·¹µå´Â ·çºñ ÀÎÅÍÇÁ¸®ÅÍ ¾È¿¡¼­ ±¸ÇöµÇ¾úÀ¸¸ç ¿ÏÀüÇÏ°Ô ÀÌ ÇÁ·Î¼¼½º ¾È¿¡¼­ ±¸µ¿µÈ´Ù.
µû¶ó¼­ ·çºñÀÇ ½º·¹µå À̽ļºÀ¸ ¿Ïº®ÇÏ°Ô º¸ÀåµÈ´Ù. ¿î¿µÃ¼Á¦¿¡ ÀÇÁ¸ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ µ¿½Ã¿¡ ³×ÀÌÆ¼ºê ½º·¹µåÀÇ ÀÌÁ¡À» ³õÄ¡°Ô µÇ¾î ½º·¹µå ±â¾Æ Çö»ó¿¡ ºüÁú À§ÇèÀÌ ³ôÀ¸¸ç µ¥µå¶ô¿¡ ºüÁö°Ô µÈ´Ù¸é ÇÁ·Î¼¼½º Àüü°¡ ÁߴܵǴ ºÒ»ó»ç°¡ »ý±æ ¼öµµ ÀÖ´Ù.

Thread#new È£Ãâ°ú ÇÔ²² Á¦°øµÇ´Â ºí·ÏÀÌ ½º·¹µå¿¡¼­ ½ÇÇàµÉ Äڵ尡 µÈ´Ù.

Thread#join Àº ƯÁ¤ ½º·¹µå°¡ ÀÏÀ» ³¡¸¶Ä¥¶§±îÁö ±â´Ù¸°´Ù.

Thread#value ´Â ½º·¹µå°¡ ¸¶Áö¸·¿¡ È£ÃâÇÑ ¹®ÀåÀÇ °ªÀ» ¹ÝȯÇÑ´Ù.

Thread#current ÇöÀç ½º·¹µå¿¡ Á¢±Ù

Thread#list Àüü ½º·¹µåÀÇ ¸ñ·Ï

Thread#status, Thread#alive? ´Â ƯÁ¤ ½º·¹µåÀÇ »óÅÂ

Thread#priority= ƯÁ¤ ½º·¹µåÀÇ ¿ì¼± ¼øÀ§¸¦ Á¶Á¤

½º·¹µå Áö¿ª º¯¼ö¿¡ Á¢±Ù
½º·¹µå °´Ã¼°¡ ÀÏÁ¾ÀÇ ÇØ½ÃÀΰÍó·³ Á¢±ÙÇÏ¿© Áö¿ªº¯¼ö ¸íÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖ´Ù.
Thread.currentmycount
? = count # ÇöÀç ½º·¹µå¿¡ ¼ÓÇÑ Áö¿ªº¯¼ö mycount¿¡ countº¯¼ö¸¦ ´ëÀÔÇÑ´Ù.

½º·¹µå¿Í ¿¹¿Ü
abort_on_exceptionÇ÷¡±×¿Í ÀÎÅÍÇÁ¸®ÅÍÀÇ µð¹ö±× Ç÷¡±×¸¦ ¾î¶»°Ô ¼³Á¤Çß´À³Ä¿¡ µû¶ó ´Ù¸£´Ù.

abort_on_exception or µð¹ö±× Ç÷¡±× ¼³¸í
false default·Î ÇöÀç ½º·¹µå¸¸ Á¾·á ½ÃŲ´Ù.
true 󸮵ÇÁö ¾ÊÀº ¿¹¿Ü°¡ ½ÇÇàÁßÀÎ ¸ðµç ½º·¹µå¸¦ Á¾·á½ÃŲ´Ù.

puts´Â º¸ÀÌÁö ¾Ê°Ô ¸Å°³º¯¼ö Ãâ·Â°ú °³Ç๮ÀÚÇϳª¸¦ Ãâ·ÂÇÑ´Ù. ½º·¹µå ¾ÈÁ¤¼ºÀÌ ¾ø´Ù.

Thread#run, stop, pass ½º·¹µåÀÇ ½ÇÇà, Á¤Áö, ´Ù¸¥ ½º·¹µå°¡ ½ÇÇàµÇµµ·Ï ÇöÀçÀÇ Á¦¾î±ÇÀ» ±×³É ³Ñ±è

µ¿±âÈ­
Thread.critical = true ´Ù¸¥½º·¹µå¸¦ ½ºÄÉÁÙÇÏÁö ¾Ê¾Æ ½ÇÇàÀ» ¸·´Â´Ù. ÇÏÁö¸¸ »õ·Î¿î ½º·¹µå°¡ »ý¼ºµÇ¾î ½ÇÇàµÇ´Â °ÍÀº ¸·Áö ¾Ê´Â´Ù.
¾Ê¾²´Â°Ô ÁÁ´Ü´Ù-_- À§ÇèÇÏ´Ü´Ù..

´ë½Å Monitor ¶óÀ̺귯¸®, Sync ¶óÀ̺귯¸®, Mutex_m ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ´Ù.

¸ð´ÏÅÍ
MonitorÀ» »ó¼ÓÇϰųª ¹Í½ºÀÎÇÑ´Ù.
class Counter < Monitor 
 
or 
 
include MonitorMixin 
 
... 
 
synchronize do 
 ... 
end 
À» »ç¿ëÇØ¼­ µ¿±âÈ­ ½ÃŲ´Ù.

½ÇÇàÁß¿¡ »ó¼Ó ¹Þ´Â ¹æ¹ý

c = Counter.new 
c.extend(MonitorMixin) 

µ¿±âÈ­ °´Ã¼¸¦ »ý¼ºÇØ µ¿±âÈ­ ½ÃŲ´Ù.

lock = Monitor.new 
lock.synchronize { ... } 

´ÙÁß ÇÁ·Î¼¼½º ½ÇÇà
Kernel.system ÁÖ¾îÁø ¸í·ÉÀ» ÇÏÀ§ ÇÁ·Î¼¼½º¿¡¼­ ½ÇÇàÇÑ´Ù. ¼º°øÇϸé true, ¾Æ´Ï¸é false

½Ã½ºÅÛÀÇ Ç¥ÁØÃâ·ÂÀ» °¡·Îä±â À§Çؼ­´Â `(¿ªµû¿ÈÇ¥) ¹®ÀÚ·Î °¨½Î¼­ ¹Ýȯ°ªÀ» ¾òÀ» ¼ö ÀÖ´Ù.

ÈξÀ º¹ÀâÇÏ°Ô ÇÏÀ§ ÇÁ·Î¼¼½º¿Í Åë½ÅÀ» ÇØ¾ß ÇÒ °æ¿ì IO.popenÀ» »ç¿ëÇÑ´Ù.
IO.popenÀº ÇÏÀ§ ÇÁ·Î¼¼½º·Î ¸í·ÉÀ» ½ÇÇàÇϰí Ç¥ÁØ ÀԷ°ú Ç¥ÁØ Ãâ·ÂÀ» ·çºñÀÇ IO °´Ã¼¿Í ¿¬°á½ÃŲ´Ù.
ÀÔ·ÂÀÇ °æ¿ì puts°ú °°Àº Ç¥ÁØ Ãâ·Â ¸Þ¼­µåÀ» »ç¿ëÇϰí flushÀÇ ¿ëµµ·Î IO#close_write¸Þ¼­µå¸¦ »ç¿ëÇÑ´Ù.
Ãâ·ÂÀÇ °æ¿ì Ç¥ÁØ ÀÔ·Â ¸Þ¼­µå¸¦ »ç¿ëÇÔÀ¸·Î½á ¾òÀ» ¼ö ÀÖ´Ù.

IO.popenÀÇ ¸Å°³º¯¼ö¿¡ "-" (ÇϳªÀÇ ¸¶À̳ʽº ±âÈ£)¸¸ ³Ñ°ÜÁÖ¸é Æ÷Å©(fork)ÇÑ´Ù. (À©µµ¿ì¿¡¼­´Â ½ÇÇàµÇÁö ¾Ê´Â´Ù.)
¿ø·¡ ÇÁ·Î¼¼½º´Â IO °´Ã¼¸¦ ¾òÀ» ¼ö ÀÖ°í, ÀÚ½Ä ÇÁ·Î¼¼½º´Â nilÀ» ¹Þ´Â´Ù.

ÀϺΠÇ÷§Æû¿¡¼­´Â open ¸Þ¼­µå ¿Ü¿¡µµ Kernel.fork, Kernel.exec, IO.pipe ¸Þ¼­µå¸¦ Á¦°øÇÑ´Ù.
¶ÇÇÑ ¸¹Àº IO ¸Þ¼­µå¿Í Kernel.openÀÇ ÆÄÀÏ¸í °ü½À»ó ÆÄÀϸíÀÇ Ã¹¹øÂ° ¹®ÀÚ°¡ |¶ó¸é ÇÏÀ§ ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÑ´Ù. (File.new´Â ¿¹¿Ü·Î ÀÏ¹Ý ÆÄÀÏ¿¡ ´ëÇØ¼­¸¸ ÀÛµ¿ÇÏ°í ÆÄÀÌÇÁ¸¦ »ý¼ºÇÒ ¼ö ¾ø´Ù.)

µ¶¸³Àû ÀÚ¼Õ
exec("sort testfile > output.txt") if fork.nil? 
Process.wait 
ÀÚ½Ä ÇÁ·Î¼¼½º´Â sort¸¦ ÁøÇàÇÏ°í ºÎ¸ð ÇÁ·Î¼¼½º´Â ±×³É °è¼Ó ÁøÇàÇÑ´Ù.

ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ Á×À½¿¡ ÇØ´çÇÏ´Â ½Ã±×³ÎÀÎ SIGCLD¿¡ ´ëÇÑ Æ®·¦ ¼³Á¤ÀÌ´Ù.

trap("CLD") do 
 pid = Process.wait 
 puts "Child pid #{pid}: terminated" 
end 
 
exec("sort testfile > output.txt") if fork.nil? 

´õ ÀÚ¼¼ÇÑ ³»¿ëÀº Kernel.open, IO.open, Process ¸ðµâºÎºÐÀ» ã¾Æº¸±æ ¹Ù¶÷

IO.popen("date") {|f| puts "Date is #{f.gets}" } 
File#openÀÌ ±×·¯Çϵí ÄÚµå ºí·ÏÀÌ Á¾·áµÉ ¶§ ÀÚµ¿À¸·Î ´ÝÈù´Ù.

fork do 
 puts "in child, pid = #$$" 
 exit 99 
end 
 
pid = Process.wait 
puts "Child terminated, pid = #{pid}, status = #{$?.exitstatus}" #$?´Â ÇÏÀ§ ÇÁ·Î¼¼½ºÀÇ Á¾·á¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áø Àü¿ª º¯¼ö´Ù. 
Kernel#fork¿Í ºí·ÏÀ» °áÇÕÇÏ¸é ºí·Ï¾ÈÀÇ ÄÚµå´Â ·çºñ ÇÏÀ§ ÇÁ·Î¼¼½º¿¡¼­ ½ÇÇàµÇ°í, ºÎ¸ð ÇÁ·Î¼¼½º´Â ºí·Ï ÀÌÈĸ¦ ¼öÇàÇÑ´Ù.

12Àå ´ÜÀ§ Å×½ºÆ®

Test::Unit ÇÁ·¹ÀÓ¿öÅ©ÀÇ ¼¼°¡Áö ±â´É
1.°³º° Å×½ºÆ®¸¦ Ç¥ÇöÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
2.Å×½ºÆ®¸¦ ±¸Á¶È­ÇÏ´Â ÇÁ·¹ÀÓ¿öÅ©¸¦ Á¦°øÇÑ´Ù.
3.Å×½ºÆ®¸¦ ¼öÇàÇϱâ À§ÇÑ À¯¿¬ÇÑ ¹æ¹ýÀ» Á¦°øÇÑ´Ù.

´Ü¾ð¹®(assertion)

ÀоîºÃ°í ÀÏ´Ü »ý·«

13Àå ¹®Á¦°¡ ¹ß»ýÇßÀ» ¶§

·çºñ µð¹ö°Å
ruby -r debug µð¹ö±×¿É¼Ç ÇÁ·Î±×·¥ÆÄÀÏ ÇÁ·Î±×·¥¸Å°³º¯¼ö

´ëÈ­Çü ·çºñ ¼Ð
irb irb¿É¼Ç ·çºñ½ºÅ©¸³Æ® ÇÁ·Î±×·¥¸Å°³º¯¼ö

µ¿ÀÛÇÏÁö ¾Ê´Â´Ù!
1. ¹«¾ùº¸´Ù ¸í½ÉÇÒ Á¡Àº ¸ÕÀú °æ°í°¡ Ãâ·ÂµÇµµ·Ï Çϸ鼭 ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ´Â °ÍÀÌ´Ù. (-w ¸í·ÉÇà ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.)
2. ¸Å°³º¯¼ö ¸ñ·Ï(ƯÈ÷ Ãâ·Â¿ë)¾È¿¡¼­ ','À» ¾²´Â °ÍÀ» Àؾî¹ö·È´Ù¸é ¸Å¿ì ÀÌ»óÇÑ ¿¡·¯ ¸Þ½ÃÁö°¡ ³ª¿Ã ¼ö ÀÖ´Ù.
3. ¼Ò½ºÄÚµåÀÇ ¸¶Áö¸· ÁÙ¿¡¼­ ÇØ¼® ¿¡·¯(parse error)°¡ ³ªÅ¸³ª´Â °ÍÀº ´ëºÎºÐ end Ű¿öµå¸¦ À߸ø »ç¿ëÇÑ °æ¿ì´Ù.
4. ¼Ó¼º ¼³Á¤ ¸Þ¼­µå°¡ È£ÃâµÇÁö ¾Ê´Â´Ù. Ŭ·¡½º Á¤ÀÇ ³»¿¡¼­ ·çºñ´Â setter=¸¦ ¸Þ¼­µå È£ÃâÀÌ ¾Æ´Ñ Áö¿ª º¯¼ö¿¡ ´ëÇÑ ´ëÀÔÀ¸·Î ÇØ¼®ÇÑ´Ù.
class Incorrect 
{ 
 attr_accessor :one :two 
 def initialize 
  one = 1 # Áö¿ª º¯¼öÀÌ´Ù. 
  self.two = 2 
 end 
} 
5. ÀûÀýÈ÷ ÃʱâÈ­ µÇÁö ¾Ê´Â °Íó·³ º¸ÀÌ´Â °´Ã¼´Â initialize¸Þ¼­µå À̸§À» À߸ø ¾´ °ÍÀ̰ųª ÀνºÅϽº º¯¼ö À̸§À» À߸ø ¾´ °æ¿ìÀÏ ¼öµµ ÀÖ´Ù.
6. ºí·Ï Çü½Ä Àμö´Â Áö¿ª º¯¼ö¿Í µ¿ÀÏÇÑ ¹üÀ§¸¦ °®´Â´Ù. ±âÁ¸ÀÇ Áö¿ª º¯¼ö¿Í °°Àº À̸§À» °®´Â ºí·Ï Çü½ÄÀμö°¡ ºí·ÏÀ» ½ÇÇàÇÒ ¶§ Á¸ÀçÇÑ´Ù¸é, Áö¿ªº¯¼ö´Â ºí·Ï È£Ãâ¿¡ ÀÇÇØ¼­ °ªÀÌ º¯°æµÈ´Ù. À̸§À» Áߺ¹ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
7. ¿ì¼±¼øÀ§´Â do~endº¸´Ù {}ÀÌ ³ô´Ù.
def one(arg) ~ end 
def two ~ end 
result1 = one two { ~ } # two¿¡¼­ ºí·ÏÀÌ È£ÃâµÈ´Ù. 
result2 = one two do ~ end # one¿¡¼­ ºí·ÏÀÌ È£ÃâµÈ´Ù. 
8. Å͹̳ο¡ ´ëÇÑ Ãâ·ÂÀº ¹öÆÛ¸µµÈ´Ù. ¹öÆÛ¸µÇÏÁö ¾Ê´Â I/O (sync = true ¿É¼Ç)À» »ç¿ëÇÏ¸é µÈ´Ù.
9. ¼ýÀÚ°¡ ¿Ã¹Ù¸£Áö ¾Ê´Ù¸é ¹®ÀÚ¿­ ŸÀÔÀÏ °ÍÀÌ´Ù. Integer()È£Ãâ·Î ¼ýÀÚ Çü½ÄÀ¸·Î ¹Ù²Ù¾îÁÙ Çʿ䰡 ÀÖ´Ù.
num1, num2 = line.split(/,/) # num1,num2´Â ¹®ÀÚ¿­ Çü½ÄÀÌ´Ù. 
 
num1 = Integer(num1) 
num2 = Integer(num2) 
 
# or 
 
num1, num2 = line.split(/,/).map { |val| Integer(val) } 
10. ÀǵµÇÏÁö ¾ÊÀº º°Äª - ¾î¶² °´Ã¼¸¦ ÇØ½Ã¿¡ ´ëÇÑ Å°·Î »ç¿ëÇÑ´Ù¸é, ±× °´Ã¼°¡ ÀÚ½ÅÀÇ ÇØ½Ã°ªÀ» º¯°æÇÏÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. º¯°æµÈ´Ù¸é Hash#rehashÈ£ÃâÇØ ´Ù½Ã ÇØ½Ã¸¦ ±¸¼ºÇØ¾ß ÇÑ´Ù.

11. »ç¿ëÁßÀÎ °´Ã¼ÀÇ Å¬·¡½º´Â °³¹ßÀÚ°¡ »ý°¢ÇÏ´Â °Í°ú µ¿ÀÏÇØ¾ß ÇÑ´Ù. Àǽɽº·´´Ù¸é my_obj.classÈ£Ãâ·Î È®ÀÎ °¡´ÉÇÏ´Ù.
12. ¸Þ¼­µå À̸§Àº Ç×»ó ¼Ò¹®ÀÚ·Î ½ÃÀÛÇϰí, Ŭ·¡½º¿Í »ó¼ö À̸§Àº Ç×»ó ´ë¹®ÀÚ·Î ½ÃÀÛÇÑ´Ù.
13. ¸Þ¼­µå È£ÃâÀÌ ±â´ë¿Í °°ÀÌ µ¿ÀÛÇÏÁö ¾ÊÀ¸¸é ¸Å°³º¯¼ö¸¦ °ýÈ£·Î ¹­¾î º¸ÀÚ.
14. ¸Þ¼­µå Çü½Ä Àμö ¸ñ·ÏÀ» ¿©´Â °ýÈ£°¡ ¸Þ¼­µå À̸§ µÚ¿¡ °ø¹é ¾øÀÌ ºÙ¾î ÀÖ´ÂÁö È®ÀÎÇØ¾ßÇÑ´Ù.
15. irb¿Í µð¹ö°Å¸¦ »ç¿ëÇÑ´Ù.
16. Object#freeze¸¦ ÀÌ¿ëÇÏ¿© ÄÚµåÁß ¾Ë ¼ö ¾ø´Â ºÎºÐ¿¡¼­ º¯¼ö¸¦ ¾û¶×ÇÏ°Ô ¹Ù²î´ÂÁö È®ÀÎ ÇÒ ¼ö ÀÖ´Ù.
17. ¾ÖÇø®ÄÉÀ̼ÇÀº Á¡ÁøÀûÀ¸·Î °³¹ßÇ϶ó.
18. Test::UnitÀ» ÀÌ¿ëÇØ TDD¸¦ Ç϶ó.

º¥Ä¡¸¶Å©
Benchmark ¸ðµâ
ÁÖÀÇ ÇØ¾ß ÇÒ Á¡Àº °¡ºñÁö Ä÷ºÅͰ¡ º¥Ä¡¸¶Å©Áß ÀϾ´Ù¸é ¼º´ÉÀ» À߸ø ÃøÁ¤ÇÒ ¼ö Àִµ¥ Å×½ºÆ®¸¦ µÎ¹ø ¼öÇàÇÏ´Â bmbm¸Þ¼­µå°¡ Á¸ÀçÇÑ´Ù. µÎ¹ø ¼öÇàÇÔÀ¸·Î »ó´ëÀûÀ¸·Î °¡ºñÁö Ä÷ºÅÍ¿¡ ÀÇÇÑ ¿Ö°îÀ» ÁÙÀÏ ¼ö ÀÖ´Ù.

ÇÁ·ÎÆÄÀÏ·¯
·çºñ¿¡¼­ Á¦°øÇÏ´Â ÇÁ·ÎÆÄÀÏ·¯¸¦ »ç¿ëÇÏ·Á¸é
¸í·ÉÇà ¿É¼Ç -r profile
ÄÚµå ³»ºÎ require 'profile'

2ºÎ ·çºñ ¼¼ÆÃÇϱâ

14Àå ·çºñ¿Í ¼¼»ó
15Àå ´ëÈ­Çü ·çºñ ¼Ð
16Àå ·çºñ ¹®¼­È­
17Àå ·çºñÁªÀ» ÀÌ¿ëÇÑ ÆÐŰÁö °ü¸®

18Àå ·çºñ¿Í À¥

CGI ½ºÅ©¸³Æ® ÀÛ¼ºÇϱâ
ÃʱâÀÇ À¥ÇÁ·Î±×·¡¹ÖÀº ¸ðµÎ CGI ÇÁ·Î±×·¥À¸·Î ÀÛ¼ºµÇ¾ú´Ù. CGI´Â º°µµ·Î ½ÇÇà°¡´ÉÇÑ ¸í·ÉÇà ÇÁ·Î±×·¥ÀÇ ÇüÅ·ΠÀÛ¼ºµÇ¸ç, À¥¼­¹ö¿Í Ç¥ÁØ ÀÔÃâ·Â ¶Ç´Â ȯ°æº¯¼ö¸¦ ÅëÇØ¼­ µ¥ÀÌÅ͸¦ ÁÖ°í ¹Þ¾Ò´Ù. ¿©±â¼­ Ç¥ÁØ ÀÔÃâ·ÂÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ̳ª, »ç¿ëÇÒ È¯°æ º¯¼ö Á¤ÀÇ µîÀÌ CGIÀ̸ç, ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º¸¦ µû¸£´Â ÇÁ·Î±×·¥Àº CGI ÇÁ·Î±×·¥À̶ó°í ÇÑ´Ù.
#!/usr/bin/ruby 
print "HTTP/1.0 200 OK\r\n" 
print "Content-type: text/html\r\n\r\n" 
print "<html><body>Hello World!</body></html>\r\n" 
À¥¼­¹ö°¡ ÀÚµ¿À¸·Î Çì´õ¸¦ ºÙ¿©ÁÖÁö ¾Ê´Â´Ù¸é ÀÌ·¸°Ô Á÷Á¢ Çì´õ¸¦ Ãß°¡ÇØ¾ß ÇÑ´Ù.
±×¿Ü¿¡µµ ¿äÃ»ÇØ¼®, ¼¼¼Ç°ü¸®, Äí±â´Ù·ç±â, Ãâ·Â À̽ºÄÉÀÌÇεîÀ» Á÷Á¢ ¸¸µé¾î¾ß ÇÏÁö¸¸ À̰͵éÀ» ½±°Ô ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ Á¸ÀçÇÑ´Ù.

cgi.rb »ç¿ëÇϱâ
URL°ú HTML Äڵ带 ´Ù·ê ¶§, ¾î¶² ¹®ÀÚ´Â ÁÖÀÇÇØ¼­ ´Ù·ç¾î¾ß ÇÑ´Ù.
¹®ÀÚ URLÄÚµå
/ %2F
(°ø¹é) +
& %26

·çºñ¿¡¼­´Â ÀÌ·± URL escape¹®ÀÚ¸¦ ´Ù·ç±â À§ÇÑ ¹æ¹ýÀÌ Á¸ÀçÇÑ´Ù.
CGI.escape()¿Í CGI.unescape()Àε¥ ¹®ÀÚ¿­À» esacape ¹®ÀÚ¿­·Î º¯È¯/¿ªº¯È¯ ½ÃÄÑÁØ´Ù.

HTML Ư¼ö¹®ÀÚ´Â CGI.escapeHTML()°ú CGI.unescapeHTML()ÀÌ ÀÖ´Ù.
HTMLÀÇ ¿ä¼ÒÁß¿¡ Ưº°È÷ ÀÓÀÇÀÇ ¿ä¼Ò¸¸ À̽ºÄÉÀÌÇÁ Çϱâ À§Çؼ­´Â CGI.escapeElement(), CGI.unescapeElement()¸¦ »ç¿ëÇÑ´Ù.

Äõ¸® ¸Å°³º¯¼ö
HTTP¿¡ ´ëÇÑ ¿äûÀº ¸Å°³º¯¼ö¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.
ÀÌ ¸Å°³º¯¼ö´Â URLÀϺΠ¶Ç´Â º»¹®³»¿¡ ³»ÀåµÈ ÇüÅ·ΠÀü´ÞµÈ´Ù.

CGI Ŭ·¡½º´Â Æû µ¥ÀÌÅ͸¦ Á¢±ÙÇϱâ À§ÇØ ¸î°¡Áö ¹Ù¾÷À» Á¦°øÇÑ´Ù.
ù°. CGI°´Ã¼¸¦ ÇØ½Ãó·³ °£´ÜÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹®Á¦´Â ÇϳªÀÇ À̸§¿¡ ¿©·¯ °ªÀÌ Æ÷ÇԵǸé Çϳª¸¸ ¹Þ¾Æ¿Ã¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù.
¿¹) cgi = CGI.new
cgi'name'
? # -> À̸§
cgi'reason'? # -> flexible
µÎ¹øÂ°. CGI#param()¸¦ ÀÌ¿ëÇØ ³Ñ°Ü¿À´Â ¸ðµç°ªÀ» ¿äûÇÒ ¼ö ÀÖ´Ù. ¿ª½Ã³ª ÇØ½ÃÀÇ ÇüÅ·Π³Ñ¾î¿ÀÁö¸¸ °¢ °ªÀº ¹è¿­ÀÇ ÇüÅ·Π³Ñ¾î¿Â´Ù. À§ÀÇ ¹®Á¦Á¡À» ÇØ°áÇÑ ¹æ¹ýÀÌ´Ù.

ƯÁ¤ ¸Å°³º¯¼ö°¡ ¿äû¾È¿¡ Á¸ÀçÇÏ´ÂÁö ¿©ºÎ´Â CGI#has_key?¸¦ ÀÌ¿ëÇØ ¾Ë ¼ö ÀÖ´Ù.

HTML »ý¼ºÇϱâ

19Àå ·çºñ Tk

20Àå ·çºñ¿Í À©µµ¿ì(Microsoft Windows)

21Àå ·çºñ È®ÀåÇϱâ

3ºÎ ·çºñ ¿Ï¼ºÇϱâ

22Àå ·çºñ ÇÁ·Î±×·¡¹Ö ¾ð¾î
23Àå ¿À¸® ŸÀÔ
24Àå Ŭ·¡½º¿Í °´Ã¼
25Àå ·çºñ ¾ÈÀüÇÏ°Ô ½ÇÇàÇϱâ
26Àå ¸®Ç÷º¼Ç, ObjectSpace
?, ºÐ»ê ·çºñ

4ºÎ ºÎ·Ï

ºÎ·Ï A Áö¿ø
ºÎ·Ï B Âü°í ÀÚ·á
ºÎ·Ï C À¯´Ï ÄÚµå Áö¿ø(by °­¹®½Ä)
ºÎ·Ï D °³¹ß ȯ°æ(by °­¹®½Ä)

(º°Ã¥) 5ºÎ ·çºñ ¶óÀ̺귯¸® ·¹ÆÛ·±½º

27Àå ³»Àå Ŭ·¡½º¿Í ¸ðµâ
28Àå Ç¥ÁØ ¶óÀ̺귯¸®

(º°Ã¥) 6ºÎ ºÎ·Ï

ºÎ·Ï A ¼ÒÄÏ ¶óÀ̺귯¸®
ºÎ·Ï B MKMF ·¹ÆÛ·±½º


PythonPowered EditText of this page (last modified 2008-11-05 11:01:08)
FindPage by browsing, searching, or an index
Or try one of these actions: DeletePage, DeleteUploadedFile, LikePages, SpellCheck, UploadFile