Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby 2.6의 9가지 새로운 기능

새로운 기능과 성능 개선을 갖춘 새로운 버전의 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의 9가지 새로운 기능

이러한 결과에 따라 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 뉴스레터에 가입하는 것을 잊지 마세요.

읽어주셔서 감사합니다!