[Ruby] 루비 문법 기초
루비 메소드
메소드 형식)
def 이름 (arg1, arg2)
return arg
end
호출 방식) 이름 arg1, arg2
형태로 메소드이름 [띄어쓰기] 인자
방식으로 호출
루비_ 모듈 vs 클래스의 차이점
모듈 - 기능, 다양한 클래스에서 사용가능한 메소드를 제공하는 라이브러리 슈퍼클래스 - object
클래스 - 객체 슈퍼클래스 - module
모듈의 형식
module 이름
moudle_function() # 모듈을 함수로 만들어주는 함수
def func1()
return a
end
end
다른 파일에서 모듈 호출방법은 require_relative ‘파일이름’ #relative는 현재 디렉토리에서 파일을 불러온다.
파일이름.func1()
-module_function() : module안에 있는 모든 함수들을 모듈의 함수로 만들어 주는 함수. 즉, 모듈.함수이름 형식으로 접근이 가능하게 만들어준다.
모듈은 파이썬에서의 import랑 비슷하다.
do ~ end
- 익명함수. 익명함수로서 메소드에 전달된다.
unless
- if 내의 조건에 not이 붙은것과 동일한 효과다. 하지만, else if 를 사용할수 없다.
unless 조건 #코드 else #코드 end
변수 앞에 @ 뜻
- 인스턴스(객체) 변수를 지역 변수와 구분해주기 위해, 인스턴스 변수의 경우에는 이름앞에 @가 붙는다.
연산자 a && = b 는 a = a && b 를 축약한것.
- a와 b가 모두 참이면 b가 리턴되고, 하나라도 false면 a가 리턴된다.
- a->b 순으로 조건검사함.
a || = b 는 a = a || b 를 축약한것.
- a와 b 둘중 하나가 참이면 a->b 순으로 검사하고 참인것을 리턴함.
삼항 연산자 형식) # [구문] 조건식 ? 참인 경우 값 : 거짓인 경우 값
삼항 연산자 간단예제)
score = 80
result = score > 70 ? "pass" : "failed" # 조건식의 [참/거짓] 결과에 따라 좌측의 result에 값을 대입한다.
puts result
# 출력 : pass
begin ~~ end
- 예외처리를 할때 사용함.
nil? nil 값인지 검사해서 알려줌 (null -> 루비에서는 nil 이라고 함) object.nil? 형식으로 쓴다.
파일 입출력 https://weicomes.tistory.com/98
파일 오픈방법.
File.new(“txtfile”,”mode”) # code file.close() #예외 발생시 file.close 가 호출되지 않음.
file.open(“txtfile”,”mode” do | file | # code end #파일이 여기서 자동으로 닫힘. #예외가 블록에서 발생하더라도 예외가 호출자(caller)에게 전달되기 전에 파일을 닫아줌.
ex)
class File
def File.open(*args)
result = f = File.new(*args)
if block_given?
begin
result = yield f
ensure
f.close
end
end
result
end
end
파일 읽기
file.gets #한줄씩 읽는다.
ex)
File.open("txtfile") do|file|
while line = file.gets
puts line #file예서 한줄씩 읽기가 가능한동안 계속 한줄씩 출력함.
end
end
file.each_line #파일로부터 한줄씩 읽어서 블록을 호출한다. ex)
File.open("txtfile") do | file |
file.each_line { | line |
puts "Got #{line.dump}" #dump를 하면 \n 까지 읽어오는데 dump를 안하고 line 만 출력하면 \n 은 적용되지만 문자는 출력안됨
}
end
결과
Got “this is line one\n”
Got “this is line two\n”
…
행을 구분하는 행 구분자로 문자를 지정할수도 있다. ex)
File.open("testfile") do | file |
file.each_line("e") { | line | #e를 기준으로 행을 나눠서 가져옴
puts "Got #{ line.dump }"
}
end
결과
Got “this is line”
Got “ one”
Got “\nThis is line”
Got “ two\nThis is line”
Got “ thre”
Got “e”
Got “\nAnd so on.. \n”
전체 라인 읽기 #문자열로 읽어오기 string = file.read(“txtfile”) string[0, 30] #”This is line one\n This is line” #30문자 출력
#배열로 읽어오기 array = File.readlines(“txtfile”) arr[0] #”this is line one\n”
#stringIO
문자열 포함되어있는지 확인하는 방법 예제)
my_string = "Hello world"
if my_string["Hello"]
puts 'It has "Hello"'
else
puts 'No "Hello" found'
end
# => ‘It has “Hello”’