PHP / empty
во многом совпадает с эквивалентом Ruby, empty?
Для строк в Rails метод blank?
предпочтительнее empty?
# this is PHP
$bob = array(); # empty( $bob ) => true
$bob = array( "cat" ); # empty( $bob ) => false
$bob = null; # empty( $bob ) => true
$bob = "boo" # empty( $bob ) => false
$bob = ""; # empty( $bob ) => true
# this is Ruby
[].empty? # => true
[ "cat" ].empty? # => false
nil.empty? # => NoMethodError
"boo".empty? # => false
"".empty? # => true
PHP / isset можно заменить на has_key? для объекта Hash. Для общего использования локальной переменной Ruby создает переменные как nil, когда на них ссылаются в коде, поэтому единственное, что легко проверить, это то, являются ли они nil?
EDIT
Вы также можете использовать ключевое слово defined?
, чтобы дублировать использование PHP isset
для локальных переменных.
#PHP
isset($bob); # => false
$bob = "foo";
isset($bob); # => true
$bob = array();
isset($bob['cat']); # => false
$bob = array( 'cat' => 'bag' );
isset($bob['cat']); # => true
isset($bob['dog']); # => false
#Ruby
bob # => nil
defined?(bob) # => false
bob.nil? # => true
bob = "foo"
bob # => "foo"
bob.nil? # => "false"
bob = {}
bob.has_key? :cat # => false
bob = { :cat => 'bag' }
bob.has_key? :cat # => true
С одной вещью нужно быть осторожнее: в PHP пустая строка или числовой 0 будут иметь значение false в операторе if
. В Ruby только nil
и false
оцениваются как ложные в операторе if. Это требует добавления еще двух булевых методов запроса, blank?
и zero?
. Эти методы смешиваются с классом String как часть приложения Rails. Отдельные их версии можно найти на Facets.