1. 기본문법1 (Ruby.new)

IT(Old)/RubyOnRails 2008. 1. 15. 11:15

1 .객체 생성
생성자라는 것에 의해 객체가 생성됨. new가 standard constructor

song1 = Song.new("Ruby Tuesday")
song2 = Song.new("Enveloped in Python")
# and so on

2. method call

"gin joint".length     >> 9
"Rick".index("c")    >> 2
-1942.abs              >> 1942
sam.play(aSong)    >> "duh dum, da dum de dum ..."

3. A method that return a string

def sayGoodnight(name)
  result  = "Goodnight, " + name
  return result
end

# Time for bed ...
puts sayGoodnight("John-Boy")
puts sayGoodnight("Mary-Ellen")

>> Goodnight, John-Boy
>> Goodnight, Mary-Ellen

puts sayGoodnight "John-Boy1"
puts sayGoodnight("John-Boy2")
puts (sayGoodnight "John-Boy3")
puts (sayGoodnight ("John-Boy4"))

>> Goodnight, John-Boy1
>> Goodnight, John-Boy2
>> Goodnight, John-Boy3
>> Goodnight, John-Boy4

4. double-quoted strings

- ""안에서 개행문자는 \n을 사용한다.
puts "And Goodnight, \nGrandma"

>> And Goodnight,
>> Grandma

- ""안에서 변수는 #{expression} 을사용한다
def sayGoodnight(name)
  result = "Goodnight, #{name}:
  return result
end


5. 명명규칙

Local variables, method paramethers 그리고 method names은 소문자로 시작되어야 한다.
class, module , constants는 대문자로 시작하자.
global variables$를 이름앞에 붙인다.
instance variables@을 이름앞에 붙인다.
class variables@@을 이름앞에 붙인다.

local : name, fishAndChips, x_axis, thx1138, _26
global : $debug, $CUSTOMER, $_, $plan9, $Global
instance : @name, @point_1, @X, @_, @plan9
Class : @@total, @@symtab, @@N, @@x_pos, @@SINGLE
Constatns and Class Names : PI, FeetPerMile, String, MyClass, Jazz_Song


6. 배열과 해쉬

배열과 해쉬는 indexed collections이다. 둘다 key를 사용하여 접근 가능하다.
배열은 정수를 키로, 해쉬는 객체를 키로 사용한다.
이것들은 서로 다른타입을(integer, string, floating point number) 객체로 가질수 있다.

a = [1, 'cat', 3.14] # array with three elements
# access the first element
a[0]     >> 1
# set the third element
a[2] = nil
# dump out the array
a         >>  [ 1, "cat", nil]

Array.new를 사용하여 생성할 수도 있다.
empty1 = []
empty2 = Array.new

때때로 단어들을 사용하는 배열은 귀찮을 수가 있다. 왜냐 모두 quote로 묶어야 돼니까.
그걸위해 %w를 사용해라

a = %w{ ant bee cat dog elk }
a[0]    >> "ant"
a[3]    >> "dog"

해쉬를 사용하는 것은 배열과 비슷하다.

instSection = {
  'cello' => 'string',
  'clarinet' => 'woodwind',
  'drum => 'percussion',
  'oboe'  => 'woodwind',
  'trumpet' =>'brass',
  'violin'  => 'string'
}

instSection['oboe']  >> "woodwind:
instSection['cello']  >> "string"
instSection['bassoon'] >> nil

세번째 nil은 존재하지 않는다는 것을 의미한다.
nil은 조건식에서 false를 의미할 때 사용한다. 이 기본값을 바꾸길 원할것이다.
그거시 기본값으로 0을 가지긴 쉽다. 생성자로 생성할때 empty경우 기본값을 세팅하면 되거든

histogram = Hash.new(0)
histogram['key1']               >> 0
histogram['key1'] = histogram['key1'] + 1
histogram['key1']               >> 1

7. 조건문 반복문

일반적인 사용예)

if count > 10
  puts "Try again"
elsif tries == 3
  puts "You lose"
else
  puts "Enter a number"
end

while weight < 100 and numPallets <= 30
  pallet = nextPallet()
  weight += pallet.weight
  numPallets += 1
end

간단히 바꾸기
if radiation > 3000
  puts "Danger, Will Robinson"
end
=>
puts "Danger, Will Robinson" if radiation > 3000

while square < 1000
  square = square * square
end
=>
square = square*square while square < 1000


8. 정규표현식(Regualr Expressions)

/Perl|Python/  => /P(erl|ython)/
/\d\d:\d\d:\d\d/   # a time such as 12:34:56
/Perl.*Python/              # Perl, zero or more other chars, then Python
/Perl\s+Python/          # Perl, one or more spaces, then Python
/Ruby (Perl|Python)/    # Ruby, a space, and either Perl or Python

만약 해당되는 문자열이 =~ 다음에 포함되어 있으면(같은것이 아니고 포함) true, 아니면 false(nil)

line = 'Perl1'
if line =~ /Perl|Python/
  puts "aaa"
else
  puts "bbb"
end

>> aaa

문자열 변환

line = 'Perl123'
puts line.sub(/Perl/, 'Ruby')
>> Ruby123

9. Blocks and Iterators

{puts "Hello" }           # this is a block

do                            #
  club.enroll(person)  # and so is this
  person.socialize     #
end                         #

yield를 사용해서 method는 한번이상 invoke될수 있다.

def callBlock
  yield
  yield
end

callBlock { puts "In the block" }
>>
In the block
In the block

In the block이 두번 실행되엇다.
yield는 "|" 사이에 있는 파라미터를 받을수 있다.

def callBlock
  yield ,
end
callBlock { |, | ... }

Iterator사용
a = %w(ant bee cat dog elk)     # create an array
a.each {|animal| puts animal } # iterate over the contents
>>
ant
bee
cat
dog
elk


['cat','dog','horse'].each do |animal|
   print animal, " -- "
end
>> cat -- dog -- horse --

5.times {print "*"}
3.upto(6) {|i| print i}
('a'..'e').each{|char| print char}
>> *****3456abcde


10. Reading and 'Riting

printf "Number: %5.2f, String:%s", 1.23, "hello"
>> Number:  1.23, String:hello
C와 비슷

line = gets
print line

gets는 콘솔로부터 값을 받는구나


while gets
   if /Ruby/
     print
   end
end

이건 Ruby라는 단어를 치면 Ruby를 출력
>>
asdf
fds
sdf
g
Ruby
Ruby
asdf
Ruby
Ruby
ruby
Ruby
Ruby