프로그래밍에 대한 의견: Object#then으로 일회성 변수 제거
5181 단어 ruby
내가 좋아하게 된 Ruby 객체의 기능 중 하나는 메서드, 즉
#then
입니다.블록, 프로시저 또는 람다를 허용합니다. 개체 자체를 유일한 인수로 수신하면 이러한 "콜백"은 개체의 상태를 수정하거나 "탭"할 수 있습니다. 결국 전달된 람다의 마지막 줄을 반환하며, 변수 내부에 저장하는 데 사용할 수 있습니다(형제
#tap
는 수행하지 않음)Ruby의 모든 객체는 then 메서드에 응답합니다. 호출자(즉, 객체 자체)의 컨텍스트에서 전달된 proc을 평가한 다음 블록 내에서 실행된 마지막 줄을 반환합니다. 이 수업을 들어
class Person
attr_reader :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def name
"#{first_name} #{last_name}"
end
end
위의 이 Person 클래스가 주어지면 그 사람의 이름을 얻고 싶다고 가정해 봅시다. 우리는 이것을 할 수 있습니다,
user = Person.new "John", "Doe"
user_full_name = user.name
여기서 우리는 사용자 변수 안에 새로운 Person 개체를 저장하고 있습니다. 이 개체는 단일 위치에서만 사용하고 있습니다(이름을 콘솔에 기록하기 위해). 그때, 우리는 할 수 있습니다
user_full_name = Person.new("John", "Doe").then(&:name)
코드가 짧아졌습니다. 추가 변수(the
user
)를 저장하지 않기 때문에 이 코드가 실행된 후 가비지 수집기는 이 개체에 대한 참조가 더 이상 존재하지 않으므로 이 개체를 안전하게 제거할 수 있습니다.이것은 조건문 내에서 정말 빛납니다. 이 스니펫은 Rails가 설치되어 있다고 가정합니다(또는 다른 데이터베이스 지원 테이블).
@buyer = if Buyer.find_by(id: 123).nil?
SomeExternalService.api(...).then do |response|
Buyer.create(response.body)
end
else
## do something else
end
response
를 변수에 저장한 다음 응답에서 Buyer.create
를 수행할 필요가 없습니다. 다음은 then을 사용하지 않은 모습입니다.@buyer = if Buyer.find_by(id: 123).nil?
response = SomeExternalService.api(...)
Buyer.create(response.body)
else
## do something else
end
개인적으로
Object#then
는 말할 것도 없고 형제자매인 Object#tap
를 점점 더 좋아하게 되었습니다.끝까지 함께해주셔서 감사합니다. 즐거운 시간 되셨길 바라며, 즐거운 하루 보내시고 행복한 코딩 되세요.
자원
Reference
이 문제에 관하여(프로그래밍에 대한 의견: Object#then으로 일회성 변수 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rockwell/opinions-on-programming-eliminating-one-off-variables-with-objectthen-25nm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)