programing

루비에서 조건 연산자(? :)는 어떻게 사용하나요?

powerit 2023. 6. 17. 09:45
반응형

루비에서 조건 연산자(? :)는 어떻게 사용하나요?

조건 연산자는 어떻습니까?? :) Ruby에서 사용됩니까?

예를 들어, 이것이 맞습니까?

<% question = question.size > 20 ? question.question.slice(0, 20)+"..." : question.question %>

이것은 3진 연산자이며, C와 같이 작동합니다(괄호는 필요하지 않습니다).이것은 다음과 같이 작동하는 표현입니다.

if_this_is_a_true_value ? then_the_result_is_this : else_it_is_this

하지만, 루비에서if는 표현이기도 합니다.if a then b else c end===a ? b : c우선 순위 문제를 제외하고.둘 다 표현입니다.

예:

puts (if 1 then 2 else 3 end) # => 2

puts 1 ? 2 : 3                # => 2

x = if 1 then 2 else 3 end
puts x                        # => 2

첫 번째 경우 괄호가 필요합니다(그렇지 않으면 Ruby는 그것이 그렇다고 생각하기 때문에 혼란스럽습니다).puts if 1추가적인 정크가 포함됨), 그러나 위에서 언급한 문제가 발생하지 않기 때문에 마지막 경우에는 필요하지 않습니다.

여러 줄에서 읽기 쉽도록 "long-if" 양식을 사용할 수 있습니다.

question = if question.size > 20 then
  question.slice(0, 20) + "..."
else 
  question
end
puts true ? "true" : "false"
=> "true"


puts false ? "true" : "false"
=> "false"

ERB를 사용하면 레일에 있는 것 같습니다.그렇다면 다음과 같은 작업을 수행할 기본 제공 도우미를 고려해 보십시오.

<% question = truncate(question, :length=>30) %>

@pst는 훌륭한 답변을 주었지만, Ruby에서 3진 연산자는 우리가 여러 줄로 쓸 수 있는 Perl과 C와는 달리 구문적으로 정확하도록 한 줄에 쓰여져 있습니다.

(true) ? 1 : 0

일반적으로 루비는 여러 줄로 분할하려고 하면 오류를 발생시키지만, 사용할 수 있습니다.\줄 끝에 줄 연속 기호가 있으면 Ruby는 행복해질 것입니다.

(true)   \
  ? 1    \
  : 0

이것은 간단한 예이지만 코드를 잘 배치하기 때문에 긴 줄을 다룰 때 매우 유용할 수 있습니다.

연산자를 줄 위에 마지막으로 배치하여 줄 연속 문자 없이 3진법을 사용할 수도 있지만, 저는 그것을 좋아하거나 추천하지 않습니다.

(true) ?
  1 :
  0

조건부 테스트 및/또는 결과가 길어짐에 따라 코드를 읽기가 매우 어렵다고 생각합니다.

헷갈리니까 삼원 연산자를 사용하지 말라는 댓글을 읽었는데, 그것은 무언가를 사용하지 않는 나쁜 이유입니다.같은 논리로 정규식, 범위 연산자(')를 사용해서는 안 됩니다...그리고 겉으로 보기에 알려지지 않은 "스캐너-플롭" 변형).올바르게 사용하면 강력하므로 올바르게 사용하는 법을 배워야 합니다.


당신은 왜 주변에 괄호를 두었습니까?true?

OP의 예를 생각해 보십시오.

<% question = question.size > 20 ? question.question.slice(0, 20)+"..." : question.question %>

조건부 테스트를 래핑하면 테스트를 시각적으로 구분하므로 읽기 쉽게 만들 수 있습니다.

<% question = (question.size > 20) ? question.question.slice(0, 20)+"..." : question.question %>

물론, 전체 예제는 빈 공간을 현명하게 추가하여 훨씬 더 읽기 쉽게 만들 수 있습니다.테스트되지 않았지만 다음과 같은 아이디어를 얻을 수 있습니다.

<% question = (question.size > 20) ? question.question.slice(0, 20) + "..." \
                                   : question.question 
%>

또는 좀 더 관용적으로 쓰여집니다.

<% question = if (question.size > 20)
                question.question.slice(0, 20) + "..."
              else 
                question.question 
              end
%>

가독성이 심각한 문제를 겪고 있다고 주장하는 것은 쉽습니다.question.question도 마찬가지야

운영자가 플레이어의 ID가 1인지 확인하고 결과에 따라 적 ID를 설정하는 간단한 예

player_id=1
....
player_id==1? enemy_id=2 : enemy_id=1
# => enemy=2

그리고 저는 꽤 도움이 될 것 같은 주제에 대한 게시물을 발견했습니다.

가장 쉬운 방법:

param_a = 1
param_b = 2

result = param_a === param_b ? 'Same!' : 'Not same!'

이래param_a (와) 하지 .param_b 다음에 그음에다.result의 가치는 다음과 같습니다.Not same!

condition ? statement_A : statement_B는 와동합다니등다에 합니다.

if condition == true
  statement_A
else
  statement_B
end

언급URL : https://stackoverflow.com/questions/4252936/how-do-i-use-the-conditional-operator-in-ruby

반응형