새로운 기능과 성능 개선을 갖춘 새로운 버전의 Ruby가 출시됩니다.
변경 사항을 확인하시겠습니까?
한 번 봅시다!
무한 범위
Ruby 2.5 및 이전 버전은 이미 한 가지 형태의 무한 범위를 지원합니다(Float::INFINITY
포함). ), 그러나 Ruby 2.6은 이를 다음 단계로 끌어 올립니다.
새로운 무한 범위 다음과 같습니다.
(1..)
(1..10)
와 같은 종료 값이 없기 때문에 일반 범위와 다릅니다. .
사용 예 :
["a", "b", "c"].zip(1..) # [["a", 1], ["b", 2], ["c", 3]] [1,2,3,4,5][1..] # [2, 3, 4, 5] (1..).step(5).take(100) # [1, 6, 11, 16, 21, 26, 31, 36, 41, 46]
어떤 다른 예를 생각해 낼 수 있습니까?
열거 가능::산술 시퀀스
새로운 종류의 Enumerable 객체가 Ruby 2.6에 도입되었습니다.
Enumerable::ArithmethicSequence
에 대해 이야기하고 있습니다. .
현재 두 가지 방법이 있습니다. ArithmethicSequence
:
- 범위#단계
- 숫자#단계
이것의 특별한 점은 무엇입니까?
ArithmethicSequence
얼마나 많은 요소가 있는지, 첫 번째 요소와 마지막 요소가 무엇인지 알고 있습니다.
예 :
(1..10).step(2).first # 1 (1..10).step(2).last # 9
이러한 first
&last
메서드는 Ruby 2.6 이전에는 사용할 수 없으며 이것이 ArithmethicSequence
인 이유입니다. 지금 존재합니다!
또 다른 차이점 :
(1..10).step(2) == (1..10).step(2) # false - Ruby 2.5 (and older) (1..10).step(2) == (1..10).step(2) # true - Ruby 2.6
산술 시퀀스는 2.6에서 서로 비교할 수 있습니다.
여러 인수가 있는 해시 병합
여러 해시를 병합하여 하나로 결합하려면...
할 수 있습니다 :
a = { a: 1 } b = { b: 2 } c = { c: 3 } a.merge(b).merge(c) # {:a=>1, :b=>2, :c=>3}
새로운 방식을 추가한 Ruby 2.6 :
a.merge(b, c) # {:a=>1, :b=>2, :c=>3}
결과는 같지만 메서드를 한 번만 호출하면 됩니다!
새로운 예외 옵션
Integer
와 같은 변환 방법을 사용하는 경우 값을 변환할 수 없는 경우 예외가 발생합니다.
예 :
Integer("a") # ArgumentError (invalid value for Integer(): "a")
Ruby 2.6은 새로운 exception
를 추가합니다. 키워드 인수:
- 정수()
- 플로트()
- 합리적()
- 복잡한()
이 키워드를 사용하여 이러한 메서드의 동작을 제어할 수 있습니다.
예 :
Integer("a", exception: false) # nil
랜덤.바이트
임의의 바이트가 필요한 경우 Ruby 2.6은 새로운 bytes
를 추가합니다. Random
메소드 수업.
예시 :
Random.bytes(10) # "\xCD\r\xE6Wz\xBA)\x02\xC4\xDB"
이것은 securerandom
을 통해 항상 사용할 수 있었기 때문에 완전히 새로운 기능은 아닙니다. 모듈.
require 'securerandom' SecureRandom.bytes(10)
그렇다면 이 새로운 방법을 사용하는 이유는 무엇입니까?
Random.bytes
속도와 보안을 교환하며 SecureRandom
보다 8배 빠릅니다. .
범위#%
새로운 %
메소드가 Range
에 추가되었습니다. 루비 2.6에서.
예 :
((0..) % 2).take(5) # [0, 2, 4, 6, 8]
이 방법은 Range#step
과 동일합니다. .
추적점#매개변수
TracePoint
class는 메서드 호출, 클래스 정의 및 스레드와 같은 이벤트를 추적하는 데 도움이 됩니다.
Ruby 2.6은 새로운 parameters
를 추가합니다. 방법.
이 새로운 메소드를 사용하면 호출되는 메소드에 대한 매개변수 목록을 인쇄할 수 있습니다.
예 :
TracePoint.trace(:call, :b_call, :c_call) do |tp| p [tp.event, tp.parameters] end def orange(a,b,c*) end orange(1,2,3)
결과 :
[:call, [[:req, :a], [:req, :b], [:rest, :c]]]
일시적인 힙
임시 힙은 메모리 조각화 및 malloc에 대한 느린 호출 문제를 줄이는 것을 목표로 하는 단기 개체의 성능 향상입니다.
<블록 인용>Malloc은 Ruby 인터프리터(및 대부분의 C 프로그램)가 메모리를 요청하는 방식입니다. 운영 체제에서.
NEWS 항목에 따르면 6-7%의 속도 향상을 기대하고 있습니다.
몇 가지 벤치마크를 실행했습니다.
10개 요소보다 작은 해시를 많이 생성할 때 이것이 가장 효과적인 것 같습니다. .
이러한 결과에 따라 Ruby 2.6(미리 보기 3)에서는 해시가 클수록 더 느립니다.
과도 힙의 이점을 얻을 수 있는 기타 개체 :
- 배열
- 구조체
- 일반 객체(자신이 생성한 클래스에서)
배열#결합 및 배열#차이
두 가지 새로운 방법, union
&difference
Array
에 추가됩니다. Ruby 2.6의 클래스
예 :
[1,2,3,4,5].difference([3]) # [1, 2, 4, 5] [1,2,3,4,5].union([5,6,7]) # [1, 2, 3, 4, 5, 6, 7]
이러한 새 메서드는 여러 인수를 사용합니다.
요약
Ruby 2.6에는 더 짧은 시간에 더 나은 코드를 작성하는 데 도움이 되는 새로운 유용한 기능이 있습니다. 또 다른 새로운 성능 관련 기능인 MJIT(Method Based Just-in-Time Compiler)는 전용 기사에서 다룰 것입니다.
루비 2.6 2018년 12월 25일 출시 예정 .
변경 사항을 확인하고 Ruby 기술을 향상하고 멋진 Ruby 개발자가 되고 싶다면 지금 내 Ruby 뉴스레터에 가입하는 것을 잊지 마세요.
읽어주셔서 감사합니다!