&(앰퍼샌드) 연산자를 사용하는 Ruby 반복 단축키
8919 단어 codequalityrubywebdevbeginners
Ruby가 내가 가장 좋아하는 언어인 이유 중 하나는 바로 가기가 많고 몇 줄의 코드로 많은 작업을 수행할 수 있기 때문입니다.
&
(앰퍼샌드) 연산자가 좋은 예입니다.&
가 Ruby에서 작동하는 방식에 대한 간단한 설명:# These two calls are equivalent:
numbers.select { |number| number.even? }
numbers.select(&:even?)
&
는 위의 예에서 기호to_proc
인 다음 개체에서 :even?
메서드를 호출합니다. (to_proc
메서드는 기호에서 구현됩니다.) 이는 개체가 코드 블록(Proc 개체)으로 캡슐화되고 지정된 메서드로 전달됨을 의미합니다..even?
는 Ruby에 내장된 메서드이기 때문에 처음에 나에게 그랬던 것처럼 여전히 이상하게 보일 수 있습니다. 왜 상징으로 사용할 수 있습니까? 이는 Ruby의 메서드 이름이 내부적으로 기호로 저장되기 때문에 작동합니다. 같은 이유로 정의하는 메소드에 대해서도 이 단축키&
를 사용할 수 있습니다.매일 사용하는 Ruby Enumerable의 예를 살펴보겠습니다.
1. 찾기
# Returns the first admin user
# BAD
def find_admin(users)
users.find { |user| user.admin? }
end
# GOOD
def find_admin(users)
users.find(&:admin?)
end
2. 선택
# Returns all the admin users
# BAD
def find_admins(users)
admins = []
users.each do |user|
admins << user if user.admin?
end
admins
end
# GOOD
def find_admins(users)
users.select(&:admin?)
end
3. 카운트
# Returns the number of the admin users
# BAD
def count_admin(users)
count = 0
users.each do |user|
count += 1 if user.admin?
end
count
end
# GOOD
def count_admin(users)
users.count(&:admin?)
end
4. 지도
# Returns an array of each user's name
# BAD
def user_names(users)
names = []
users.each do |user|
names << user.name
end
names
end
# GOOD
def user_names(users)
users.map(&:name)
end
5. 아무거나?
# Returns true if at least one user exists.
# BAD
def contains_nil?(users)
users.each do |user|
return true if user.nil?
end
false
end
# GOOD
def contains_nil?(users)
users.any?(&:nil?)
end
6. 최대 / 최대_비
# Returns the oldest user.
# BAD
def oldest_user(users)
oldest = nil
users.each do |user|
oldest = user if oldest.nil? || user.age > oldest.age
end
oldet
end
# GOOD
def oldest_user(users)
users.max_by(&:age)
end
이것을 알면 단순히
object.method
를 반환하는 블록을 사용하여 배열을 반복할 때 코드 냄새를 감지하고 대신 &
연산자를 사용하는 것을 고려할 것입니다.
Reference
이 문제에 관하여(&(앰퍼샌드) 연산자를 사용하는 Ruby 반복 단축키), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/junko911/ruby-iteration-shortcut-with-ampersand-operator-923텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)