Ruby
-
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 (15) 표현식 - 2Ruby 2016. 10. 31. 23:38
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 대입 대입문은 좌변값(lvalue)에 위치한 변수나 속성이 우변값(rvalue)을 참조하게 한다. 그리고 그 값을 대입식의 결과값으로 반환한다. 이 말은 대입문도 연결해서 쓸 수 있다는 의미다. a = b = 1 + 2 + 3 a #=> 6 b #=> 6 a = (b = 1 + 2) + 3 a #=> 6 b #=> 3 File.open(name = gets.chomp) 루비에서 대입은 두 가지 형식으로 이뤄진다. 첫째는 변수나 상수에 객체 참조(object reference)를 대입하는 것이다. 이러한 형식은 언어 자체에 내장되어 있다. instrument = "piano" MIDDLE..
-
Programming Ruby (14) 표현식 - 1Ruby 2016. 10. 31. 23:37
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 표현식 루비가 다른 언어들과 다른 특징 중 하나는 값을 반환할 수 있어 보이는 모든 곳에서 값을 반환한다는 것이다. 따라서 거의 모든 것이 표현식이 된다. 이것이 실제로 의미하는 바는 무엇일까? 이러한 특징을 통해 구문을 연속해서 쓸 수 있다는(chain statements) 점은 쉽게 유추할 수 있다. a = b = c = 0 # => 0 [3, 1, 7, 0].sort.revers # => [7, 3, 1, 0] C나 자바에서의 일반적인 구문이 루비에서는 표현식이다. 예를들어 if 와 case 구문ㅇ느 둘 다 마지막에 평가된 표현식의 값을 반환한다. 연산자 표현식 루비는 기본적인 연..
-
What is Ruby Proc??Ruby 2016. 10. 29. 00:39
[참고] http://blog.nacyot.com/articles/2015-12-07-ruby-proc-and-lambda/ Proc(절차, Procedure) 객체 이해하기 루비에서는 Proc 클래스를 통해서 익명 함수를 생성할 수 있다. Proc는 Procedure의 줄임말로 어떤 처리 과정(절차)를 담고있다는 의미이다. Proc 또한 일반 루비 클래스와 다르지 않아 new 메서드를 통해 생성이 가능하다 Proc.new Proc.new 메서드는 블록을 통해서 절차(루비 표현식들)를 넘겨받는다. Proc.new do puts 'Hello, world!' end Proc.new는 Proc 객체를 반환한다. 이 생성자 메서드는 넘겨받은 익명 함수에 대해서 어떠한 일도 하지 않고, 익명 함수를 그대로 저장한..
-
Programming Ruby (13) 메서드 파헤치기Ruby 2016. 10. 28. 20:41
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 메서드 정의 메서드는 def 키워드로 정의한다. 그리고 메서드 이름은 반드시 소문자나 밑줄로 시작해야 하며, 문자, 숫자, 밑줄(_)로 구성된다. 메서드 이름 마지막에는 ?, !, =이 올 수 있다. True나 False를 반환하는 메서드(predicate method, 술어 메서드)에는 이름 끝에 ?를 붙이곤 한다. 1.even? # => false 2.even? # => true 1.instance_of?(Fixnum) # => true '위험' 하거나 수신자의 값을 바궈버리는 메서드는 이름이 느낌표(!)로 끝나기도 한다. 이는 뱅(bang) 메서드라고 불린다. 예를들어 String..
-
Programming Ruby (11) 숫자Ruby 2016. 10. 27. 11:55
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 숫자 루비는 정수(integer), 부동소수점(floating-point), 유리수(rational), 복소수(complex number)를 지원한다. 특정 범위의 정수( -2^30~2^30-1, -2^62~2^62-1)는 Fixnum 클래스의 객체로 내부적으로는 이진 형태로 저장된다. 이 범위를 넘어서는 정수는 Bignum 객체로 저장된다(현재는 작은 정수의 가변 길이 집합으로 구현되어 있다.) 이러한 과정은 투명하게 진행되는데, 루비가 양방향으로 변환을 자동으로 해 주기 때문이다. num = 10001 4.times do puts "#{num.class}: #{num}" num *=..