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

Ruby의 강력한 메서드 인수 및 올바르게 사용하는 방법

키워드 인수를 언제 사용해야 하는지에 대한 의견을 묻는 이메일을 받았습니다.

모든 사람이 혜택을 받을 수 있도록 답변을 Ruby 메서드 인수에 대한 전체 기사로 확장해야 한다고 생각했습니다. !

Ruby는 메소드 인수와 관련하여 매우 유연합니다.

모든 것을 갖추고 있습니다 :

표준 필수 인수에서 선택적 인수 및 키워드(명명된) 인수까지.

이 문서에서는 차이점에 대해 배우게 됩니다 이러한 모든 인수 유형과 상황에 따라 사용할 수 있습니다.

올바른 종류의 인수를 사용하면 코드를 더 쉽게 읽고 작업할 수 있습니다.

의심스러운 경우 표준 인수 사용

필수 인수는 기본적으로 얻는 것입니다.

예시 :

def write(file, data, mode)
end

write("cats.txt", "cats are cool!", "w")

필요한 인수의 정확한 수를 전달하지 않으면 다음과 같은 친숙한 오류 메시지가 표시됩니다.

write("shopping_list.txt", "bacon")

ArgumentError: wrong number of arguments (2 for 3)

이것은 2 메소드를 제공했음을 의미합니다. 인수이지만 3이 필요합니다. !

선택적 인수가 있는 유연한 방법

기본값을 제공하여 일부 인수를 선택 사항으로 만들 수 있습니다.

예를 들어 :

def write(file, data, mode = "w")
end

이제 write를 호출할 수 있습니다. 2개의 인수로, 이 경우 mode 기본값과 동일합니다("w" ) 또는 3개의 인수를 전달하여 기본값을 무시하고 다른 결과를 얻을 수 있습니다.

이 기본값을 사용하면 이 메서드를 호출할 때 몇 가지 작업을 줄일 수 있지만 여전히 변경할 수 있습니다.

명확성을 높이기 위해 키워드 인수 사용

필수 및 기본 인수의 단점 중 하나는 순서 종속적이라는 것입니다.

동일한 순서로 인수를 전달해야 함을 의미합니다.

잘못된 순서로 전달한 경우 :

예상치 못한 결과를 얻게 될 것입니다!

예를 들어 write에서 메소드를 사용하려면 file로 호출해야 합니다. 먼저 data 그리고 마지막으로 mode .

def write(file, data, mode)
end

키워드 인수를 사용하면 인수의 순서를 변경할 수 있습니다.

예시 :

def write(file:, data:, mode: "ascii")
end

이렇게 하면 다른 순서로 메서드를 호출할 수 있습니다.

write(data: 123, file: "test.txt")

그러나 더 중요한 것은 메소드를 호출할 때 인수 의미를 명확하게 볼 수 있다는 것입니다. .

키워드 인수를 자주 사용하지는 않지만 메서드 호출을 명확하게 하고 싶을 때 유용할 수 있습니다.

Point가 있다고 가정해 보겠습니다. 수업.

다음과 같이 작성할 수 있습니다. :

class Point
  def initialize(x: , y:)
    @x, @y = x, y
  end
end

point = Point.new(x: 10, y: 20)

이렇게 하면 두 숫자(10 및 20) 중 x에 해당하는 숫자에 대한 혼동이 발생하지 않습니다. 값 또는 y 가치.

혼란과 오해를 최대한 방지하는 것이 코드를 작성할 때의 주요 목표 중 하나입니다. .

키워드 인수를 사용하는 것이 도움이 된다면 사용하십시오.

생각해 보세요 :

<블록 인용>

"키워드 인수를 추가하면 이것을 더 쉽게 이해할 수 있습니까? 아니면 코드에 추가 작업과 혼란이 추가됩니까?"

키워드 인수에 대한 또 다른 점은 누락된 인수에 대해 매우 명시적이라는 것입니다.

:

point = Point.new

# missing keywords: x, y

키워드 인수를 일반 인수와 결합할 수도 있습니다.

Ruby 내장 메서드에서 관찰한 한 가지 전략은 새 버전에서 키워드 인수와 같은 새로운 선택적 인수를 추가하는 경향이 있다는 것입니다. .

이에 대한 예는 Float#round에 대한 키워드 인수입니다. , Kernel#clone &String#lines Ruby 2.4에서 도입되었습니다.

변수 인수를 사용하여 필요한 만큼 많은 값 캡처

값을 무제한으로 취하고 싶다면?

그런 다음 가변 인수를 사용할 수 있습니다. :

def print_all(*args)
end

print_all(1, 2, 3, 4, 5)

이렇게 하면 없음을 포함하여 원하는 수의 인수를 사용하여 메서드를 호출할 수 있습니다. 변수 인수는 모든 값이 전달된 배열입니다.

이것을 다른 유형의 인수와 결합할 수 있습니다.

:

def print_all(title, *chapters)
end

첫 번째 인수를 title로 사용합니다. , 나머지는 chapters로 정렬. 가변 인수는 모든 필수 및 선택적 인수와 모든 키워드 인수 앞.

올바른 순서 사용

다음은 인수를 결합하고 구문 오류를 방지하려는 경우 유효한 인수 순서입니다.

required -> optional -> variable -> keyword

가능한 모든 인수 유형을 표시하는 방법은 다음과 같습니다. :

def testing(a, b = 1, *c, d: 1, **x)
  p a,b,c,d,x
end

testing('a', 'b', 'c', 'd', 'e', d: 2, x: 1)

**x 변수 인수와 동일하지만 키워드 인수용입니다. 배열 대신 해시가 됩니다.

포괄적인 주장

드물게 다음과 같은 현상이 나타날 수 있습니다.

def print_all(*)
end

이것은 메서드가 모든 인수를 수락하지만 인수로 아무 작업도 수행하지 않음을 의미합니다. 밑줄 문자(_ ) 블록 안에 사용하지 않는 인수를 표시합니다.

이를 실제로 사용하려면 super 키워드와 함께 사용할 수 있습니다.

class Food
  def nutrition(vitamins, minerals)
    puts vitamins
    puts minerals
  end
end

class Bacon < Food
  def nutrition(*)
    super
  end
end

bacon = Bacon.new

bacon.nutrition("B6", "Iron")

이제 Food의 nutrition이 인수 목록을 변경하면 Bacon에서 인수를 변경할 필요가 없습니다. 너무.

요약

Ruby의 강력한 메서드 인수와 사용 방법에 대해 배웠습니다! 필수 인수는 좋은 시작이며 선택적 인수로 유연성을 추가하고 키워드 인수로 명확성을 추가할 수 있습니다.

이 정보가 유용하고 흥미롭기를 바랍니다!

더 많은 사람들이 볼 수 있도록 이 게시물을 트위터에 공유하세요 🙂