올바른 Ruby 방법을 사용하면 작업을 많이 줄일 수 있다는 사실을 알고 계셨습니까?
익숙한 방법이 많을수록 작업 코드를 더 빠르게 생성할 수 있습니다. &이 코드는 성능과 품질 모두에서 더 좋아질 것입니다.
그래서 오늘은 그동안 보지 못했던 재미있는 방법 7가지를 소개하고자 합니다.
내용
- 1 Integer#digits 메소드(Ruby 2.4)
- 2 탭 방식
- 배열#values_at 3개
- 4 해시#transform_values(루비 2.4)
- 5 커널#itself(루비 2.2)
- 6배열#count
- 7 열거 가능한#cycle
- 8 요약
- 8.1 관련
Integer#digits 메소드(Ruby 2.4)
이것은 Ruby 2.4에 도입된 새로운 방법이며 Integer의 개별 숫자로 작업하려는 경우 매우 유용합니다.
<블록 인용>참고 :Ruby 2.4 변경 사항에 대한 속도가 빠르지 않은 경우 Fixnum 및 Bignum은 이제 더 이상 사용되지 않으며 둘 다 Integer로 병합됩니다.
배열과 유사한 인덱싱을 사용하면 효과가 있다고 생각할 수 있습니다. :
2[0] # 0 2[1] # 1
그러나 얻는 것은 숫자가 아니라 이 숫자를 구성하는 이진 비트입니다.
따라서 digits
일반적인 해결책은 숫자를 문자열로 변환한 다음 chars
를 사용하여 해당 문자열을 문자 배열로 나누는 것입니다. 메서드를 사용하고 마지막으로 모든 문자열을 다시 정수로 변환합니다.
예 :
123.to_s.chars.map(&:to_i).reverse [3, 2, 1]
그러나 digits
이후에는 방법 세계에서는 다음과 같이 하면 됩니다.
123.digits [3, 2, 1]
훨씬 낫지 않나요?
동영상 :
탭 방식
때로는 객체를 생성하고 그에 대한 몇 가지 메서드를 호출하고 동일한 객체를 반환하고 싶을 때가 있습니다.
이렇게 하면 됩니다 :
user = User.new user.name = "John" user
문제는 이 임시 변수를 처리해야 한다는 것입니다.
여기에서 tap
합니다. 방법이 구출됩니다!
tap
으로 마지막 예는 다음과 같습니다.
User.new.tap { |user| user.name = "John" }
임시 변수가 사라졌는지 확인하세요. 좋은 일입니다 🙂
배열#values_at
배열이나 해시에서 여러 개의 비순차적 값을 얻으려면 다음을 수행할 수 있습니다.
arr = [1,2,3,4,5] a, b, c = arr[0], arr[1], arr[4]
또는 values_at
를 사용할 수 있습니다. 방법:
arr = [1,2,3,4,5] a, b, c = arr.values_at(0, 1, 4)
해시에서도 작동합니다. :
hash = {bacon: 300, chocolate: 200} p hash.values_at(:bacon, :chocolate) # [300, 200]
해시#transform_values(루비 2.4)
해시가 있고 어떤 이유로 모든 값을 변경하고 싶다고 가정해 보겠습니다.
Array#map
으로 수행할 작업 .
map
문제 해시 대신 배열 배열(다차원 배열)을 얻게 된다는 것입니다. 또한 Hash#map!
도 없습니다. .
그래서 한 가지 해결책이 될 수 있습니다. :
h = {bacon: 200, coconut: 300} h.each { |k,v| h[k] = v*2 }
이 예에서는 각 값에 2를 곱합니다.
결과 :
{:bacon=>400, :coconut=>600}
Ruby 2.4부터 이를 수행하는 더 좋은 방법이 있습니다. :
h.transform_values! { |v| v * 2 }
이것은 이제 프레임워크 외부에서 사용할 수 있는 Rails의 또 다른 방법입니다. 🙂
커널#자체(루비 2.2)
처음에는 이 방법이 별로 흥미롭지 않다고 말씀해 주시면 동의하겠습니다.
하지만 그 이유는 몇 가지 좋은 예를 볼 필요가 있기 때문입니다.
반복되는 단어가 포함된 배열이 있고 그 수를 세고 싶다고 가정해 보겠습니다...
이를 수행하는 방법에는 여러 가지가 있지만 이것이 우리의 새로운 친구인 Kernel#itself
를 테스트하기에 좋은 사례라고 생각합니다. .
예 :
words = %w(cat cat tiger dog cat) words.group_by(&:itself).transform_values(&:size)
이것을 Hash#transform_values
와 어떻게 결합했는지 주목하세요. !
transform_values
인 경우 사용할 수 없습니다:
words .group_by(&:itself) .each_with_object({}) { |(k,v), hash| hash[k] = v.size }
동영상 :
참고 :itself
메소드는 Object
아래에 나타납니다. 문서에 클래스가 있지만 메서드는 Kernel
에 정의되어 있습니다. 모듈.
배열#카운트
때때로 당신은 무언가를 셀 필요가 있습니다.
일반적인 카운터 + 루프를 사용하는 대신 count
를 사용할 수 있습니다. 방법!
예 :
letters = %w(a a a b c d a) letters.count("a") # 4
이 방법의 배열 버전도 블록을 사용하므로 더 복잡한 계산을 수행할 수 있습니다.
numbers = [1,2,3,4,5,6] numbers.count(&:even?) # 3
동영상 :
열거 가능한#cycle
패턴을 반복하시겠습니까? 아니면 간편한 켜기/끄기 전환이 필요하십니까?
그런 다음 Enumerable#cycle
당신이 찾고 있는 것이 될 수도 있습니다!
예 :
array = %w(a b c) # Same as array * 3 array.cycle(3).to_a
하지만 내가 가장 좋아하는 cycle
사용 "스위치" 또는 "토글" 개체를 만드는 것입니다.
switch = %w(on off).cycle switch.next
이것의 좋은 점은 수동으로 업데이트하기 위해 스위치의 현재 값을 확인할 필요가 없다는 것입니다.
next
를 호출하면 됩니다. &Ruby는 무엇을 해야 하는지 정확히 알 것입니다 🙂
요약
몇 가지 새로운 유용한 메소드에 대해 배웠습니다:Integer#digits, Kernel#tap, Array#values_at, Hash#transform_values, Kernel#itself, Array#count, Enumerable#cycle.
당신이 이미이 위대한에 대해 알고 있다면! 그렇지 않은 경우 유용하게 사용되기를 바랍니다. 🙂
이 기사를 즐겼습니까? 그런 다음 친구와 공유하세요. 그들도 즐길 수 있도록!