루비의 몇가지 특징
● 루비에서 모든 것은 객체(Object)이다.(심지어 nil도 객체다.)
● 루비는 한줄에 하나의 표현식을 사용할 때는 끝에 세미콜론(;) 생략가능
● #는 한줄 주석
● 변수선언은 별도로 하지 않아도 됨(대입할 때 자동으로 만들어짐)
● 명시적으로 구분가능할 때는 괄호()가 생략 가능함
puts test("aaa")
puts(test("aaa")) 이 둘은 같은 의미
● null을 nil이라고 표현함puts(test("aaa")) 이 둘은 같은 의미
● ++, -- 같은 자동증가, 자동감소 연산자는 없음 (+=, -= 를 사용)
● 숫자 0이 false로 자동 변환되지 않음(nil과 false가 아닐때만 참이 됨)
● 논리연산자
&&가 and보다 우선순위 높음
||가 or보다 우선순위 높음
and와 or은 우선순위가 같지만 &&는 ||보다 우선순위 높음
not과 !는 같은 기능 (!가 우선순위 높음)
and,or,&&,|| 은 참거짓을 결정하는 피연산자의 값을 반환
● 병렬 대입 가능||가 or보다 우선순위 높음
and와 or은 우선순위가 같지만 &&는 ||보다 우선순위 높음
not과 !는 같은 기능 (!가 우선순위 높음)
and,or,&&,|| 은 참거짓을 결정하는 피연산자의 값을 반환
a, b = 1, 2 를 실행하면 a에는 1, b에는 2가 대입
좌변의 갯수가 많으면 남은 값은 nil 이 됨
우변의 갯수가 많으면 남은 값은 무시됨
b, *c = a 에서 a가 [1,2,3,4]일 때 b는 1, c는 [2,3,4] 가 됨
b, c = *a 에서 a가 [1,2,3,4]일 때 b는 1, c는 2가 됨
● 치환좌변의 갯수가 많으면 남은 값은 nil 이 됨
우변의 갯수가 많으면 남은 값은 무시됨
b, *c = a 에서 a가 [1,2,3,4]일 때 b는 1, c는 [2,3,4] 가 됨
b, c = *a 에서 a가 [1,2,3,4]일 때 b는 1, c는 2가 됨
a, b = b, a 를 실행하면 a와 b의 값이 치환됨
● 범위1..10 은 경계값 포함 즉, 1~10 (점2개)
1...10 는 종료값 포함안함 즉 1~9 (점3개)
● 콜론(:)의 사용1...10 는 종료값 포함안함 즉 1~9 (점3개)
:test 는 test에 해당하는 Symbol객체 반환 즉, test 변수
test는 test의 값
● 해시test는 test의 값
{ 'key1' => 'value1', 'key2' -> 'value2'}와 같이 해시 정의함(key1은 유일한 값)
test = Hash.new(0) 과 같이 기본값 지정 가능
없는 값은 nil 반환
● 정규식test = Hash.new(0) 과 같이 기본값 지정 가능
없는 값은 nil 반환
/패턴/ 과 같이 사용
=~(참매치), !~(거짓매치로) 문자열 검사가능 매치되면 첫위치 아니면 nil 반환
● 대입문의 결과값은 항상 매개변수의 값이다.=~(참매치), !~(거짓매치로) 문자열 검사가능 매치되면 첫위치 아니면 nil 반환
● 객체 비교
== : 두 값이 같은지 비교
=== : case구분의 when항목이 비교할 대상과 동일한지 비교
<=> : 일반적인 비교(완쪽이 작으면 -1, 같으면 0, 왼쪽이 크면 +1)
<,<=,>=,> : 작다,작거나같다,크거나같다,크다
eql? : 왼쪽과 오른쪽이 서로 같은 타임이며 같은 값을 가질때만 참
equal? : 왼쪽과 오른쪽이 같은 객체 ID일 경우만 참
● 문자리터럴=== : case구분의 when항목이 비교할 대상과 동일한지 비교
<=> : 일반적인 비교(완쪽이 작으면 -1, 같으면 0, 왼쪽이 크면 +1)
<,<=,>=,> : 작다,작거나같다,크거나같다,크다
eql? : 왼쪽과 오른쪽이 서로 같은 타임이며 같은 값을 가질때만 참
equal? : 왼쪽과 오른쪽이 같은 객체 ID일 경우만 참
홑따옴표( ' )는 그대로 객체가 됨 (ex: 'test')
쌍따옴표는 이스케이프 함(ex: "test")
쌍따옴표는 이스케이프 함(ex: "test")
\n등을 이스케이프해줌
#{expression}와 같은 표현식 삽입(expression interpolation)을 표현값으로 변환해준다.
#{expression}와 같은 표현식 삽입(expression interpolation)을 표현값으로 변환해준다.
조건문
● IF 문
● UNLESS문
● WHILE 문
● UNTIL문
● CASE문
● FOR ... IN 문
● 반복문에서 실행흐름 바꾸기
break : 반복문 종료
redo : 현재의 반복을 다시 수행하지만 다음 원소를 가져오거나종료조건을 재평가하지 않음
next : 다음 반복을 시작함
retry : 반복문을 처음부터 다시 실행
redo : 현재의 반복을 다시 수행하지만 다음 원소를 가져오거나종료조건을 재평가하지 않음
next : 다음 반복을 시작함
retry : 반복문을 처음부터 다시 실행
네이밍(Naming)
● 루비에서는 이름의 첫글자가 용도를 결정함.
● 지역변수, 메서드, 파라미터 : 소문자나 밑줄(_)로 시작
● 클래스, 모듈, 상수 : 대문자로 시작
● 전역변수 : $로 시작( $변수명)
● 인스턴스변수 : @로 시작 (@변수명)
● 클래스변수 : @@로 시작 (@@변수명) -> 사용전에 반드시 초기화해야 함
메서드
● 메서드는 다음과 같이 정의함
클래스
● 클래스는 다음과 같이 정의함
● GET 메서드
def test
@test
end
@test
end
인스턴스 변수에 대한 접근 메서드를 위과 같의 정의할 수 있다.
attr_reader를 이용해서 같은 기능을 축약해서 쓸 수 있음
attr_reader를 이용해서 같은 기능을 축약해서 쓸 수 있음
attr_reader :test, :name
● SET 메서드def test=(new_test)
@test = new_test
end
인스턴스 변수에 할당이 가능하도록 위와같이 정의할 수 있다.
attr_writer를 이용해서 같은 기능을 축약해서 쓸 수 있음
● GET/SET 메서드@test = new_test
end
인스턴스 변수에 할당이 가능하도록 위와같이 정의할 수 있다.
attr_writer를 이용해서 같은 기능을 축약해서 쓸 수 있음
attr_writer :test
다음과 같이 사용하면 GET/SET 메서드를 한꺼번에 만들 수 있음.
attr_accessor :test
● 인스턴스 메서드와 클래스 메서드attr_accessor :test
접근 권한
● 클래스의 메서드는 기본적으로는 public임(initialize만 항상 private)
코드블록
● 코드블록은 2가지 방법으로 정의가 가능함.
1. { 내용 }
2. do
내용
end
● 우선순위는 {}방식이 더 높음.2. do
내용
end
● 메서드뒤에 코드블록을 적어줌으로써 결합된 메서드에서 yield문으로 코드블록 호출가능
● yield(파라미터) 와 같이 적으면 코드블록에서는 파이프( | )로 연결
간단히 차이점위주로 기억해둬야할 걸 정리하려고 했는데 하다보니 생각보다 많군요. ㅎ
좋은 자료 잘 읽었습니다. 요즘 루비온테일즈로 사이트나 만들어볼까 생각에 나름 신기술이라 자료가 별로 없네요. 그래서 이곳저곳 뒤지다가 좋은 자료 발견 한 것 같습니다.
감사합니다.
루비온레일즈도 좀 공부하다가 지금은 손도 못대고 있네요. ^^