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

더 나은 코드를 작성하는 데 도움이 되는 잘 알려지지 않은 Ruby 방법 7가지

올바른 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.

당신이 이미이 위대한에 대해 알고 있다면! 그렇지 않은 경우 유용하게 사용되기를 바랍니다. 🙂

이 기사를 즐겼습니까? 그런 다음 친구와 공유하세요. 그들도 즐길 수 있도록!