Programing

"!"의 목적은 무엇입니까?

lottogame 2020. 8. 28. 07:48
반응형

"!"의 목적은 무엇입니까? 그리고 "?" 메소드 이름 끝에?


가끔 Ruby에서 "?"가있는 메서드를 볼 수 있습니다. 그리고 "!" 예 :

name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?

그들의 목적이 무엇인지 궁금합니다. 그들은 단지 구문 설탕 코팅입니까?


가독성을 위해 "단지 설탕 코팅"이지만 공통된 의미가 있습니다.

  • 로 끝나는 메서드는 !영구적이거나 잠재적으로 위험한 변경을 수행합니다 . 예를 들면 :
    • Enumerable#sort객체를 Enumerable#sort!제자리에 정렬하는 동안 정렬 된 버전의 객체를 반환합니다 .
    • Rails에서 ActiveRecord::Base#save저장에 실패하면 false를 반환 ActiveRecord::Base#save!하고 예외를 발생시킵니다.
    • Kernel::exit스크립트를 종료 Kernel::exit!하고 즉시 종료하여 종료 처리기를 우회합니다.
  • ?boolean으로 끝나는 메소드 는 코드 흐름을 문장처럼 더욱 직관적으로 만듭니다. if number.zero?"숫자가 0 인 경우"처럼 읽지 if number.zero만 이상하게 보입니다.

당신의 예에서, name.reverse반대의 문자열로 평가는하지만, 후에 name.reverse!라인이 수행하는 name변수는 실제로 포함 반전 된 이름입니다. name.is_binary_data?" name이진 데이터입니까?" 처럼 보입니다 .


물음표는 메서드가 부울을 반환 함을 나타냅니다. 여기에 이미 답변했습니다.

Ruby에서 물음표 연산자는 무엇을 의미합니까?

강타는 메서드가 객체 자체에서 작동 함을 나타냅니다. 여기에 이미 답변했습니다.

Ruby 메서드에서 느낌표가 사용되는 이유는 무엇입니까?


Ruby에서 ?메서드는 부울을 반환하고 !호출 된 객체를 수정 한다는 의미입니다 . 코드를 볼 때 가독성을 높이기 위해 있습니다.


-내가 생각하기에-대부분의 프로그래밍 언어와는 대조적으로 ...

Ruby, 메서드는 물음표 또는 느낌표로 끝날 수 있습니다.

관례 적으로 질문에 대답하는 메서드 (예 : Array # empty?는 수신자가 비어 있으면 true를 반환)는 물음표로 끝납니다.

관례 상 "위험한"방법 (예 : self 또는 인수를 수정하는 방법, exit! 등)은 느낌표로 끝납니다.

From : http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/ , 재미있는 메소드 이름 섹션


항상 그런 것은 아닙니다. 예를 들어 Ruby Array # concat http://docs.ruby-lang.org/en/2.0.0/Array.html#method-i-concat 입니다.

심하게 화상을 입을 수있는 곳은 다음과 같습니다 MyActiveRecordModel.column_names.concat([url]). MyActiveRecordModel과 관련된 나중에 호출은 MyActiveRecordModel에 대한 'url'열을 찾고 throw합니다.

대신 연결하기 전에 복제해야합니다. 다행히 내 테스트 스위트가이 문제를 포착했지만 ..주의!

참고 URL : https://stackoverflow.com/questions/7179016/what-is-the-purpose-of-and-at-the-end-of-method-names

반응형