본문 바로가기
old/Web Application 개발 이야기

1. 루비(Ruby) 언어 정리(기본 문법)

by 열야 2010. 1. 27.

루비온레일즈를 파보기로 했다. 이런거는 최대한 빨리 끝내는 게 좋다는 생각과 함께 책을 독파하기로 했다.
루비의 기본적인 문법은 모두 끝낸 것 같은데, 물론 어려운 부분이 더욱 많이 남아 있을 것 같긴 하지만 정리해보기로 한다.

루비 온라인 도움말 보기 명령어 "ri"
>ri puts
linux/unix환경에서 c온라인 메뉴얼 보는 man 명령어와 같은 느낌이라고 생각할 수 있다.

수치데이터 다루기
 - 수치데이터의 크기 제한이 없다.
 - 세자리에 하나씩 _를 넣어서 표현 가능 ex. 12_345_678
 - 0x, 0, 0b는 C와 동일한 효과

문자열 조작
perl이나 php와 동일한 방법을 사용한다.
''와 ""으로 감쌀 수 있다. ""의 경우  escape character을 사용할 수 있다.
%q또는 %Q 또는 %로 문자열을 만들 수 있다.
ex1. %q/Yes you are/
ex2. %q$Yes you are$
ex3. %q(Yes you are)
ex4. %Q/Yes you are/
ex5. %/Yes you are/

문자열은 + 연산자를 사용해서 붙일 수 있다.

HERE문서를 사용하여 여러줄의 문자열을 한번에 만들 수 있다.
print << HERE
NOW
is
Hi
HERE

이와 같이 하면 HERE로 감싸진 3줄이 문자열이 된다. "HERE"대신 대문자로 된 어떤 단어든 상관 없다.

변수에 데이터 저장
변수에 데이터 저장할 수 있다. 변수는 절대로 소문자로 시작한다!!
(소문자로 시작하면 변수, 대문자로 시작하면 상수로 자동 선언된다.)

상수
상수는 대문자로 시작한다. 일반적으로는 모두 대문자로 쓰는 관습이 있다.
ex. IP_SERVER_SOURCE = "903.111.333.055"

큰 따옴표 문자열 안에 변수 값 삽입
변수값을 삽입하기 위해서는 #{}을 사용한다.
temperature = 36
puts "The temperature is " + String(temperature) + "."
이를 다음과 같이 변경할 수 있다.
puts "The temperature is #{temperature}."
#{}안에는 변수 이외에도 다양한 표현식을 써 넣을 수 있다.
puts "The temperature is #{temperature + 5}."

명령행 사용자 입력 받기
사용자로 부터 입력을 받기 위해서 gets 함수를 사용한다. C에서 scanf나 gets와 동일하다고 해야 겠다.
다만 이 함수를 사용하면 사용자가 입력한 개행문자(\n)도 같이 들어오므로 비교하기 전에 개행문자를 때야한다.
print "Please enter the temperature: "
gets
chomp
puts "The temperature is #{$_}."
gets로 입력된 값은 변수에 저장할 수도 있으나, 저장하지 않으면 default 변수인 $_에 저장된다. chomp는 개행문자를 때주는 함수인데, 변수지정이 불가능하며 무조건 $_의 마지막 개행 문자를 때준다.

심볼정의 (다른 곳에 없는 재미있는 기능..잘 쓰면 메모리 절약)
:temperature
:ISP_address
:row_delimiter
그냥 문자열 같은 존재들이다. 다만 변수에 문자열을 넣으면 문자열을 만들 때 마다 다른 메모리 영역이 발생하지만 심볼은 여러번 사용해도 한 영역만 존재한다.
(그러나, 과연 얼마나 쓸모가 있을런지.. ㅡ.ㅡ;;)

연산자 사용하기
* 곱하기
- 빼기
/ 나누기
%나머지
** 제곱
= 삽입
%=, /=, -=, +=, *=, **= 한번에 하는 것들
[] 배열 참조
[]= 배열 삽입
! 부정
~ 보수 (complement)
>> 우측 쉬프트
<< 좌측 쉬프트
& 비트 AND
^ 비트 XOR
| 비트 OR
<=, <, > , >= 비교
<=> 작으면 음수, 같으면 0 크면 양수
== 같다.
=== case문의 when절에서 사용되는 동치 연산자 (==와 동일한데 when절에서만 사용된다.)
!= 같지 않다.
=~ regular expression 적용할 때 사용하는 연산자
!, not 논리 부정
&&, and 논리곱
||, or 논리합
.. 범위 연산자 (마지막 값 포함)
... 범위 연산자(마지막 값 제외)
? 3항 if연산자
: 3항 if연산자에 포함되는 콜론 기호
defined? 어떤 심볼이 정의되어 있으면 참
if 조건문
unless if안에 not을 붙인거와 동일
while 참인동안 루프
until 참이 될때까지 루프
begin/end 블록 표현식

배열
배열은 []을 사용하여 정의할 수 있다.
array = [1, 2, 3]
puts array[0]
puts array[1]
puts array[2]

배열은 변수와 마찬가지로 암꺼나 넣을 수 있다.
array = ["Hello", "there", "sweetie", 1, 2, 3]
배열을 역순으로 훑을 때 편하게 사용하라고 다음 기능도 제공한다.
array[-1] 은 3
array[-2] 은 2
...
array[-6] 은 "Hello"

두개의 첨사 사용법
array[1, 2] 는 array[1]부터 시작해서 2개를 뜻한다.
array[1,2] = "here"를 하면 ["Hello", "Here", 1, 2, 3] 가 된다.
array[1,0] = "here"를 하면 ["Hello", "Here", "there", "sweetie", 1, 2, 3] 가 된다.

해쉬
해쉬는 {}을 사용한다. 그러나 값을 읽을 때는 []을 사용한다.
meney_I_am_owed = { "Dan" => "$1,000,000", "Claire"=>"$500,000"}
puts["Dan"]

범위
my_range = 1..4   #1, 2, 3, 4가 들어간다.
이를 array로 바꿔서 출력하면..
puts my_range.to_a
1
2
3
4
가 출력된다.

일단 1편 끝...