[Ruby] 루비 문법 기초

2 분 소요

루비 메소드

메소드 형식)

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”’

태그:

카테고리:

업데이트: