장점 Ruby on Rails에서 nil v. empty v blank에 대한 간결한 설명




레일즈 form_for (12)

한가지 차이점은 .nil? 그리고 .empty? Ruby 프로그래밍 언어에 의해 제공되는 메소드입니다. 반면 .blank? 웹 개발 프레임 워크 레일즈에서 added 된 것입니다.

나는 반복적으로 nil? 의 차이에 대한 명확한 정의를 찾고 있다고 생각한다 nil? , blank? , 그리고 empty? Ruby on Rails에서. 여기 내가 가장 가까이 온 것이있다.

  • blank? 객체는 false, empty 또는 공백 문자열입니다. 예를 들어, "" , " " , nil , []{} 는 비어 있습니다.

  • nil? 객체는 NilClass의 인스턴스입니다.

  • empty? 객체는 클래스에 고유하며, 정의는 클래스마다 다릅니다. 문자가 없으면 문자열은 비어 있고 항목이 없으면 배열은 비어 있습니다.

누락 된 것이 있거나 더 엄격한 비교가있을 수 있습니까?


nil? 모든 객체에서 호출 할 수있는 표준 Ruby 메소드이며 객체가 nil true 반환 true .

b = nil
b.nil? # => true

empty? 문자열, 배열 및 해시와 같은 일부 객체에서 호출 할 수있는 표준 Ruby 메서드이며 이러한 객체에 요소가없는 경우 true 반환 true .

a = []
a.empty? # => true

b = ["2","4"]
b.empty? # => false

empty? 객체가 없으면 호출 할 수 없습니다.

blank? 빈 객체뿐만 아니라 nil 객체에서 호출 될 수있는 Rails 메소드입니다.


Rails 4

@ corban-brook의 'Array gotcha : blank?'에 대한 대안 배열에 빈 값만 저장되어 있고 공백으로 간주 될 수 있는지 확인하기 위해? 참된:

[ nil, '' ].all? &:blank? == true

하나는 또한 할 수 있습니다 :

[nil, '', "", " ",'  '].reject(&:blank?).blank? == true

모든 경우에 유용한 테이블을 만들었습니다.

blank? , present? Rails가 제공합니다.


  • 그게 전부 nil? blank?
  • 모든게 empty? blank?
  • 아무것도 empty? nil?
  • 아무것도 nil? empty?

tl; dr - blank? 만 사용 blank? & present? """ " 을 구별하지 않으려면


.nil? 모든 객체에서 사용할 수 있으며 객체가 nil이면 true입니다.

.empty? 문자열, 배열 및 해시에서 사용할 수 있으며 다음과 같은 경우 true를 반환합니다.

  • 문자열 길이 == 0
  • 배열 길이 == 0
  • 해시 길이 == 0

.empty? 무언가에 NoMethodError 가 던져 질 것입니다.

그것은 어디에서이다. .blank? 그것이 레일스에 의해 구현되고 어떤 객체에서도 작동 할뿐만 아니라 .empty? 처럼 작동 .empty? 문자열, 배열 및 해시.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? 공백이 아닌 공백 만 포함하는 문자열에 대해서도 true를 평가합니다.

"  ".blank? == true
"  ".empty? == false

Rails는 또한 .present? 를 제공 .present? .blank? 의 부정을 돌려주는 .blank? .

배열 잡았다 : blank? 배열의 모든 요소 가 비어 있어도 false 를 반환합니다. 이 경우 공백을 확인하려면 all? 사용 all? blank? 예 :

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

다른 사람들은 그 차이점을 잘 설명해주었습니다.

Ruby On Rails에 추가하고 싶습니다. obj.blank? 를 사용하는 것이 더 낫 obj.blank? 또는 obj.present? obj.nil? 대신에 obj.nil? 또는 obj.empty? .

obj.blank? '' , [] , {} 등의 모든 유형을 처리하고 값을 사용할 수없는 경우 true 반환하고 모든 유형의 객체에서 값을 사용할 수 있으면 false 반환합니다.



빠른 팁 : !obj.blank? == obj.present? !obj.blank? == obj.present?

일부 표현에서 눈에 편리 할 수 ​​있습니다.


특별한 경우는 부울 값이 nil인지 평가하려고 할 때입니다.

false.present? == false
false.blank? == true
false.nil? == false

이 경우 .nil? 을 사용하는 것이 좋습니다 .nil?


nil? 모든 객체에서 사용할 수 있습니다. 객체가 'blank'값을 포함하여 값을 가지는지 아닌지를 결정합니다.

예 :

example = nil
example.nil?  # true

"".nil?  # false

기본적으로 nil? 객체가 실제로 'nil'과 동일한 경우에만 true를 반환합니다.

empty? 컬렉션으로 간주되는 객체에서만 호출됩니다. 여기에는 문자열 (문자 모음), 해시 (키 / 값 쌍의 모음) 및 배열 (임의의 객체 모음) 등이 포함됩니다. empty? true를 반환하면 컬렉션에 항목이 없습니다.

예 :

"".empty? # true
"hi".empty?   # false
{}.empty?  # true
{"" => ""}.empty?   # false
[].empty?   # true
[nil].empty?  # false

nil.empty?  # NoMethodError: undefined method `empty?' for nil:NilClass

empty? nil 객체가 컬렉션이 아니므로 nil 객체에서 호출 할 수 없으며 예외가 발생합니다.

또한 컬렉션의 항목이 비어 있다고해도 컬렉션이 비어 있지 않다는 것을 의미하지는 않습니다.

blank? 기본적으로 nil? 의 조합 nil? 그리고 empty? 콜렉션이라고 가정하는 오브젝트를 확인하는 데 유용하지만 nil 일 수도 있습니다.


그 약에 관한 작은 메모 any? 추천 : 그가 !empty? 것과 일반적으로 동일하다는 것이 맞습니다 !empty? . 그러나, any? 그냥 공백 문자 (ala " " ) 문자열을 반환 true .

물론 위의 1.9의 설명을 참고하십시오.





ruby