Ruby는 개선을 멈추지 않습니다!
버전 2.7에는 새로운 기능, 방법 및 성능 개선 사항이 포함되어 있습니다. 2019년 12월 25일에 출시되었습니다.
이제 Matz에 따르면...
이것은 마지막 2.x 버전 릴리스입니다. 내년에 Ruby 3.0이 출시되기 때문입니다!
하지만 도착하기 전에...
버전 업데이트를 준비할 수 있도록 2.7의 몇 가지 변경 사항 및 새로운 기능을 살펴보겠습니다.
내용
- 열거 가능한 #tally 1개
- 블록에 대한 2개의 번호가 매겨진 매개변수 [실험]
- 3배열#교차로
- 4 열거 가능#filter_map
- 5 열거자#create
- 6 IRB가 성형 수술을 받습니까?
- 7 루비 패턴 매칭 [실험]
- 8 기타 변경 사항
- 9 요약
- 9.1 관련
열거 가능한 #tally
이것은 배열의 모든 요소를 계산하고 해당 개수와 함께 해시를 반환하는 새로운 Ruby 메서드입니다.
직접 할 수도 있지만 이 tally
방법을 사용하면 작업을 절약할 수 있습니다.
예시 :
%w(a b b c).tally
결과 :
{"a"=>3, "b"=>2, "c"=>1}
좋아요!
블록의 번호 매기기 매개변수 [실험]
내가 한동안 원했던 흥미로운 새 기능은 블록 매개변수의 기본 이름입니다.
다음은 하나의 매개변수가 있는 일반 블록입니다. :
[1,2,3].각 { |n| n을 넣습니다 }
이 |n|
사용하려면 정의해야 하는 매개변수입니다.
하지만 기본 이름이 있다면 어떨까요?
이는 실험적 기능이지만 Ruby 2.7이 제공하는 장점 중 하나입니다. , 입력하는 시간을 많이 절약할 수 있습니다.
모양은 다음과 같습니다. :
[1,2,3].각 { _1 }
_1
위치 첫 번째 매개변수를 참조하면 _2
를 사용할 수 있습니다. 두 번째 항목이 있는 경우 예, _3
세 번째 매개변수 등
멋져!
자, 약간의 퀴즈입니다.
이 기능은 처음에 @1
처럼 보이도록 제안되었습니다. , 하지만 인스턴스 변수와 너무 비슷해 보여서 논의 끝에 _1
을 사용하기로 결정했습니다. 대신.
배열#교차로
이것은 새로운 방법이지만 새로운 기능은 아닙니다.
사실...
이것은 별칭에 가깝습니다!
Ruby 2.6에서 Array union
도입 &difference
메소드, Array#|
의 보다 간결한 항목과 일치시키기 위해 및 Array#-
.
하지만 누락된 작업은 intersection
이었습니다. , 기억하기 힘든 또 다른 짧은 버전이 있습니다.
Array#& method
.
지금 :
이 방법은 무엇을 하며 어떻게 작동합니까?
예 :
[1, 2, 3].교차로([2, 3, 4])# [2, 3][1, 2, 3] &[2, 3, 4]# [2, 3]사전>음...
이름은
intersection
을 제공합니다. 두 배열 사이의 교차점을 찾습니다. 즉, 어떤 요소가 공통점이 있는지 찾습니다.
짧은 버전 | 긴 버전 |
---|---|
& | 교차로 |
| | 연합 |
– | 차이 |
나는 항상 이 3가지 방법 중 어떤 것이 무엇을 하는지 잊어버립니다!
그러나 이러한 새로운 방법을 사용하면 기억하기가 훨씬 쉬워집니다 이름에 의미가 있는 .
좋은 코드 작성에 대한 좋은 교훈입니다.
열거 가능한#filter_map
이 filter_map
메소드는 select
를 결합하려는 시도입니다. &map
방법을 하나로.
왜?
목록을 먼저 필터링한 다음 나머지 요소를 매핑하는 것이 일반적인 작업이기 때문입니다.
두 가지 방법으로 수행할 수 있습니다. :
(1..8).select(&:짝수?).map { |n| n ** 2 }# OR(1..8).map { |n| n ** 2인 경우 n.even? }.컴팩트
둘 다 사용했지만 의도가 더 명확하기 때문에 전자에 치우치는 경향이 있습니다.
지금 :
Ruby 2.7에서 이 filter_map
메서드는 한 번에 이 작업을 수행합니다.
좋아요 :
(1..8).filter_map { |n| n ** 2인 경우 n.even? }# [4, 16, 36, 64]
저는 블록 내부에 if 문을 사용하는 것을 가장 좋아하는 편은 아니지만 때로는 작업을 완료하는 데 필요합니다.
그 외에도 알아야 할 사항이 있습니다.
filter_map
작업이 map + compact
처럼 작동하지 않습니다. , false
를 제거하기 때문에 개체 및 compact
그렇지 않습니다.
기억해두면 좋은 점!
열거자#생성
여기 당신이 흥미롭게 생각할 수 있는 또 다른 새로운 방법이 있습니다. 그러나 약간의 창의성이 필요할 수 있습니다 최대한 활용하세요.
Enumerator#produce
입니다. 방법.
어떤 역할을 하나요?
기능 제안에 따라 :
<블록 인용>"이 방법은 이전 요소에 블록을 적용하여 각 다음 요소를 계산하는 무한 시퀀스를 생성합니다."
네.
끝없는 시퀀스를 만드는 또 다른 방법!
예시 :
Enumerator.produce(1, &:next).take(5)# [1, 2, 3, 4, 5]
이 예에서는 take(10)
를 수행해도 문제가 되지 않습니다. 또는 take(10_000)
, 무한한 수의 값을 얻을 수 있습니다.
Btw, 1
초기값입니다.
그리고 &:next
produce
을 위해 해당 값에 대해 호출되는 메서드입니다. 시퀀스의 다음 요소입니다.
IRB가 성형 수술을 받습니까?
최근 IRB는 많은 사랑과 관심을 받고 있으며 Ruby 2.7은 계속해서 추가되고 있습니다.
우리는 :
- 여러 줄 편집
- 구문 강조
- 내장된 RDoc 통합
- 기본적으로 사용되는 명령 기록
- 기본적으로 자동 완성 사용
사실 :
이것은 Ruby 2.7로 irb를 시작할 때 경고를 받을 정도로 큰 변화입니다.
이전 버전의 irb를 계속 사용하려면 irb --legacy
를 사용하면 됩니다. 명령. 이 새 IRB의 주요 문제는 줄 편집입니다. 기존 IRB(또는 Pry)에서는 ALT 키를 누른 상태에서 왼쪽 화살표를 눌러 더 빠르게 이동할 수 있지만 새 IRB에서는 작동하지 않습니다.
사용해 보고 어떻게 작동하는지 확인하십시오.
루비 패턴 매칭 [실험]
2.7에서 제공되는 자주 요청되는 기능은 패턴 일치입니다.
실험용으로 표시됩니다.
하지만 패턴 매칭은 무엇이며 어떤 이점이 있습니까?
글쎄, 내가 이것을 올바르게 이해한다면 패턴 매칭은 정규 표현식과 같지만 데이터 구조(Array/Hash)에 대한 것입니다.
예시 :
[1,2,3] in [a,b,c] # true[1,2,3] in [a] # false
일치하는 항목이 있으면 이러한 변수 이름(예:a
) 액세스할 수 있는 지역 변수가 됩니다.
해시를 사용한 예 :
{ a:1, b:2, c:[] } in { a:a, b:b, c:[] }# truep a# 1
이것은 in
을 사용합니다. 키워드.
새로운 것은 아니지만 Ruby 2.7 in
이전이기 때문에 흔하지 않습니다. for
의 일부로만 사용되었습니다. 루프(Ruby에서는 적극 권장하지 않음)이므로 이 키워드를 유용한 용도로 재사용할 수 있습니다.
더 좋아짐 …
어떤 변수를 사용하든 상관없습니다. a,b,c
여기에서 작동하지만 f,g,h
또한 작동합니다.
패턴에 관한 모든 것입니다!
기타 변경 사항
언급할 가치가 있는 몇 가지 추가 변경 사항입니다.
- 새로운 압축 GC로 메모리 조각화 개선
- 메서드 인수
**nil
이제 메소드가 키워드를 사용하지 않는다고 선언합니다. - 메서드 인수
...
인수 전달 메커니즘을 추가합니다(make_salad(...)
와 같이 괄호 필요). ) - 섬유 개선. 새로운 섬유 개체 풀(새 섬유가 할당됨)은 섬유를 더 효율적으로 만듭니다.
- 스레드 개선. 스레드를 생성하는 더 우수하고 최적화된 방법으로 멀티스레딩이 빨라집니다.
이에 대해 어떻게 생각하십니까?
2.7용 NEWS 파일에는 파이버 및 스레드 생성 모두에서 10배의 성능 향상이 언급되어 있습니다. 직접 테스트하지는 않았지만 결과를 알려주시면 감사하겠습니다.
요약
이제 Ruby 프로그래밍 언어의 최신 변경 사항을 확인했습니다! IRB 변경, 새로운 방법 및 패턴 일치와 같은 몇 가지 실험적 기능에 대해 배웠습니다.
이 기사를 공유하여 뉴스를 퍼뜨리세요!
읽어주셔서 감사합니다 🙂