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

Ruby Case 문의 다양한 용도

if / elsif를 사용해야 할 때마다 대신 Ruby case 문 사용을 고려할 수 있습니다. 이 게시물에서는 몇 가지 다른 사용 사례와 이 모든 것이 내부에서 실제로 어떻게 작동하는지 배울 것입니다.

Ruby Case 문의 다양한 용도

<블록 인용>

참고:다른 프로그래밍 언어에서는 이를 스위치라고 합니다. 성명서.

Ruby의 case 문의 구성 요소:

키워드 설명
케이스 케이스 문 정의를 시작합니다. 작업할 변수를 가져옵니다.
언제 일치할 수 있는 모든 조건은 when 문입니다.
기타 일치하는 것이 없으면 다음을 수행하십시오. 선택 사항입니다.

루비 케이스 및 범위

case 진술은 첫눈에 보일 수 있는 것보다 더 유연합니다. 값이 속하는 범위에 따라 일부 메시지를 인쇄하려는 예를 살펴보겠습니다.

case capacity
when 0
  "You ran out of gas."
when 1..20
  "The tank is almost empty. Quickly, find a gas station!"
when 21..70
  "You should be ok for now."
when 71..100
  "The tank is almost full."
else
  "Error: capacity has an invalid value (#{capacity})"
end

이 코드는 if / elsif 버전은 다음과 같습니다.

루비 케이스 및 정규식

정규식을 when으로 사용할 수도 있습니다. 상태. 다음 예에는 serial_code가 있습니다. 이 제품이 얼마나 위험한지 알려주는 첫 글자와 함께.

case serial_code
when /\AC/
  "Low risk"
when /\AL/
  "Medium risk"
when /\AX/
  "High risk"
else
  "Unknown risk"
end

루비 케이스를 사용하지 말아야 할 경우

간단한 1:1 매핑이 있는 경우 다음과 같이 하고 싶을 수 있습니다.

case country
when "europe"
  "https://eu.example.com"
when "america"
  "https://us.example.com"
end

제 생각에는 다음과 같이 하는 것이 좋습니다.

SITES = {
  "europe"  => "https://eu.example.com",
  "america" => "https://us.example.com"
}

SITES[country]

해시 솔루션은 더 효율적이고 사용하기 쉽습니다. 생각하지 않나요?

케이스 작동 방식:===메소드

case가 어떻게 후드 아래에서 작동합니다. 첫 번째 예로 돌아가면 다음과 같습니다.

(1..20)   === capacity
(21..70)  === capacity
(71..100) === capacity

보시다시피 Ruby가 ===를 호출하기 때문에 조건이 반대입니다. 왼쪽에 있는 개체에. === 모든 클래스에서 구현할 수 있는 메서드일 뿐입니다. 이 경우 Range 값이 범위 내에 있는 경우에만 true를 반환하여 이 메서드를 구현합니다.

=== Rubinius에서 구현됩니다(Range 클래스):

def ===(value)
  include?(value)
end

출처:https://github.com/rubinius/rubinius/blob/master/core/range.rb#L178

프로세스 + 케이스

===를 구현하는 또 다른 흥미로운 클래스 Proc입니다. 수업.

<블록 인용>

관련 게시물 :절차 및 람다에 대해 자세히 알아보세요.

이 예제에서는 두 개의 procs를 정의합니다. , even 확인 숫자 및 odd .

odd  = proc(&:odd?)
even = proc(&:even?)

case number
when odd
  puts "Odd number"
when even
  puts "Even number"
end

이것이 실제로 일어나고 있는 일입니다:

odd.===(number)
even.===(number)

=== 사용 proc에서 call을 사용하는 것과 같은 효과가 있습니다. .

결론

Ruby case 문이 어떻게 작동하고 얼마나 유연할 수 있는지 배웠습니다. 이제 자신의 프로젝트에서 이를 최대한 활용할 차례입니다.

이 기사가 도움이 되었기를 바랍니다!

더 많은 사람들이 배울 수 있도록 이 게시물을 공유해주세요! 🙂