2009-10-31 11 views
103

¿Hay alguna guía sobre cómo diferenciar entre .nil?, .blank? y .empty??Cuándo utilizar nil, blanco, vacío?

En general, siempre estoy confundido en cuanto a cuándo usarlos en mi aplicación, ya que todos parecen significar lo mismo, pero tienen diferentes significados.

¿Alguien tiene alguna hoja de trucos sobre los detalles sangrientos?

Respuesta

163
  • nil? - comprueba para ver si la variable hace referencia a un objeto o no

  • empty? - puede ser utilizado para comprobar en varios tipos de objetos como empty string "" o empty array []

  • blank? - controles para nil? o empty?.

+3

La cadena que contiene solo caracteres "en blanco" se considera '¿en blanco?' Pero no '¿vacía?', P. "\ n \ t" – xhh

+2

Blanco también devuelve verdadero si el objeto tiene un valor de falso – riley

+0

Creo que la descripción de 'nil' es incorrecta porque' nil.nil? 'es verdadera, pero' nil' es un objeto de 'NilClass '. –

5

me pareció una buena explicación here:

nula? prueba si el objeto es exactamente nulo, es decir si es el único y único ejemplo de NilClass.

vacío? es un método al que responden algunos objetos . Debe verificar la documentación para cada caso. Para el ejemplo , y el conjunto vacío es uno que no es nulo (es una matriz ¿no?) Y no tiene elementos. Una cadena vacía es una que no es nil (es una cadena ¿verdad?) Y no tiene bytes, nada.

¿El espacio en blanco? El método que usted solicita no pertenece al rubro , es una extensión de Rails : http://api.rubyonrails.com/classes/Object.html#M000011.

Si hace clic a través del enlace al final de ese puesto se encuentra que el método blank? simplemente combina los nil? y empty? llamadas a métodos.

+0

'cadena que contiene sólo caracteres "en blanco" es considerado como blanco? pero no está vacío ?, p. "\ n \ t" ', como [@xhh] (http://stackoverflow.com/questions/1654960/when-to-use-nil-blank-empty#comment21296385_1655001) escribió en otra respuesta a esta pregunta. – ANeves

6
  • nil? se define en toda Objects, que sólo devuelve true en el nil Singleton.

  • blank? se define en todos los objetos demasiado, devuelve true si el objeto también responde a empty? y está vacío, o es un valor false tipo (!object es siempre true).

  • empty? se define en varios objetos de colección, y es true si no tiene elementos. También se define en String.

nota que blank? es ActiveSupport y no en los carriles 1.8.

168

Aquí hice esta tabla útil con todos los casos enter image description here

+10

Esta tabla es excelente, ¡gracias por compartir! – BTHarris

+2

Esto es realmente útil. ¡Gracias! – Linus

+2

Bravo, Juliane :) –

Cuestiones relacionadas