programming ruby
-
Programming Ruby (22) 기본 입출력 - 2Ruby 2016. 11. 7. 23:52
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 네트워크로 통신하기 Socket 클래스를 이용해 HTTP OPTIONS 요청을 사용해서 로컬 엡 서버에 있는 사용자 웹 사이트에 대한 정보를 가져오는 예제이다. require 'socket' client = TCPSocket.open('127.0.0.1', 'www') client.send("OPTIONS /~dave/ HTTP/1.0\n\n", 0) # 0은 표준 패킷을 의미한다. puts client.readlines client.close 실행결과 HTTP/1.1 200 OK Date: Thu 14 nov ~~ Server: Apache/2.2.24 Allow: GET,HEAD,P..
-
Programming Ruby (21) 기본 입출력 - 1Ruby 2016. 11. 7. 23:50
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) IO 객체 루비는 입/출력을 담당하는 기본 클래스 IO를 제공한다. IO객체는 루비프로그램과 외부 리소스 사이의 양방향 채널 역할을 한다. IO객체는 결국 일과 쓰는 것이 전부이다. 파일 열고 닫기 파일 객체는 File.new 메서드를 이용해서 생성할 수 있다. file = File.new("testfile", "r") # ... 파일에 대한 처리 file.close 첫 번째 매개변수는 파일이름, 두 번째 인자는 모드 문자열, 읽기 모드, 쓰기 모드, 읽기 쓰기모드로 File 객체 생성이 가능하다. (읽기 쓰기모드는 r+, 쓰기모드는 w, 읽기 모드 r) File.open 메서드는 파일..
-
Programming Ruby (20) 예외처리 - 2Ruby 2016. 11. 5. 11:38
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) Catch와 Throw raise와 rescue 메커니즘은 무언가 잘못되었을 때 실행을 멈추는데 효과적이다. 일반적인 실행 중에 여러 겹으로 둘러싸인 코드 밖으로 탈출할 수 있다면 유용할것이다. 이 때 사용하는 문법이 catch throw 이다. 아래의 예제는 한 번에 하나씩 단어 리스트를 읽어와 배열에 추가한다. 전부 읽어오고 나서 배열을 역순으로 출력한다. 처리 과정에서 정상적인 단어를 포함하지 않는 줄을 만나면 모든 과정을 중지한다. word_list - File.open("wordlist") catch (:done) do result = [ ] while line = word_l..
-
Programming Ruby (19) 예외처리Ruby 2016. 11. 3. 23:59
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 예외 처리 현실 세계의 프로그램에서는 에러가 발생한다. 좋은 프로그램은 이러한 에러를 예견하고 깔끔하게 해결해야만 한다. 전통적인 접근 방법은 반환 코드를 이용하는 것이다. 파일을 열고 시도하는 예를 들어보자. open 메서드는 실패를 나타내는 특별한 값을 반환한다. 이 에러값은 누군가가 처리해 줄 때까지 메서드 호출 단계를 거슬러 올라가며 전달된다. 이 접근법의 문제점은 모든 에러 코드를 관리하는 것이 어렵다는 것이다. 어떤 함수가 open을 호출하고, 그 다음 read, 마지막으로 close를 호출하는데 각각이 에러 코드를 반환하면 이 함수는 호출자에게 건넬 반환값에서 이 에러 코드..
-
Programming Ruby (18) 표현식 - 5Ruby 2016. 11. 2. 20:44
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 반복 루비에는 원시적 반복구문이 내장되어 있다. 예를 들어 다음 구문은 입력이 끝날 때까지 데이터를 읽는다. while line = gets # ... end until 반복문은 반대다. 조건이 참이 되기 전까지만(until) 실행한다. until play_list.duration > 60 play_list.add(song_list.pop) end if, unless와 마찬가지로 이 두 가지 반복문 또한 구문 변경자로 이용할 수 있다. a = 1 a *= 2 while a 128 a -= 10 until a 98 범위를 일종의 플립플롭(fl..
-
Programming Ruby (17) 표현식 - 4Ruby 2016. 11. 2. 20:43
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) case 표현식 case표현식은 강력한 괴물이다. 첫 번째 형태는 if구문을 여러개 둔 것과 아주 비슷하다. 여러 개의 조건을 늘어놓고 구문을 실행했을 때 처음으로 참이 되는 구문을 실행한다. case when song.name == "Misty" # blabla when song.duration > 120 # blabla when time.now.hour > 21 # blabla else song.play end 두 번째 형태는 아마도 익숙할 것이다. 비교할 대상을 가장 위의 case 옆에 쓰고, 하나 이상의 when을 늘어놓아서 각각 비교한다. case command when "de..
-
Programming Ruby (16) 표현식 - 3Ruby 2016. 11. 2. 20:42
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 조건적 실행 논리 표현식 루비에서는 매우 간단한 참의 정의를 가지고 있다. nil과 상수 false가 아닌 모든 것은 참(true)이다. 예를 들어 "cat", 99, 0, :a_song은 모두 true이다. nil이 false로 다뤄지는 것은 매우 편리하다. 예를 들어 IO#gets는 파일의 다음 행을 읽어오는데 더 이상 읽어올 행이 없을 때는 nil을 반환한다. 따라서 다음과 같은 반복문 작성이 가능하다. while line = gets # 처리 end 하지만 주의할 점은 숫자 0이 false로 해석되지 않는다는 점이다. 길이가 0인 문자열도 마찬가지이다. and, or, not 루..
-
Programming Ruby(12) 문자열Ruby 2016. 10. 26. 22:56
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 문자열 루비 문자열은 간단히 말하면 문자열 시퀀스다. 보통 출력가능한 문자를 저장하지만 반드시 그래야만 하는 것은 아니다. 문자열에는 이진(binary) 데이터를 저장할 수도 있다. 문자열은 String 클래스의 객체다. 큰따옴표로 묶인 문자열은 많은 이스케이프 시퀀스를 지원한다. 그 중 가장 일반적인 것이 줄바꿈을 나타내는 \n 이다. 또한 #{ expr } 과 같은 식으로 쓰면 루비 코드의 결과를 문자열로 변환해준다. 만약 # { } 안의 표현식이 전역 변수나 클래스 변수, 인스턴스 변수라면 중괄호를 생략해도 된다. "Seconds/day : #{24*60*60}" # => Seco..